Q. 새롭게 기획한 프로젝트의 메인 서비스 기능에 대한 전반적인 피드백을 받고 싶습니다. 핵심 서비스로는 '도서 검색', '도서 대출/예약', '도서 나눔'이 있습니다. 특히 대용량 데이터 검색, 동시성 문제 해결, 그리고 대량 트래픽 처리에 관한 의견을 듣고 싶습니다
A. 멘토님 답변정리
→ 구체적인 질문이 필요합니다.
→ ex) 프로젝트에 특정 부분 등 좀더 디테일한 부분을 생각하면 좋은 답변을 얻을 수 있습니다.
→ 우선 프로젝트를 자유롭고 편하게 진행해보면서 다양한 시도를 진행해봐야 한다. 문제가 발생 할 때,
→ 예로, jmeter테스트 진행 중 성능이 안좋은것 같다던지, 코드를 보면서 같이 보는것이 좋다.
→ 설문조사보다 기능도 다양하고, 좋다.
검색도 키워드 등 다양한 분류
대출/나눔 → 동시성문제, 대량 트래픽 문제 Queue (대기열 구현), 비동기 처리가 필요 할 것 같은 부분이다.
Q. MVP의 주요 목표와 다음주 개발 시나리오를 세웠습니다. 이에 대한 피드백을 듣고 싶습니다. 애플리케이션 최적화, 네트워크 및 서버 최적화, 코드 최적화, 데이터베이스 연결, Redis를 이용한 캐싱 처리 등의 내용을 포함하였습니다.
A. 멘토님 답변정리
세부계획 마인드맵을 확인했습니다.
애플리케이션 레벨 최적화부터 생각하신 순서대로 차분히 진행해보시면 좋을 것 같습니다.
Q. 하나의 데이터베이스에 두 개의 서버가 접근했을 때, 각 서버가 데이터를 서로 다르게 수정한 후 저장을 시도할 경우 어떤 결과가 발생하는지 궁금합니다.
1. 먼저 저장한 쪽을 db에 반영한 후, 나중에 저장한 쪽을 db에 반영해 실질적으로는 나중에 저장한 쪽의 수정 사항만 반영됨
2. 먼저 저장한 쪽을 db에 반영한 후, 나중에 저장한 쪽은 불러왔던 데이터와 저장된 데이터의 값이 달라 에러를 출력하여 실질적으로는 먼저 저장된 쪽의 수정 사항만 반영됨
3. 먼저 저장한 쪽은 db에 직접 반영되고, 나중에 저장한 쪽은 기존 데이터와 현재 저장된 데이터를 비교해 양 쪽의 수정사항이 모두 반영될 수 있도록 변경
또한 위와 같은 상황에서 벌어진 결과가 기획 의도가 아니라면 이를 동시성 문제로 봐도 될지, 기획 의도와 동일하게 작용하더라도 동시성 문제로 보고 별도의 수정 조치를 해야 하는 것인지 궁금합니다.
A. 멘토님 답변 정리
첫번째 사항이 일반적입니다.
1. 먼저 저장한 쪽을 db에 반영한 후, 나중에 저장한 쪽을 db에 반영해 실질적으로는 나중에 저장한 쪽의 수정 사항만 반영됨 → 일반적
또한 위와 같은 상황에서 벌어진 결과가 기획 의도가 아니라면 이를 동시성 문제로 봐도 될지
, 기획 의도와 동일하게 작용하더라도 동시성 문제로 보고 별도의 수정 조치를 해야 하는 것인지 궁금합니다.
→ 다른 결과가 나오면 동시성문제가 발생한것이 맞습니다.
→ 해결
lock을 최대한 안쓰는 선에서 설계하되, 동시성 이슈를 해결하고 데이터 정합성도 유지해줘야되는 것이 목표이고 어려운 과정이지만 도전해보시길 바랍니다.
A, B, C
1. A
2. B
1. A, B
2. B', C
A, B', C
row level lock
write -> row level lock (DB)
@Transactional
read level에서의 격리
write level에서의 격리