피드로 돌아가기
Cross-border payment reconciliation: matching multi-currency, multi-acquirer settlement files
Dev.toDev.to
Backend

CSV 기반 정산을 Event 기반 Read Model 구조로 전환하여 매칭 정확도 99% 달성

Cross-border payment reconciliation: matching multi-currency, multi-acquirer settlement files

Payneteasy2026년 6월 5일7intermediate

Context

다양한 Acquirer마다 상이한 정산 파일 포맷과 FX Rounding, Fee 계산 방식의 불일치로 인한 정산 데이터 검증의 복잡성 증대. 단순 CSV 매칭 방식으로는 대규모 트래픽 환경에서 데이터 누락 및 오차 식별에 과도한 리소스가 소모되는 한계 존재.

Technical Solution

  • Acquirer별 개별 Normalizer를 통한 정산 파일의 Event 기반 단일 스키마 표준화
  • 재처리를 위한 원본 데이터 보존을 위해 JSONB 타입의 raw 컬럼을 포함한 settlement_events 테이블 설계
  • Internal Record와 Settled Record를 각각 독립적인 Flat Table로 투영하는 Dual Read Model 구조 채택
  • SQL FULL OUTER JOIN을 활용해 internal_gross, internal_fee, internal_ccy 등의 불일치 지점을 6개 Bucket으로 자동 분류하는 Diff 로직 구현
  • External ID 부재 시 금액, 통화, 날짜(T±2), 카드 번호 끝 4자리(last4)를 조합한 Fallback 매칭 알고리즘 적용
  • 정산 상태를 Match rate, Unmatched aging, Net delta라는 3가지 핵심 지표로 계량화하여 운영 가시성 확보

1. Acquirer별 Normalizer 설계 시 원본 데이터를 JSONB로 보관하여 파싱 로직 수정 시 재다운로드 없이 재처리 가능한 구조인지 확인

2. 단순 ID 매칭 실패를 대비해 비즈니스 키(금액, 날짜, 일부 식별자)를 조합한 Fallback 매칭 전략 수립

3. 정산 오차를 단순 에러가 아닌 상태별 Bucket으로 정의하여 운영팀이 독립적으로 해결 가능한 Runbook 체계 구축

원문 읽기