“이번 달도 밤샘 정산입니다.” — 정산 시스템은 어떻게 만들었을까 (실전편)
백엔드
“이번 달도 밤샘 정산입니다.” — 정산 시스템은 어떻게 만들었을까 (실전편)
두줄요약
정산 도메인의 특성에 맞춰 이벤트 처리와 배치 처리를 분리한 하이브리드 구조를 설명했습니다. Kafka, Spring Batch, Argo Workflow로 실패와 재처리를 전제로 한 정산 시스템을 구현했습니다.
구조와 흐름
- 정산 원천 데이터는 Kafka 이벤트로 수신하고, 멱등 저장과 DLT 격리로 중복 수신·재처리 상황을 전제로 처리
- 정산 수행은 Spring Batch 기반 배치로 마감·리포트·복구를 담당하고, Argo Workflow가 실행 시점과 재실행 흐름을 제어
- 정산 대상 데이터에 PENDING, PROCESSING, COMPLETED 상태를 두어 배치 실패 시에도 대상 단위로 재정의·재처리 가능
선택 이유
- 실시간 반영이 필요한 이벤트 처리와 회계 마감처럼 안정성이 중요한 배치 처리를 분리한 하이브리드 구조 채택
- 예측 가능성, 재현성, 장애 대응 용이를 우선해 Kotlin, Spring Boot, Spring Batch, Kafka, MySQL 조합 선택
- 정산 결과의 Source of Truth와 멱등성 갱신을 위해 트랜잭션이 명확한 RDB 사용
성능/운영 포인트
- DLT 발생률이 전체 이벤트 대비 0.001% 미만으로 유지되며, 실패 이벤트는 전체 정산 흐름을 멈추지 않도록 격리
- 배치 실행 상태, 실패 로그, 지연(Lag), Latency, 인프라 지표를 함께 모니터링해 이상 징후를 조기 감지
- 주 단위 상태 점검으로 성능 저하와 병목을 사전 식별