WEBBOOK CHAPTER

NestJS 11, 시작부터 런칭까지: 32장. Idempotency-Key의 생애를 설계한다

32장. Idempotency-Key의 생애를 설계한다

키는 tenant·actor·operation과 결합하고 request canonical hash를 저장한다. 같은 키·같은 body는 기존 response, 같은 키·다른 body는 409다. PROCESSING, COMPLETED, 제한된 FAILED 상태와 lease를 두며 process crash 뒤 누가 이어받을지 정한다. response 전체보다 resource id와 stable result를 저장한다.

commit 직후 HTTP 응답이 끊긴 실패를 주입한다. client가 같은 키로 다시 요청하면 새 Dispatch가 아니라 기존 DH-1842를 받는다. Assignment, StatusEvent, Outbox가 한 건인지 SQL로 확인한다. 버튼 disabled는 이 계약을 대신하지 않는다.

cleanup은 진행 중 key와 offline client retry window를 고려한다. key를 log에 남길 때 공격자가 만든 긴 값과 newline을 제한한다. 다른 tenant가 같은 키로 기존 결과를 추측하지 못하게 한다. API 문서에는 생성 규칙, 보존 기간, conflict와 retry behavior를 명시한다.