결제는 오류가 발생할 경우, 매우 크리티컬하기 때문에
아래와 같은 다양한 방법으로 안정성을 확보하는 것이 중요합니다
주로 사용하는 방법은 Idempotent API 설계
동일 요청이 여러 번 호출되더라도 결과가 중복 처리되지 않도록 보장하는 설계
request_id(UUID) 또는 거래 고유 키를 요청에 포함
서버 단에서 request_id 기준으로 처리 여부를 조회 후 이미 처리된 요청은 무시하거나 처리 결과를 재반환
네트워크 지연, 중복 호출, 앱 재시도 시에도 중복 결제를 방지
그 다음 재시도 정책 (Retry Policy) 적용
외부 PG사/인증 시스템에서 일시적 오류가 발생했을 때 안정적으로 재시도
exponential backoff (점진적으로 대기 시간 증가) 적용, 최대 재시도 횟수 제한(예: 3회)
재시도 후에도 실패하면 트랜잭션 로그에 기록하고 보류 상태 처리
일시적 네트워크 오류나 장애 발생 시 자동 복구율 향상, 사용자 경험 개선(불필요한 결제 실패 감소)
트랜잭션 로그 (Transaction Log)
모든 결제 요청·응답을 DB/로그 시스템에 원자적으로 기록
결제 요청 전/후 상태(requested, approved, failed, rollback)를 기록
분산환경에서는 이벤트 소싱(Event Sourcing) 또는 메시지 큐를 활용해 로그 일관성 유지
장애 발생 시 재처리와 추적이 가능, 정산과 환불 시 기준 데이터로 활용 가능
위의 3가지는 기본적으로 적용되어야 한다고 생각한다
추가적으로 더 좋은 안정성 확보 방법이 있다면 공유부탁드립니다
'Etc' 카테고리의 다른 글
| Design Pattern2 - Adapter (0) | 2025.09.28 |
|---|---|
| 간단한 SQL 튜닝 팁 (0) | 2025.09.28 |
| nofile이란? (0) | 2025.09.21 |
| 크레덴셜 스터핑 (0) | 2025.09.14 |
| ARS 인증의 무력화 (0) | 2025.09.14 |