동시 대여와 중복 요청
DB 제약과 요청 식별자로 동시 대여 및 재시도의 정합성을 지킵니다.
진도 0%
레슨
- 경쟁 상태 재현
프로세스·스레드와 공유 상태의 경쟁을 구분합니다.
- DB 제약과 충돌 처리
DB 제약을 정합성의 경계로 삼고 충돌을 변환합니다.
- 요청 식별과 멱등성
요청 키·본문·응답을 연결해 재시도 정책을 정의합니다.
- 동시 재시도 검증
동시 요청의 성공 수·이력 수를 검증합니다.
동시 대여와 중복 요청 미션
앞 모듈의 결과를 이어서 동시 대여와 응답 유실 후 재시도를 안전하게 처리합니다.
요구사항
- 회원+요청 키 UNIQUE와 요청 본문 해시·대여 결과를 트랜잭션으로 저장합니다.
- 동일 키·다른 본문은 409, 동일 키·같은 본문은 저장된 결과를 반환합니다.
- 충돌 후 별도 트랜잭션으로 결과를 읽고 재시도 횟수에 상한을 둡니다.
- 키 없는 기존 API와 앞 모듈의 142개 회귀 검사를 유지합니다. 키가 있는 요청은 세션 회원과 검증된 bookId의 정규화 SHA-256을 사용합니다.
- 대여 결과 id·201·Location을 재생하며 키 보존 기간에는 반납 뒤에도 재대여하지 않습니다.
완료 기준
- 서로 다른 회원의 동시 대여에서 성공 1건·409 1건·현재 대여와 이력 각 1건입니다.
- 동일 회원·키·본문 동시 요청과 응답 유실 후 재시도에서 대여 이력은 1건입니다.
- 같은 키의 다른 본문은 409이며 무한 재시도 없이 테스트 제한 시간 안에 끝납니다.
- ./mvnw test와 python3 report.py로 누적 156개 검사의 실패·오류·건너뜀 0을 확인합니다.
- MockMvc 로그인·CSRF 경계에서 201 본문과 Location 재생, 다른 본문 409, 키 길이 64 허용·65 거절을 검증합니다.
- 조회는 빈 결과이고 예약은 매번 중복키인 단위 검사에서 3회 롤백 후 RETRY_EXHAUSTED 경로로 끝납니다.
./mvnw test미션 시작 코드
모범 답안
모범 답안 내려받기검토 기준
- 앞 단계의 계약과 테스트를 유지하며 변경 이유를 설명합니다.
- 정상·경계·실패 경로의 근거와 재현 절차를 제출합니다.