Skip과 Retry 로직 구현
7. 정리
- 실패는 일시적(재시도) / 영구적(스킵) / 치명적(중단) 세 가지이고, 분류는 예외 타입 화이트리스트로 표현한다. 이 분류가 배치 신뢰성의 절반이다.
- 재시도는 횟수 제한 + 지수 백오프 + 지터(thundering herd 방지). 재시도하는 호출은 반드시 멱등해야 한다(타임아웃 = 응답 유실일 수 있음).
- 스킵은 화이트리스트 + skipLimit(한도 초과 시 FAILED) + 데드 레터(식별자·사유·원본). 기록 없는 스킵은 데이터 유실이다.
- 청크 안에서 건별로 재시도 → 소진/영구 오류는 스킵 → 스킵 불가는 중단. 성공 건만 모아 커밋한다.
총 = 성공 + 스킵이 맞아야 한다. - 외부 시스템이 죽어 있으면 서킷 브레이커로 두드리기를 멈추고 체크포인트를 남긴 채 FAILED 로 중단하는 것이 옳다. 최종 리포트(총/성공/스킵/재시도/소진/시간)를 매일 비교한다.
이것으로 배치 시리즈 다섯 레슨이 끝났습니다. 01 의 Reader-Processor-Writer 골격, 02 의 스트리밍 파일 I/O, 03 의 청크와 메모리, 04 의 청크 커밋·체크포인트·멱등성, 05 의 재시도·스킵·데드 레터를 합치면 Spring Batch 가 제공하는 핵심 기능의 원리를 모두 직접 구현한 셈입니다.
이제 Spring Batch 문서를 열면 chunk(100).faultTolerant().retry(TransientException.class).retryLimit(3).skip(ParseException.class).skipLimit(1000) 한 줄이 무엇을 하는지, 그리고 그 뒤에서 무엇이 일어나는지 설명할 수 있을 것입니다.