피드로 돌아가기
Dev.toBackend
원문 읽기
Idempotency-Key 기반 중복 결제 방지 및 Thundering Herd 해결 설계
"Why Your Retry Logic Is Silently Charging Customers Twice"
AI 요약
Context
네트워크 지연으로 인한 클라이언트의 반복 요청이 서버 측 중복 처리로 이어져 결제 오류가 발생하는 문제 발생. 단순 멱등성 구현 시 발생하는 동시성 제어 실패와 잘못된 응답 캐싱으로 인한 시스템 불안정성 해결 필요.
Technical Solution
- Idempotency-Key 헤더 도입을 통한 요청 고유 식별 및 응답 캐싱 구조 설계
- Per-key Lock 메커니즘을 적용하여 동일 키의 동시 요청 시 단일 핸들러만 실행하는 Thundering Herd 방지
- Lock 획득 직후 재검증하는 Double-check 패턴을 적용하여 대기 중인 요청의 중복 실행 차단
- 200, 201, 204 등 성공 상태 코드만 선택적 캐싱하여 일시적 500 에러의 영구 캐싱 문제 해결
- 요청 바디의 해시 값을 비교하여 동일 키에 다른 데이터가 전송된 경우 422 Unprocessable Entity 응답 처리
- 처리 중인 요청에 대한 즉각적인 409 Conflict 반환으로 클라이언트의 불필요한 대기 및 리소스 낭비 방지
실천 포인트
- 결제 등 상태 변경 API 설계 시 Idempotency-Key 헤더 필수 검토 - 동시 요청 처리를 위해 분산 락(Redis SET NX 등)과 Double-check 로직 구현 여부 확인 - 에러 응답의 캐싱 여부를 설정 가능하게 설계하여 복구 가능성 확보 - 동일 키-다른 바디 요청에 대한 유효성 검증 로직 포함 여부 체크