출처
- 해당 포스트는 정수원 강사님의 스프링 배치 - 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
ChunkOrientedTasklet
ChunkOrientedTasklet은 Tasklet 인터페이스를 구현체로 Chunk 지향 처리를 담당하는 도메인 객체
ChunkOrientedTasklet은 이 execute() 메서드 내에서 ItemReader, ItemProcessor 및 ItemWriter를 사용하여 Chunk 지향 처리를 수행합니다.
TaskletStep 에 의해 반복적으로 실행되며 ChunkOrientedTasklet 이 실행될 때마다 매번 새로운 Transaction 이 생성되어 처리가 이뤄집니다. 예외가 발생할 경우 해당 Chunk 는 Rollback 되며 이전에 Commit 한 Chunk 는 완료된 상태가 유지됩니다.
내부적으로 ItemReader 를 핸들링하는 ChunkProvider 와 ItemProcessor, ItemWriter 를 핸들링하는 ChunkProcessor 타입의 구현체를 갖습니다.
ChunkOrientedTasklet 흐름
TaskletStep 이 ChunkOrientedTasklet 객체의 execute 메소드를 호출하면 ChunkProvider 객체를 호출하게 됩니다. ChunkProvider 는 ItemReader 객체를 이용해 Item 들을 설정된 Chunk 사이즈만큼 반복해서 읽어온 후 ChunkOrientedTasklet 객체로 반환합니다.
ChunkOrientedTasklet 객체는 ChunkProcessor 객체를 호출해 읽어온 Item 들을 처리합니다. ChunkProcessor 객체는 ItemProcessor 객체를 이용해 전달받은 Item 객체에 데이터 처리를 진행하고 ItemWriter 에 처리 결과를 전달합니다. ItemWriter 는 전달 받은 Item 들을 출력하거나 저장한 후 다시 ChunkProcessor 객체를 통해 Item 을 읽어오는 작업을 하게 된다.
ChunkOrientedTasklet 은 이러한 반복적인 작업은 읽을 Item 이 없을때까지 Chunk 단위로 반복합니다.
ChunkOrientedTasklet 소스코드
... 생략 |
ChunkOrientedTasklet 장점
ChunkOrientedTasklet은 Chunk 지향 처리에서 처리할 수 있는 모든 항목을 읽고 처리하고 나서야 다음 스텝으로 진행합니다. 따라서 ChunkOrientedTasklet은 대용량 데이터 세트를 처리하는 데 매우 유용합니다. 메모리 부족 문제를 방지하기 위해 ChunkOrientedTasklet은 항목을 조각 단위로 처리하며, 처리할 각 조각의 크기는 설정할 수 있습니다.
Spring Batch에서 ChunkOrientedTasklet은 스텝 처리를 수행하는 방법 중 하나이며, 일괄 처리 작업을 조각 단위로 처리할 수 있도록 해줍니다. 이를 통해 대용량 데이터 세트를 처리할 때 메모리 부족 문제를 방지하고 처리 속도를 향상시킬 수 있습니다.