문제 상황
- WEEKLY, MONTHLY 정산 시, 날짜 범위에 걸친 데이터를 videoId 별로 누적 합산해야 함
- chunk 단위로 처리된 데이터가 매번 writer 에서 DB에 바로 저장되면, 이미 저장된 데이터를 다시 조회해 합산해야 해서 비효율적
접근
- chunk마다 저장하는게 아닌 누적 후 한번에 처리하는 방법이 필요
해결 방법
- Writer에서 저장 로직 제거
- Map<videoId, SettlementResult>로 누적 구조 구현
- 메모리 내에서 videoId 기준으로 누적합 관리
- AfterStep에서 일괄 saveAll() 처리
- Job 종료 시점에 한 번만 DB에 저장 → I/O 최소화
결과 및 회고
- 동일한 processor, writer 구조 재 사용
- DB저장 횟수를 줄여 성능 향상
Spring Batch에서 상태 공유를 적절히 사용하면 유연한 흐름 제어를 할 수 있다.