피드로 돌아가기
Dev.toBackend
원문 읽기
Idempotency Key 기반 상태 머신 설계를 통한 중복 결제 및 계정 차단 문제 해결
Why We Accidentally Blocked Our Users: A Deep Dive into Idempotency in Distributed Systems
AI 요약
Context
네트워크 지연 및 브라우저 재시도로 인한 동일 요청의 다중 유입 발생. 단순 보안 로직이 이를 이상 징후로 판단하여 정상 사용자를 공격적으로 차단하는 설계 결함 노출.
Technical Solution
- Client 생성 Idempotency-Key 도입을 통한 개별 사용자 의도(Intent)의 고유 식별화
- STARTED, COMPLETED, FAILED 상태를 갖는 State Machine 구조의 Idempotency Layer 설계
- Atomic Write를 통한 동시성 제어로 동일 키의 중복 실행 방지 및 409 Conflict 응답 처리
- Payload Hash 저장 및 비교를 통해 동일 키 내 서로 다른 요청 유입에 따른 데이터 무결성 검증
- 성공 응답의 캐싱 처리를 통한 중복 요청 시 실제 비즈니스 로직 실행 제외 및 결과 반환
- Rate Limiting과 Idempotency의 역할을 분리하여 인프라 보호와 데이터 정밀도를 각각 확보
실천 포인트
- 금전 거래, 주문 생성 등 비가역적 Side Effect 발생 엔드포인트에 Idempotency 필수 적용 - Idempotency Key의 첫 기록 단계에서 Atomic 연산을 보장하는 저장소 활용 - 요청 페이로드의 Hash 값을 저장하여 키 재사용 시 데이터 변조 여부 확인 - 단순 프론트엔드 버튼 비활성화가 아닌 서버 사이드에서의 상태 제어 로직 구현 - 성공 응답은 캐싱하되, 실패 응답의 캐싱은 재시도 가능 여부에 따라 엄격히 구분