Spring/Spring Batch
[Spring Batch] Chunk 아키텍처
[Spring Batch] Chunk 아키텍처
2024.08.24단일 Task 기반 처리로도 배치 작업을 수행할 수 있지만, Chunk 단위로 묶어서 배치 작업을 처리하면 여러 측면에서 이점을 얻을 수 있다. ItemReader가 설정된 Chunk 사이즈만큼 데이터를 읽고, ItemProcessor가 처리 작업을 수행한 후 ItemWriter가 기록하는 구조이다.ItemReader는 한 번에 하나의 아이템을 읽고 읽은 아이템은 Chunk의 일부로 저장된다.지정된 사이즈에 도달하면 ItemProcessor를 통해 비즈니스 로직을 적용하고, ItemWriter에게 넘겨 한 번에 기록한다. 트랜잭션은 Chunk 단위로 묶어서 처리돼 실패한 Chunk 단위로 재시도 로직을 적용할 수 있다. @Bean @JobScope public Step ste..
[Spring Batch] Flow 아키텍처
[Spring Batch] Flow 아키텍처
2024.07.21FlowJob은 FlowJobBuilder가 생성하고, Step을 특정 상태에 따라 흐름을 전환하도록 구성할 때 사용한다. (Step이 실패하더라도 Job은 성공하도록 설정하거나, Step이 성공한 후 다음 Step을 구분해서 실행하는 경우) 기존 SimpleJob은 순차적으로 Step을 수행했다면 FlowJob은 동적으로 Step을 제어한다. @Bean public Job job() { return new JobBuilder("job", jobRepository) .start(step1()) .on("COMPLETED").to(step3()) .from(step1()) .on("FAILED").t..
[Spring Batch] Job / Step 아키텍처
[Spring Batch] Job / Step 아키텍처
2024.07.07스프링배치 5 버전부터는 JobBuilderFactory와 StepBuilderFactory등 Factory 클래스가 Deprecate 됐고 Builder를 직접 사용하는 방식으로 변경됐다. JobRepository와 TransactionManager를 Builder에 직접 주입받아 설정을 좀 더 편하게 할 수 있다. JobBuilder는 실제 Job의 생성을 위임한다. // JobBuilderpublic class JobBuilder extends JobBuilderHelper { @Deprecated(since = "5.0", forRemoval = true) public JobBuilder(String name) { super(name); } public JobBuilder(String nam..
[Spring Batch] 배치 도메인 이해
[Spring Batch] 배치 도메인 이해
2024.06.30@SpringBootApplication@EnableBatchProcessing(dataSourceRef = "batchDataSource", transactionManagerRef = "batchTransactionManager")public class SpringBatchMasterApplication { public static void main(String[] args) { SpringApplication.run(SpringBatchMasterApplication.class, args); }} 스프링 배치 애플리케이션을 활성화하려면 @EnableBatchProcessing 애너테이션을 메인 클래스 위에 붙여줘야 한다. 애너테이션은 4개의 설정 클래스를 실행시켜 스프링 배치 초기 설정과 초기화를..
[Spring Batch] ItemReader / ItemWriter
[Spring Batch] ItemReader / ItemWriter
2024.02.27Step에서 데이터를 읽어오는 역할을 담당하는 ItemReader를 구현할 때는 개발자가 직접 ItemReader 인터페이스를 구현해 read 메서드를 구현한 후 Step에 추가할 수도 있고, 스프링 배치가 기본적으로 제공하는 ItemReader를 사용할 수도 있다. @Bean @StepScope public FlatFileItemReader flatFileItemReader( @Value("#{jobParameters['inputFile']}") FileSystemResource fileSystemResource ) { FlatFileItemReader flatFileItemReader = new FlatFileItemReader(); // flatFileItemReader.setResource(new..
[Spring Batch] 스프링 배치 내부 흐름
[Spring Batch] 스프링 배치 내부 흐름
2024.02.25스프링 배치는 대용량 데이터를 효율적으로 처리하기 위해 설계된 프레임워크이다. 1. Chunk 단위로 나눠서 작업 데이터를 일정량의 Chunk 단위로 묶어서 처리한다. 각 Chunk는 여러 Item으로 구성되고 배치 작업은 Item을 하나씩 읽고 처리한 후 모든 Item이 처리되면 결과를 갱신한다. 대량의 데이터를 한 번에 처리할 때 발생할 수 있는 메모리 부하를 줄이고 로직 수행 중 오류가 발생한 경우 유연하게 복구할 수 있다. 2. 예외처리 스프링 배치는 Job을 여러 Step으로 구성하는 방식으로 사용한다. Step은 독립적인 작업 단위로, 특정 Step에서 예외가 발생했을 때 그 Step에 대해서만 예외를 처리할 수 있어 유연하다. 3. 트랜잭션 각 Chunk 처리 과정에서 트랜잭션을 시작하고 처..