피드로 돌아가기
Dev.toBackend
원문 읽기
Immutable Ledger와 Holdback 도입을 통한 Affiliate 환불 리스크 제로화
Clawing back affiliate commissions when a customer refunds: design the ledger first
AI 요약
Context
단순 Balance 업데이트 방식의 설계로 인해 환불 및 Dispute 발생 시 데이터 정합성 훼손과 추적 불가 문제가 발생함. 특히 정산 주기와 환불 가능 기간의 불일치로 인해 이미 지급된 수수료를 회수해야 하는 Clawback 상황의 처리 로직 부재가 핵심 병목임.
Technical Solution
- Earned와 Payable 상태를 분리하여 정산 가능 시점까지 수수료를 Pending 상태로 유지하는 Holdback Period 설계
- 단일 Balance 필드 수정 대신 모든 변동 내역을 기록하는 Immutable Ledger 구조 채택을 통한 감사 추적성(Audit Trail) 확보
- Stripe Webhook 기반의 Event-Driven 아키텍처를 구축하여 환불 및 분쟁 발생 시 실시간으로 Reversed Entry를 생성하는 로직 구현
- Refund ID를 기반으로 한 Idempotency 키 적용으로 Webhook 중복 수신에 따른 중복 차감 방지
- 부분 환불 대응을 위해 전체 금액이 아닌 환불 비율에 비례한 수수료 차감 로직 적용
- 잔액 마이너스 발생 시 차기 수익에서 상계 처리하거나 일정 금액 이하를 Write-off 하는 정책 기반의 처리 프로세스 정립
실천 포인트
- 잔액(Balance)을 저장하지 말고 모든 트랜잭션 내역(Ledger)의 합계로 계산하는가? - 정산 가능 시점(Available)과 발생 시점(Pending)을 분리하여 리스크 윈도우를 관리하는가? - 외부 API Webhook 처리 시 멱등성(Idempotency)을 보장하는 유니크 키를 사용하는가? - 데이터 수정(Update) 대신 새로운 상태의 행을 추가(Insert)하는 Immutable 패턴을 적용했는가?