WEBBOOK CHAPTER

Spring Boot 4.1, 시작부터 런칭까지: 29장. 멱등성 키를 서버 자산으로 관리한다

29장. 멱등성 키를 서버 자산으로 관리한다

클라이언트가 보내는 Idempotency-Key는 사용자·operation과 결합해 unique하게 저장한다. request body의 canonical hash도 기록해 같은 key로 다른 명령이 오면 409를 반환한다. 처리 중·완료·실패 상태와 만료 정책을 두며 완료 response는 필요한 최소 값만 저장한다. 다른 사용자가 같은 key를 보내도 결과가 노출되지 않아야 한다.

처음 요청이 처리 중일 때 두 번째 요청은 무조건 새 작업을 시작하지 않는다. 짧게 기다린 뒤 기존 결과를 반환하거나 409/202로 상태 조회 위치를 안내한다. DB commit 직후 connection이 끊긴 실습에서 retry가 기존 Handoff id를 돌려주고 audit/outbox가 한 건임을 검증한다.

보존 기간은 mobile offline retry, gateway retry, 업무 정정 기간보다 길어야 한다. 무기한 저장하지 않고 개인정보와 용량을 고려한다. batch cleanup은 진행 중 key를 지우지 않으며 삭제량·소요 시간·lock을 관측한다. 멱등성은 버튼 비활성화의 대체물이 아니라 network와 process failure를 견디는 server contract다.