• 핵심

    • 배치는 처리량과 지연을 트레이드 오프한 것

      1. Chunk 크기가 중요!

        → 결국 Chunk 단위로 실행되기 때문

        • 너무 작게 잡으면?

          → 오버헤드 손실만 증가

        • 너무 크게 잡으면?

          → 트랜잭션이 길어져서, 락 오래 점유

      2. 동시성 고려 필요!

        • 같은 Chunk라면, read/processor/write가 같은 트랜잭션

          → 하지만 메모리 read 전의 SQL로 조회하는 작업은 트랜잭션에 속하지 X

        • so, 쓰기 시점의 데이터가 읽기 시점의 데이터와 같다고 보장할 수 없음

      3. 멱등성 보장 필요!

        • 실패 시, Chunk 단위로 롤백 및 재시도 발생
          • at-least-once로 보고, 중복 흡수 필요!

          • 추가로 Spring Batch는 재시도 시, 버퍼된 아이템을 사용

            → so, 반드시 스킵 후 재처리 필요!

    • 흐름

      image.png

  • Batch Processing

  • 그러니까 왜 필요해?

  • 용어 정리

  • Spring Batch