출처
- 해당 포스트는 정수원 강사님의 스프링 배치 - Spring Boot 기반으로 개발하는 Spring Batch 강의를 바탕으로 작성 됐습니다.
목차
- Spring Batch - ItemWriter
- Spring Batch - ItemProcessor
- Spring Batch - ItemReader
- Spring Batch - ChunkProvider 와 ChunkProcessor
- Spring Batch - ChunkOrientedTasklet
- Spring Batch - Chunk 기반 Step
- Spring Batch - 24. FlowJob
- Post not found: spring/spring-batch/tasklet/spring-batch-23-JobStep
- Spring Batch - 22. Tasklet 기반 Step
- Spring Batch - 21. TaskletStep
- Spring Batch - 20. StepBuilderFactory 와 StepBuilder
- Spring Batch - 19. JobParameters 증가 JobParametersIncrementer
- Spring Batch - 18. Job 의 재시작 방지 preventRestart
- Spring Batch - 17. JobParameters 검증 JobParametersValidator
- Spring Batch - 16. SimpleJob 와 SimpleJobLauncher
- Spring Batch - 15. JobBuilderFactory & JobBuilder
ChunkProvider
ChunkProvider는 ItemReader에서 읽어온 데이터를 Chunk 단위로 분할하여 ItemProcessor 및 ItemWriter에 전달하는 객체
ChunkProvider는 스텝을 실행할 때 Chunk<I> 객체를 만들고 Chunk의 크기를 지정합니다. 예를 들어, Chunk의 크기를 10으로 설정하면, ItemReader에서 10개의 데이터를 읽어와서 ItemProcessor 와 ItemWriter에 전달합니다. 이러한 과정을 Chunk 단위로 반복하여 모든 데이터를 처리합니다.
ChunkProvider는 ItemReader에서 반환된 모든 데이터를 저장하지 않고, Chunk 단위로 처리하기 때문에 대용량 데이터를 처리하는 데 매우 효율적입니다. 이를 통해 메모리 사용량을 최소화하고, 처리 속도를 향상시킬 수 있습니다.
Spring Batch에서는 기본적으로 SimpleChunkProvider를 제공합니다. SimpleChunkProvider는 Chunk의 크기를 지정하고, ItemReader에서 읽어온 데이터를 Chunk 단위로 분할하여 ItemProcessor 및 ItemWriter에 전달합니다. 또한, SimpleChunkProvider는 실패 시 롤백을 수행할 수 있도록 구성할 수 있습니다.
ChunkProvider는 Chunk 기반 스텝의 핵심 역할을 수행하므로, ChunkProvider의 구현 방식은 대용량 데이터 처리 성능에 큰 영향을 미칩니다. 최적의 ChunkProvider 구현 방식을 선택하여 대용량 데이터 처리를 효율적으로 수행할 수 있습니다.
ChunkProvider 인터페이스
public interface ChunkProvider<T> { |
SimpleChunkProvider
|
ChunkProcessor
ChunkProcessor 는 Chunk 단위로 ItemProcessor 를 사용해 Item 을 변형, 가공, 필터링하고 ItemWriter 를 사용해 Chunk 데이터를 저장 및 출력한 후 스텝의 실행 결과를 반환하는 역할을 수행합니다.
Chunk<O> 객체를 만들고 ChunkProvider 로부터 전달 받은 Chunk<I> 의 Item 을 한 건씩 처리한 후에 Chunk<O> 에 저장합니다.
ChunkProcessor 는 ChunkProvider 에서 전달받은 Chunk 를 이용하여 ItemProcessor 와 ItemWriter 를 실행하고, 스텝의 실행 결과를 반환하는 역할을 수행합니다. ChunkProcessor 는 각 Chunk에서 ItemProcessor 를 이용하여 데이터를 처리하고, 처리 결과를 ItemWriter 를 통해 출력합니다. 처리 결과는 Chunk 단위로 모아서 스텝의 실행 결과를 결정합니다.
Spring Batch에서는 기본적으로 SimpleChunkProcessor 를 제공합니다. SimpleChunkProcessor 는 ChunkProvider 에서 Chunk 단위로 전달받은 데이터를 ItemProcessor 및 ItemWriter 에 전달하여 처리하고, 스텝의 실행 결과를 반환합니다. 또한, SimpleChunkProcessor 는 실패 시 롤백을 수행할 수 있도록 구성할 수 있습니다.
ItemWriter 처리가 완료되면 Chunk 트랜잭션이 종료되고 Step 반복문에서 ChunkOrientedTasklet 이 새롭게 실행됩니다. ItemWriter 는 Chunk 사이즈만큼 데이터를 Commit 하기 때문에 Chunk 사이즈는 곧 Commit Interval 이 됩니다.
ChunkProcessor는 대용량 데이터 처리 성능에 큰 영향을 미치므로, 최적의 ChunkProcessor 구현 방식을 선택하여 대용량 데이터 처리를 효율적으로 수행할 수 있습니다.
public interface ChunkProcessor<I> { |
SimpleChunkProcessor
|