Spring Batch?
Spring Batch 탄생 배경
- Java 기반 표준 배치 기술이 부재함
-> 배치 처리에서 요구하는 재사용 가능한 Java 기반 배치 아키텍처 표준의 필요성이 대두됨
- Spring Batch는 SpringSource(현 Pivotal)와 Accenture의 합작품
Batch 핵심 패턴
- Read: 데이터베이스, 파일, 큐에서 다량의 데이터를 조회한다.
- Process: 특정 방법으로 데이터를 가공한다.
- Write: 데이터를 수정된 양식으로 다시 저장한다.
Example
- 배치 프로세스를 주기적으로 커밋
- 동시 다발적인 Job의 배치 처리, 대용량 병렬 처리
- 실패 후 수동 또는 스케줄링에 의한 재시작
- 의존관계가 있는 step 여러 개를 순차적으로 처리
- 조건적 flow 구성을 통한 체계적이고 유연한 배치 모델 구성
- 반복, 재시도, skip 처리
Spring Batch 아키텍처
Application
- 스프링 배치 프레임워크를 통해 개발자가 만든 모든 배치 Job과 커스텀 코드를 포함
- 개발자는 업무 로직의 구현에만 집중하고 공통적인 기반 기술은 프레임워크가 담당하게 한다.
Batch Core
- Job을 실행, 모니터링, 관리하는 API로 구성되어 있다.
- JobLauncher, Job, Step, Flow 등이 속한다.
Batch Infrastructure
- Application, Core 모두 공통 Infrastructure 위에서 빌드한다.
- Job 실행의 흐름과 처리를 위한 틀을 제공
- Reader, Processor, Writer, Skip, Retry 등이 속한다.
Spring Batch 활성화
@EnableBatchProcessing
스프링 배치가 작동하기 위해 선언해야 하는 애노테이션이다.
총 4개의 설정 클래스를 실행시키며 스프링 배치의 모든 초기화 및 실행 구성이 이루어진다. Spring Boot 기반 배치의 자동 설정 클래스가 실행됨으로 Bean으로 등록된 모든 Job을 검색해서 초기화와 동시에 Job을 수행하도록 구성되어 있다.
@SpringBootApplication
@EnableBatchProcessing
public class SpringBatchApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBatchApplication.class, args);
}
}
스프링 배치 초기화 설정 클래스
SimpleBatchConfiguration
JobBuilderFactory
와 StepBuilderFactory
생성
- 스프링 배치의 주요 구성 요소를 생성한다. -> 프록시 객체로 생성됨
BasicBatchConfigurer
SimpleBatchConfiguration
에서 생성한 프록시 객체의 실제 대상 객체를 생성하는 설정 클래스
- 빈으로 의존성 주입을 받아 주요 객체들을 참조하여 사용할 수 있다.
JpaBatchConfigurer
- 사용자 정의
BatchConfigurer
인터페이스를 구현하여 사용할 수 있다.
BatchAutoConfiguration
- 스프링 배치가 초기화 될 때 자동으로 실행되는 설정 클래스
- Job을 수행하는
JobLauncherApplicationRunner
빈을 생성
References