Spring Boot Batch란
Spring Boot Batch는 Spring Batch라는 프레임워크를 간편하게 통합할 수 있게 해주는 모듈이다. Spring Batch는 대량의 데이터 처리를 주기적으로 실행하기 위해 설계된 경량화된 배치 프레임워크다. 이 프레임워크는 로깅/추적, 트랜잭션 관리, 작업 처리 통계, 작업 재시작, 스킵 및 리소스 관리 등을 포함한 많은 고급 서비스를 제공한다.
Spring Boot Batch 기본 개념
Spring Batch는 크게 Job, Step, ItemReader, ItemProcessor, ItemWriter 등의 주요 구성 요소로 이루어져 있다.
- Job: 배치 작업의 논리적인 단위로, 여러 개의 Step으로 구성된다. 하나의 배치 Job은 하나 이상의 Step으로 이루어져 있으며, 각 Step은 특정 작업을 수행
- Step: Job을 구성하는 하나의 작업 단위로, ItemReader, ItemProcessor, ItemWriter로 구성된다. 각 Step은 독립적으로 실행되며, 특정한 순서로 실행
- ItemReader: 데이터를 읽어오는 역할을 한다. 예를 들어, 데이터베이스, 파일, 큐 등에서 데이터를 읽어온다.
- ItemProcessor: 읽어온 데이터를 처리하는 역할을 한다. 예를 들어, 데이터 변환, 필터링 등을 수행한다.
- ItemWriter: 처리된 데이터를 저장하는 역할을 한다. 예를 들어, 데이터베이스, 파일, 큐 등에 데이터를 저장한다.
Spring Boot Batch 작업 유형
1. 단일 단계 배치 작업 (Single Step Batch Job)
하나의 Step으로 구성된 단순한 배치 작업. 간단한 데이터 처리 로직을 필요로 할 때 유용하다.
@Bean
public Job singleStepJob(JobBuilderFactory jobBuilderFactory, StepBuilderFactory stepBuilderFactory, ItemReader<String> reader, ItemProcessor<String, String> processor, ItemWriter<String> writer) {
Step step = stepBuilderFactory.get("singleStep")
.<String, String>chunk(10)
.reader(reader)
.processor(processor)
.writer(writer)
.build();
return jobBuilderFactory.get("singleStepJob")
.incrementer(new RunIdIncrementer())
.start(step)
.build();
}
2. 멀티 단계 배치 작업 (Multi-Step Batch Job)
여러개의 Step으로 구성된 배치 작업. 각 Step은 독립적으로 실행되며, 특정 순서에 따라 실행된다.
복잡한 데이터 처리 로직을 구현할 때 유용하다.
@Bean
public Job multiStepJob(JobBuilderFactory jobBuilderFactory, StepBuilderFactory stepBuilderFactory, Step step1, Step step2) {
return jobBuilderFactory.get("multiStepJob")
.incrementer(new RunIdIncrementer())
.start(step1)
.next(step2)
.build();
}
@Bean
public Step step1(StepBuilderFactory stepBuilderFactory, ItemReader<String> reader, ItemProcessor<String, String> processor, ItemWriter<String> writer) {
return stepBuilderFactory.get("step1")
.<String, String>chunk(10)
.reader(reader)
.processor(processor)
.writer(writer)
.build();
}
@Bean
public Step step2(StepBuilderFactory stepBuilderFactory, ItemReader<String> reader, ItemProcessor<String, String> processor, ItemWriter<String> writer) {
return stepBuilderFactory.get("step2")
.<String, String>chunk(10)
.reader(reader)
.processor(processor)
.writer(writer)
.build();
}
3. Tasklet 기반 배치 작업 (Tasklet Based Batch Job)
asklet 기반 배치 작업은 배치 작업의 단계를 Tasklet이라는 단일 작업 단위로 정의. Tasklet은 단순한 인터페이스로, 단일 작업을 실행하고 종료 상태를 반환한다. 주로 단일 작업 또는 간단한 반복 작업에 사용된다.
@Bean
public Job taskletJob(JobBuilderFactory jobBuilderFactory, StepBuilderFactory stepBuilderFactory) {
Step step = stepBuilderFactory.get("taskletStep")
.tasklet(new MyTasklet())
.build();
return jobBuilderFactory.get("taskletJob")
.incrementer(new RunIdIncrementer())
.start(step)
.build();
}
public class MyTasklet implements Tasklet {
@Override
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
System.out.println("Tasklet executed");
return RepeatStatus.FINISHED;
}
}
4. 청크 기반 배치 작업 (Chunk Oriented Batch Job)
대규모 데이터 처리에 적합. 한 번에 작은 덩어리(청크)로 데이터를 읽고 처리하며, 각각의 청크가 성공적으로 처리되면 커밋된다.
@Bean
public Job chunkOrientedJob(JobBuilderFactory jobBuilderFactory, StepBuilderFactory stepBuilderFactory, ItemReader<String> reader, ItemProcessor<String, String> processor, ItemWriter<String> writer) {
Step step = stepBuilderFactory.get("chunkStep")
.<String, String>chunk(10)
.reader(reader)
.processor(processor)
.writer(writer)
.build();
return jobBuilderFactory.get("chunkOrientedJob")
.incrementer(new RunIdIncrementer())
.start(step)
.build();
}
'Spring Boot' 카테고리의 다른 글
[Spring Boot] 암호화/복호화(AES, RSA, BCrypt) (2) | 2024.07.24 |
---|---|
[Spring Boot] 어노테이션(Annotation) (0) | 2024.07.24 |
[Spring Boot] 필터(Filter) (2) | 2024.07.24 |
[Spring Boot] 트랜잭션(Transaction) (0) | 2024.07.19 |
[Spring Boot] Controller, Service, Mapper, DTO (0) | 2024.07.18 |