Spring Batch란?
대량의 데이터를 처리하는 작업을 의미하며 이를 자동화하여 시스템의 부하를 줄이고 효율적인 데이터 처리를 가능하게 하는 프레임워크를 의미합니다.
💡 배치 프로그램(Batch Program)이란?
대량의 데이터를 처리하는 작업을 자동화하는 프로그램을 의미합니다.
- 이러한 작업들은 보통
스케줄러를 이용하여 특정시간에 수행하도록 구성합니다.
- 예를 들어 매일 밤 12시에 일괄적으로 데이터를 업데이트하는 작업이 배치 프로그램의 예시입니다.
스케줄러(Scheduler)
- 일정한 시간 간격으로 바녹적으로 수행되거나 특정 시간에 수행되도록 예약해 놓은 작업을 자동으로 실행해주는 시스템입니다.
- 스케줄러를 이용하면 주기적으로 반복되는 일일 업무나 특정 시간에 실행해야 하는 작업등을 자동으로 처리할 수 있습니다.
배치 프로그램과 스케줄러 차이
- 비슷한 기능을 가지고 있지만 동일한 것은 아닙니다. 실행방법과 목적에 큰 차이가 있습니다.
- 배치 프로그램은 일괄 처리를 위한 프로그램이며 ‘정해진 시간에 실행되지 않고 사용자의 명령이 있을 때 실행’합니다.
- 스케줄러는 ‘정해진 시간에 자동으로 실행’되는 프로그램이며 ‘주기적으로 실행되는 작업’을 설정할 수 있습니다.
배치 작업이 필요한 예시
- 이메일 쿠폰 발송
- 가맹점 정산
- 거래 명세서 생성
- 추천 시스템 데이터 작업
스프링 배치로 작업이 필요한 이유
- 풍부한 기능
- 일관성된 코드
- 기존 서비스가 스프링 프레임워크로 되어 있는 경우 호환 가능
배치 핵심 패턴
- Read : 데이터베이스, 파일, 큐에서 다량의 데이터 조회한다.
- Process : 특정 방법으로 데이터를 가공한다.
- Write : 데이터를 수정된 양식으로 다시 저장한다.
배치 시나리오
- 배치 프로세스를 주기적으로 커밋
- 동시 다발적인 Job의 배치 처리, 대용량 병렬(멀티 스레드) 처리
- 실패 후 수동 또는 스케줄링에 의한 재시작
- 의존관계가 있는 step 여러 개를 순차적으로 처리
- 조건적 Flow 구성을 통한 체계적이고 유연한 배치 모델 구성
- 반복, 재시도, Skip 처리
시작
@SpringBootApplication
@EnableBatchProcessing
public class Batch1Application {
public static void main(String[] args) {
SpringApplication.run(Batch1Application.class, args);
}
}
- 총 4개의 설정 클래스를 실횅시키며 스프링 배치의 모든 초기화 및 실행 구성이 이루어 진다.
- 스프링 부트 배치의 자동 설정 클래스가 실행됨으로 빈으로 등록된 모든
Job을 검색해서 초기화와 동시에 Job을 수행하도록 구성됨
- BatchAutoConfiguration
- 스프링 배치가 초기화 될 때 자동으로 실행되는 설정 클래스
- Job을 수행하는 JobLanucherApplicationRunner 빈을 생성
- SimpleBatchConfiguration
- JobBuilderFactory와 StepBuilderFatory 생성
- 스프링 배치의 주요 구성 요소 생성 - 프록시 객체로 생성됨