멱등성의 핵심은 요청 횟수를 줄이는 것이 아니라, 같은 의도가 여러 번 도착해도 데이터베이스의 최종 상태가 한 번만 바뀌게 만드는 것입니다.
아직 처리 기록이 없다
같은 키로 저장된 결과가 없으므로, 이 요청은 실행 대상으로 판단됩니다.
이미 처리된 기록이 있다
같은 키가 이미 남아 있으므로, 이 요청은 재실행 금지 경로로 이동합니다.
PENDING → PAID
결제 row를 한 번 생성하고 주문 상태를 완료로 바꿉니다. 효과는 여기서 단 한 번 발생합니다.
PAID 유지
추가 INSERT나 상태 변경 없이 기존 결과만 읽습니다. 중복 결제가 생기지 않습니다.
새 결과를 저장한 뒤 반환
생성된 payment_id와 처리 결과를 함께 저장해, 이후 재시도가 같은 값을 받을 수 있게 합니다.
저장된 응답을 그대로 재사용
타임아웃 뒤 재시도가 와도, 서버는 기존 성공 결과를 다시 돌려주고 비즈니스 로직은 다시 돌리지 않습니다.
멱등성은 재시도를 허용하면서도 효과는 한 번으로 제한하는 계약입니다. 같은 요청이라면 “다시 처리”가 아니라 “기존 결과 조회”로 수렴해야 합니다.