개발놀이터

멀티 스레드 환경에서의 스프링 배치 (개요) 본문

Spring/Spring Batch

멀티 스레드 환경에서의 스프링 배치 (개요)

마늘냄새폴폴 2022. 10. 12. 16:26

본 포스팅은 인프런의 정수원님의 스프링 배치 강의를 듣고 정리한 포스팅입니다. 더 자세한 내용은 강의를 참고해주세요. 

 

 

기본 개념

단일 스레드 vs 멀티 스레드

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

               

 

스프링 배치 스레드 모델

  • 스프링 배치는 기본적으로 단일 스레드 방식으로 작업을 처리한다.
  • 성능 향상과 대규모 데이터 작업을 위한 비동기 처리 및  Scale out 기능을 제공한다. 
  • Local 과 Remote 처리를 지원한다. 

1. AsyncItemProcessor / AsyncItemWriter

  • ItemProcessor 에게 별도의 스레드가 할당되어 작업을 처리하는 방식

2. Multi-threaded Step

  • Step 내 Chunk 구조인 ItemReader, ItemProcessor, ItemWriter 마다 여러 스레드가 할당되어 실행하는 방법

3. Remote Chunking

  • 분산환경처럼 Step 처리가 여러 프로세스로 분할되어 외부의 다른 서버로 전송되어 처리하는 방식

4. Parallel Steps

  • Step 마다 스레드가 할당되어 여러개의 Step을 병렬로 실행하는 방법

5. Partitioning

  • Master/Slave 방식으로 Master가 데이터를 파티셔닝 한 다음 각 파티션에게 스레드를 할당하여 Slave가 독립적으로 작동하는 방식