스프링 배치는 대규모 데이터 처리를 위한 오픈 소스 프레임워크이다.
반복적이고 일관된 작업과 대용량의 데이터를 효율적으로 처리하고 관리할 수 있는 기능을 제공한다.
예를 들어, 대용량 엑셀 파일을 읽어와서 데이터를 가공하는 작업 등을 손쉽게 처리할 수 있다.
배치 처리의 기본 단위로, 한 번에 실행되는 작업 단위를 의미한다. Job 안에는 여러 개의 Step이 존재할 수 있으며, Job 안에서 어떤 Step이 실행되어야 하는지 정의한다.
Job을 구성하는 단위로, 특정 작업을 수행하는 논리적인 세부 단계로, Reader, Processor, Writer의 조합으로 이루어진다.
Step은 Chunk 방식과 Tasklet 방식 중 하나로 정의된다.
데이터를 일정량씩 묶어서 처리하는 방식이다.
각 청크는 하나의 트랜잭션 내에서 수행되며, 트랜잭션 단위마다 일정량의 데이터를 읽어와서 처리 후 쓰기를 수행한다.
대용량 데이터를 처리할 때 효과적이며, 실패 시 롤백이 가능하도록 트랜잭션을 사용한다.
한 번만 실행되거나 간단한 작업을 수행하기 위한 인터페이스이다.
이를 통해 배치 작업을 더 세밀하게 제어할 수 있다.
데이터를 읽어오는 역할을 담당한다.
읽어온 데이터를 가공하거나 필터링하는 역할을 담당한다.
가공된 데이터를 저장하거나 외부 시스템에 전달하는 역할을 담당한다.
배치 작업의 메타데이터를 저장하고 관리하는 곳으로, Job의 실행 상태, 실행 이력 등을 추적한다.
Job을 실행하는 역할을 수행한다. 외부에서 Job을 시작하고 실행한다.
대용량 데이터 처리에 최적화되어 있으며, 작업 단위를 독립적으로 실행할 수 있다.
트랜잭션 관리, 오류 처리, 재시도 등의 기능을 제공하여 안정적인 배치 처리를 보장한다.
배치 작업의 진행 상황을 모니터링하고 관리할 수 있는 기능을 제공한다.
스프링 프레임워크와의 통합을 통해 개발 및 유지보수가 용이하다.
스프링 배치를 사용하여 "Hello World"를 출력하는 예제이다.
@Slf4j
@Configuration
public class HelloJobConfig {
@Bean
public Job helloJob(JobRepository jobRepository, Step helloStep1) {
return new JobBuilder("helloJob", jobRepository)
.start(helloStep1) // helloStep1 스텝을 시작 스텝으로 설정
.build();
}
@Bean
public Step helloStep1(JobRepository jobRepository, Tasklet helloStep1Tasklet1, PlatformTransactionManager platformTransactionManager) {
return new StepBuilder("helloStep1Tasklet1", jobRepository)
.tasklet(helloStep1Tasklet1, platformTransactionManager)
.build();
}
@Bean
public Tasklet helloStep1Tasklet1() {
return ((contribution, chunkContext) -> {
log.info("Hello World");
System.out.println("Hello World");
return RepeatStatus.FINISHED;
});
}
}