핵심
배치는 처리량과 지연을 트레이드 오프한 것
Chunk 크기가 중요!
→ 결국 Chunk 단위로 실행되기 때문
너무 작게 잡으면?
→ 오버헤드 손실만 증가
너무 크게 잡으면?
→ 트랜잭션이 길어져서, 락 오래 점유
동시성 고려 필요!
같은 Chunk라면, read/processor/write가 같은 트랜잭션
→ 하지만 메모리 read 전의 SQL로 조회하는 작업은 트랜잭션에 속하지 X
so, 쓰기 시점의 데이터가 읽기 시점의 데이터와 같다고 보장할 수 없음
멱등성 보장 필요!
at-least-once로 보고, 중복 흡수 필요!
추가로 Spring Batch는 재시도 시, 버퍼된 아이템을 사용
→ so, 반드시 스킵 후 재처리 필요!
흐름

Batch Processing
그러니까 왜 필요해?
용어 정리
Spring Batch