Full output
GPT-5.6 Sol · medium 원문 결과물
재고 예약 상태 전이·멱등성 보수 / OpenAI / GPT-5.6 Sol / 실행일 2026-07-30
gpt-5.6-sol-medium 작업 결과
변경한 파일
src/main/java/com/samebrief/reservation/service/ReservationService.javasrc/test/java/com/samebrief/reservation/ReservationServiceContractTest.java
작업 사본은 verification/work/14-inventory-reservation-state/gpt-5.6-sol-medium에 보존했다.
구현 내용
null, 빈 문자열과 공백 문자열을 포함한 예약 입력 검증- 최초 등장 순서를 유지하는 중복 상품 합산과
long오버플로 검출 - 정규화한 상품별 총수량을 이용한 요청 멱등성 비교
- 모든 상품의 재고를 먼저 확인한 뒤에만 차감하는 다중 상품 예약 원자성
- 주입된
Clock을 이용한 생성 시각과 정확한 15분 만료 시각 계산 - 만료 경계
now >= expiresAt처리와 재고 1회 복구 - 동일 결제 ID 재시도, 다른 결제 ID 충돌과 전역 결제 ID 고유성 처리
- 취소·만료 상태의 반복 호출을 no-op으로 처리해 재고 중복 복구 방지
- 취소·만료 뒤 예약 생성 재시도에서 기존 종결 예약 반환
서비스에서 입력 정규화, 멱등성 판정과 전체 재고 선검증을 순서대로 수행하고, 검증이 끝난 뒤 기존 저장소의 상품별 증감 연산을 적용하는 방식을 선택했다. 별도 저장소 API, 잠금이나 외부 인프라는 추가하지 않았다.
발견한 기존 오류
- 공백 요청 ID와 상품 ID를 허용했다.
- 중복 상품 수량을 합산하지 않았고 합산 오버플로도 검출하지 않았다.
- 다중 상품 예약에서 재고가 부분 차감될 수 있었다.
- 기존 요청 ID의 payload 차이를 확인하지 않았다.
- 만료 시각과 정확히 같은 순간을 만료로 판단하지 않았다.
- 확정 시 만료된 예약의 상태와 재고를 갱신하지 않았다.
- 확정된 예약의 다른 결제 ID와 예약 간 결제 ID 중복을 허용했다.
- 종결 상태의 취소 재시도에서 재고가 중복 복구될 수 있었다.
테스트 결과
실행 명령:
./gradlew clean test --no-daemon
결과:
- 기본 테스트: 4개 통과
- 추가 계약 테스트: 19개 통과
- 전체: 23개 통과, 실패 0개
BUILD SUCCESSFUL