Devin.KR

동시 대여와 중복 요청

DB 제약과 요청 식별자로 동시 대여 및 재시도의 정합성을 지킵니다.

진도 0%

레슨

  1. 경쟁 상태 재현

    프로세스·스레드와 공유 상태의 경쟁을 구분합니다.

  2. DB 제약과 충돌 처리

    DB 제약을 정합성의 경계로 삼고 충돌을 변환합니다.

  3. 요청 식별과 멱등성

    요청 키·본문·응답을 연결해 재시도 정책을 정의합니다.

  4. 동시 재시도 검증

    동시 요청의 성공 수·이력 수를 검증합니다.

동시 대여와 중복 요청 미션

앞 모듈의 결과를 이어서 동시 대여와 응답 유실 후 재시도를 안전하게 처리합니다.

요구사항

  • 회원+요청 키 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
미션 시작 코드
모범 답안모범 답안 내려받기

검토 기준

  • 앞 단계의 계약과 테스트를 유지하며 변경 이유를 설명합니다.
  • 정상·경계·실패 경로의 근거와 재현 절차를 제출합니다.