Spring Batch ‐ 스프링 배치 멀티 쓰레드 프로세싱 - dnwls16071/Backend_Summary GitHub Wiki
- 프로세스 내 특정 작업을 처리하는 쓰레드가 하나일 경우 단일 쓰레드, 여러 개일 경우 멀티 쓰레드로 정의한다.
- 작업 처리에 있어서 단일 쓰레드와 멀티 쓰레드 선택 기준은 어떤 방식이 자원을 효율적으로 사용하고 성능 처리에 유리한가라는 점이다.
- 일반적으로 복잡한 처리나 대용량 데이터를 다루는 작업일 경우 전체 소요 시간 및 성능상 이점을 위해 멀티 쓰레드 방식을 선택한다.
- 멀티 쓰레드 처리 방식은 데이터 동기화 이슈가 존재하기 때문에 최대한 고려해서 결정해야 한다.
📚 AsyncItemProcessor / AsyncItemWriter
- Step 안에서 ItemProcessor기 비동기적으로 동작하는 구조
- AsyncItemProcessor와 AsyncItemWriter가 함께 구성되어야 함
- AsyncItemProceesor와 AsyncItemWriter가 받는 최종 결과값은 List<Future> 타입이며 비동기 실행이 완료될 때까지 대기한다.
- spring-batch-integration 의존성이 필요하다.
- Step 내에서 멀티 쓰레드로 Chunk 기반으로 처리가 이루어지는 구조
- TaskExecutorRepeatTemplate가 반복자로 사용되며 설정한 개수만큼의 쓰레드를 생성하여 수행한다.
- SplitState를 사용해서 여러 개의 Flow들을 병렬적으로 실행하는 구조
- 실행이 완료된 후에 FlowExecutionStatus 결과들을 취합해서 다음 단계 결정을 내린다.
- MasterStep이 SlaveStep을 실행시키는 구조
- SlaveStep은 각 쓰레드에 의해 독립적으로 실행되는 구조
- SlaveStep은 독립적인 StepExecution 파라미터 환경을 구성해야 한다.
- SlaveStep은 ItemReader / ItemProcessor / ItemWriter 등을 가지고 동작하며 작업을 독립적으로 병렬 처리한다.
- MasterStep은 PartitionStep이며 SlaveStep은 TaskletStep, FlowStep 등이 올 수 있다.
📚 SynchroizedItemStreamReader
- Thread-Safe하지 않은 ItemReader를 Thread-Safe하도록 처리하는 역할을 한다.
- Spring Batch 4.0부터 지원한다.
⚠️ **GitHub.com Fallback** ⚠️