1. 왜 정산은 배치 설계가 중요한가
정산은 다음 특성을 가진다.
- 대량 데이터
- 장시간 실행
- 부분 실패 허용
- 재실행이 일상
따라서 핵심은 정확성 + 복구 가능성이다.
2. 도메인 경계
Settlement Context
- SettlementJobRun (정산 실행 단위)
- SettlementItem (정산 항목)
- SettlementResult (처리 결과)
외부 지급/전표 시스템은 의존성 분리한다.
3. 배치 플로우 설계
1. JobRun 생성 2. 정산 대상 조회 3. SettlementItem 생성 4. Item 단위 처리 5. 결과 집계
JobRun은 실행 1회를 의미하고
Item은 재처리 가능한 최소 단위다.
4. 트랜잭션 경계
- JobRun 생성: 단일 트랜잭션
- Item 생성: 단일 트랜잭션
- Item 처리: Item당 트랜잭션
❌ 전체 배치를 하나의 트랜잭션으로 묶지 않는다.
5. 멱등성 & 재처리 설계
Item 자연키
merchantId + settlementPeriod + sourceDocId
- 유니크 인덱스로 중복 생성 방지
- 동일 Item은 재처리 시 결과 덮어쓰기 or 유지
재처리 정책
- 시스템 오류 → 재시도 가능
- 데이터 오류 → 수동 보정 후 재실행
6. 장애 전파 차단
- 계산 단계와 지급 단계 분리
- 외부 시스템 장애 시:
- Item 상태만 FAILED
- JobRun은 계속 진행
👉 전체 배치 실패 없음
7. 워커 구조
- Item을 상태 기준으로 조회
- PENDING → PROCESSING → SUCCESS / FAILED
재시도는 상태 기반으로 제어
8. 이 설계로 증명하는 것
- 배치 트랜잭션 분해 능력
- 멱등/재처리 설계
- 장애 격리
- 정합성 vs 가용성 판단
LIST
'Architecture' 카테고리의 다른 글
| 고객 행동 분석에서 시작하는 이커머스 아키텍처 설계 (0) | 2026.02.13 |
|---|---|
| 동시성 모델 (Virtual Thread vs Executor) (0) | 2026.02.12 |
| Approval(상위 결재) 시스템 설계 — 상태머신·트랜잭션·멱등성 중심 (0) | 2026.02.11 |
| 정답 없는 환경에서 망하지 않는 시스템을 설계하는 법 (0) | 2026.02.10 |
| MSA와 MSA 아키텍처 (0) | 2026.02.10 |
