피드로 돌아가기
Dev.toBackend
원문 읽기
분산 시스템의 필연적 중복 요청을 무력화하는 Idempotency 설계
Idempotency Is More Important Than You Think
AI 요약
Context
네트워크 장애, 클라이언트 재시도, 메시지 큐의 At Least Once Delivery로 인한 중복 요청의 필연성 존재. 단순 요청-응답 구조의 설계로는 결제 중복 청구나 주문 중복 생성과 같은 데이터 무결성 파괴 문제 해결 불가.
Technical Solution
- 동일 요청의 반복 실행 시에도 최종 상태를 동일하게 유지하는 Idempotency 원칙 적용
- 상태 변경 시 누적 합산 방식(balance += 100)을 지양하고 절대 값 설정 방식(isActive = true)으로 설계
- POST 대신 리소스 식별자를 포함한 PUT 메서드 활용을 통한 상태 덮어쓰기 구조 구현
- Webhook 및 Message Queue 소비 단계에서 중복 이벤트에 대응하는 가드 로직 구축
- '요청 성공 여부'가 아닌 '중복 실행 시의 영향도'를 중심으로 한 장애 내성 설계로 전환
실천 포인트
1. 결제 및 주문 API 설계 시 Idempotency Key 도입 여부 검토
2. HTTP Method 선정 시 POST와 PUT의 멱등성 차이를 고려한 엔드포인트 설계
3. Message Queue 소비 로직에 중복 처리 메커니즘(Deduplication) 반영
4. 재시도(Retry) 로직 적용 전 해당 오퍼레이션의 멱등성 확보 여부 확인