Spring Batch ‐ 스프링 배치 멀티 쓰레드 프로세싱 - dnwls16071/Backend_Summary GitHub Wiki

📚 단일 쓰레드와 멀티 쓰레드의 차이점

스크린샷 2025-08-10 오후 12 54 03
  • 프로세스 내 특정 작업을 처리하는 쓰레드가 하나일 경우 단일 쓰레드, 여러 개일 경우 멀티 쓰레드로 정의한다.
  • 작업 처리에 있어서 단일 쓰레드와 멀티 쓰레드 선택 기준은 어떤 방식이 자원을 효율적으로 사용하고 성능 처리에 유리한가라는 점이다.
  • 일반적으로 복잡한 처리나 대용량 데이터를 다루는 작업일 경우 전체 소요 시간 및 성능상 이점을 위해 멀티 쓰레드 방식을 선택한다.
  • 멀티 쓰레드 처리 방식은 데이터 동기화 이슈가 존재하기 때문에 최대한 고려해서 결정해야 한다.
스크린샷 2025-08-10 오후 12 52 36

📚 AsyncItemProcessor / AsyncItemWriter

  • Step 안에서 ItemProcessor기 비동기적으로 동작하는 구조
  • AsyncItemProcessor와 AsyncItemWriter가 함께 구성되어야 함
  • AsyncItemProceesor와 AsyncItemWriter가 받는 최종 결과값은 List<Future> 타입이며 비동기 실행이 완료될 때까지 대기한다.
  • spring-batch-integration 의존성이 필요하다.
스크린샷 2025-08-10 오후 1 08 33 스크린샷 2025-08-10 오후 1 09 41
  • Step 내에서 멀티 쓰레드로 Chunk 기반으로 처리가 이루어지는 구조
  • TaskExecutorRepeatTemplate가 반복자로 사용되며 설정한 개수만큼의 쓰레드를 생성하여 수행한다.
스크린샷 2025-08-10 오후 5 24 07 스크린샷 2025-08-10 오후 5 34 13

📚 Parallel Step

  • SplitState를 사용해서 여러 개의 Flow들을 병렬적으로 실행하는 구조
  • 실행이 완료된 후에 FlowExecutionStatus 결과들을 취합해서 다음 단계 결정을 내린다.
스크린샷 2025-08-10 오후 10 21 12 스크린샷 2025-08-10 오후 10 21 30

📚 Partitioning

  • MasterStep이 SlaveStep을 실행시키는 구조
  • SlaveStep은 각 쓰레드에 의해 독립적으로 실행되는 구조
  • SlaveStep은 독립적인 StepExecution 파라미터 환경을 구성해야 한다.
  • SlaveStep은 ItemReader / ItemProcessor / ItemWriter 등을 가지고 동작하며 작업을 독립적으로 병렬 처리한다.
  • MasterStep은 PartitionStep이며 SlaveStep은 TaskletStep, FlowStep 등이 올 수 있다.
스크린샷 2025-08-10 오후 11 03 33 스크린샷 2025-08-10 오후 11 03 57 스크린샷 2025-08-10 오후 11 04 12

📚 SynchroizedItemStreamReader

  • Thread-Safe하지 않은 ItemReader를 Thread-Safe하도록 처리하는 역할을 한다.
  • Spring Batch 4.0부터 지원한다.
스크린샷 2025-08-10 오후 11 56 13
⚠️ **GitHub.com Fallback** ⚠️