피드로 돌아가기
Building a Payment Processor: My First Attempt Was a Disaster
Dev.toDev.to
Backend

분산 시스템 간 데이터 불일치로 인한 중복 결제 문제 분석

Building a Payment Processor: My First Attempt Was a Disaster

Oreoluwa Bimbo-Salami2026년 5월 4일3intermediate

Context

단일 API 엔드포인트에서 외부 Payment Provider 호출과 DB 기록을 순차적으로 처리하는 단순 구조 설계. 외부 시스템과 내부 DB 간의 분산 트랜잭션 부재로 인해 네트워크 타임아웃 및 중복 요청 시 데이터 정합성 붕괴 가능성 확인.

Technical Solution

  • 요청 중복 방지를 위한 Idempotency Key 도입 필요성 확인
  • 외부 API 호출과 DB 쓰기 간의 원자성 결여로 인한 Ghost Charge 발생 지점 식별
  • 클라이언트 타임아웃으로 인한 Context 취소 시 DB 기록 누락 및 중복 결제 유발 구조 파악
  • 동기적 처리 방식에서 Background Worker를 활용한 비동기 처리 구조로의 전환 설계
  • Provider 상태와 DB 상태를 동기화하기 위한 상태 머신 기반의 추적 메커니즘 필요성 도출

- 외부 API 호출 전 Idempotency Key를 통한 요청 중복 검증 로직 구현 여부 확인 - 분산 시스템 간 상태 동기화를 위해 Transactional Outbox 패턴 검토 - 외부 시스템의 지연 응답에 대비한 적절한 Timeout 설정 및 멱등성 보장 전략 수립 - 성공/실패 외에 'Pending' 상태를 도입하여 최종 상태 확정 전까지의 중간 과정 기록

원문 읽기