기술 블로그
B레벨 - 심화
Stripe API 멱등성(Idempotency) 설계 원칙
API 설계
분산 시스템
결제
RubyPostgreSQLRedisREST API
배경
결제 시스템에서 네트워크 장애나 타임아웃으로 인한 중복 요청은 심각한 문제를 야기합니다. Stripe는 전 세계 수백만 비즈니스의 결제를 처리하면서, API의 안정성과 정확성을 보장하기 위한 멱등성 설계를 핵심 원칙으로 삼았습니다.
도전 과제
분산 환경에서 클라이언트의 재시도가 안전하게 동작하도록 보장해야 합니다. 동시에 같은 멱등성 키로 들어오는 요청의 경쟁 조건(race condition)을 방지하고, 멱등성 키의 생명주기를 관리해야 합니다. 또한 부분 실패 시 일관된 상태를 유지해야 합니다.
해결 방안
Idempotency-Key 헤더 기반의 멱등성 프레임워크를 설계했습니다. 각 API 요청의 상태를 Atomic Phase로 관리하고, 데이터베이스 트랜잭션과 결합하여 정확히 한 번(exactly-once) 실행을 보장합니다. ACID 트랜잭션 내에서 멱등성 키 잠금, 요청 처리, 결과 저장을 원자적으로 수행합니다.
결과
중복 결제 발생률 0에 수렴. 클라이언트 재시도 안전성 100% 보장. API 신뢰성 SLA 99.999% 달성. 개발자 경험 향상으로 Stripe API 채택률 증가.
핵심 인사이트
- 1.멱등성 키와 데이터베이스 트랜잭션의 결합이 Exactly-once 시맨틱의 핵심
- 2.Atomic Phase 패턴으로 복잡한 다단계 작업의 멱등성을 구조적으로 보장
- 3.멱등성 키의 TTL과 재사용 정책이 시스템 복잡도에 큰 영향
- 4.클라이언트 라이브러리에서의 자동 재시도와 서버의 멱등성 보장이 함께 동작해야 효과적