피드로 돌아가기
Dev.toBackend
원문 읽기
Idempotency Key를 넘어 Database 제약 조건으로 완성하는 결정론적 결제 시스템 설계
Idempotency Is Not Enough: Designing Deterministic Payment Systems
AI 요약
Context
단순 Idempotency Key 도입만으로는 서로 다른 키를 가진 동일 비즈니스 요청의 중복 처리 가능성을 배제할 수 없는 한계 존재. 네트워크 타임아웃, 클라이언트 재시도, 백그라운드 작업 및 Webhook 중복 수신으로 인한 데이터 무결성 훼손 리스크 상존.
Technical Solution
- Request Boundary 보호를 위한 Client-generated 및 Server-generated Idempotency Key의 이원화 운용
- 비즈니스 수준의 고유성(Business-level Uniqueness)을 정의하여 논리적 트랜잭션의 정체성 확립
- Application Layer의 단순 검증이 아닌 Database Unique Constraint를 통한 원자적 중복 방지 체계 구축
- 사용자 액션은 Client가 키를 생성하고, 시스템 재시도는 Server가 키를 생성하는 책임 분리 설계
- 트랜잭션을 단순 HTTP 이벤트가 아닌 지속성 있는 비즈니스 객체로 모델링하여 추적성 확보
- Heuristic한 중복 체크 방식에서 Database 기반의 Deterministic한 커밋 제어 구조로 전환
실천 포인트
1. Idempotency Key가 비즈니스 로직의 중복을 완전히 막을 수 없는 시나리오(다른 키로 동일 요청)를 식별했는가?
2. 주문 ID, 결제 주기, 사용자 ID 등 비즈니스 관점의 Unique Key 조합을 정의하고 DB 제약 조건으로 강제했는가?
3. 클라이언트 재시도와 서버 내부의 Retry Worker가 생성하는 키의 생성 주체와 생명주기를 분리했는가?
4. 'Check-then-Insert' 방식의 Race Condition 가능성을 배제하고 DB의 원자적 쓰기를 통해 최종 정합성을 보장하는가?