HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
✍🏻
Learnary (learn - diary)
/Batch/
SpringBatch Multi-threaded Step - 한개의 Step을 Multi Thread 로 처리하기

SpringBatch Multi-threaded Step - 한개의 Step을 Multi Thread 로 처리하기

 
단순한 배치의 실행 흐름멀티스레드 Step 매커니즘Refer
 

단순한 배치의 실행 흐름

  • 일반적으로 배치는 싱글 스레드 기반으로 아래와 같이 하나씩 처리됩니다.
 
notion image
 
Job → Step → Item (reader → process → writer) * loop
Spring Batch 내부 구현체의 흐름
 

멀티스레드 Step 매커니즘

기존 싱글 스레드 기반 처리 방식에서 여러개의 쓰레드가 Chunk 단위로 일을 하게 되면서 빠른 처리속도를 기대할 수 있다고 생각하였습니다.
 
The result of the preceding configuration is that the Step executes by reading, processing, and writing each chunk of items (each commit interval) in a separate thread of execution.
 
보통 기존에 일처리가 1명에서 단순히 여러명이 하는 것으로 이해할 수 있었습니다.
 
notion image
 
맨 처음 이런 도식화로 표현하면서, 단번에 이해하기는 쉽지 않았습니다.
notion image
 
멀티스레드 스텝은 청크 단위로 멀티 쓰레드로 처리하게 됩니다.
 
청크는 커밋 인터벌인데 , 이 선언한 청크 단위와 페이지에서 가져오는 데이터 개수 pageSize가 같다면 하나의 청크 단위입니다.
청크와 페이지 사이즈 개념에 대해서도 이에 따른 javaDoc에서도 가이드가 되어있습니다.
SpringBatch JdbcPagingItemReader 를 사용하면서 chunk 크기와 page 크기는 어떻게 설정하면 좋을까?
 
즉, 청크 개념과 페이지 크기와 일치한다면 이것이 곧 청크 단위라고 이해하였습니다.
 
notion image
보통 Reader에서 데이터를 애플리케이션 메모리로 끌어오는 것은 제한이 있으며, 처리에도 부담이 있어 보통 paging 하여 데이터를 처리해나갑니다. 하지만 기존 사용하던 아이템 컴포넌트들을 반드시 확인해야합니다.
SpringBatch 멀티쓰레드 환경에서의 Reader, Writer 선별 주의사항
 
멀티쓰레드로 병렬로 처리할 수 있어 기존보다 엄청 빠르게 개선될 수 있을 것 같다고 생각하였습니다.
처리순서
thread1
thread2
thread3
thread4
1
PageReader - 1page
PageReader - 2page
PageReader - 3page
PageReader - 4page
2
processor
processor
processor
processor
3
wirter
wirter
wirter
wirter
 
그 결과 거의 한 80% 이상 빨라질줄 알았지만, 그래도 20-30정도는 개선할 수 있었습니다.
폭발적인 성능향상을 기대할 수 없는 이유는 바로 Reader에서의 동기화 때문입니다.
 
처리순서
thread1
ㅤ
thread2
ㅤ
thread3
ㅤ
thread4
1
PageReader - 1page
←sychronized →
PageReader - 2page
←sychronized →
PageReader - 3page
←sychronized →
PageReader - 4page
2
processor
ㅤ
processor
ㅤ
processor
ㅤ
processor
3
wirter
ㅤ
wirter
ㅤ
wirter
ㅤ
wirter
위 레드존을 제외하고는 나머지 컴포넌트는 동시에 처리가 가능합니다.
즉 변환, 쓰기 작업이 다소 무거운 작업이 있다면 이전 싱글스레드에 비해 임팩트있는 성능향상을 기대할 수 있습니다.
하지만 저에게는 비교적 변환,쓰기가 일반적이여서 큰 성능향상을 기대할 수는 없었습니다.
 
만약 processor, writer작업도 무거운 경우라면 큰 성능효과를 기대할 수 있을거라고 생각합니다.
 

Refer


Overview :: Spring Batch
Overview :: Spring Batch

Overview :: Spring Batch

Spring Batch architecture, general batch principles, batch processing strategies.

TISTORYTISTORYSpring Batch에서 Multithread로 Step 실행하기
Spring Batch에서 Multithread로 Step 실행하기

Spring Batch에서 Multithread로 Step 실행하기

일반적으로 Spring Batch는 단일 쓰레드에서 실행됩니다. 즉, 모든 것이 순차적으로 실행되는 것을 의미하는데요. Spring Batch에서는 이를 병렬로 실행할 수 있는 방법을 여러가지 지원합니다. 이번 시간에는 그 중 하나인 멀티스레드로 Step을 실행하는 방법에 대해서 알아보겠습니다. 1. 소개 Spring Batch의 멀티쓰레드 Step은 Spring의 TaskExecutor를 이용하여 각 쓰레드가 Chunk 단위로 실행되게 하는 방식입니다. Spring Batch Chunk에 대한 내용은 이전 포스팅에 소개되어있습니다. 여기서 어떤 TaskExecutor 를 선택하냐에 따라 모든 Chunk 단위별로 쓰레드가 계속 새로 생성될 수도 있으며 (SimpleAsyncTaskExecutor) 혹은 ..

TISTORYTISTORY