Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Transaction Pattern
- 키클락
- Spring Boot Actuator
- Serial GC
- MSA
- thread
- 사가 패턴
- spring batch
- 멀티스레드
- Resilinece4j
- zipkin
- 타입스크립트
- saga pattern
- Action Pattern
- Java
- The law of Demeter
- 배치
- 디자인 패턴
- 디자인패턴
- 알고리즘
- 스레드
- Parallel Old GC
- 생산자 소비자 패턴
- JPA
- 체인 패턴
- TypeScript
- java 정렬
- Spring Cloud Netfilx Eureka
- spring cloud
- 스프링 배치
Archives
- Today
- Total
PSD( Private-Self-Development )
Spring Batch 란? 본문
Spring Batch 란?
Spring Batch는 트랜잭션 관리, 작업 처리 통계, 작업 재시작, 리소스 관리와 같이 대용량 레코드 처리에 필수적인 서버이다.
주로 Quartz, Scheduler, Jenkins 등의 스케줄러와 같이 사용하여 특정 시간에 동작 가능한 Job 을 구현한다.
배치 핵심 패턴
- Read : DB, 파일, 큐 에서 다량의 데이터 조회
- Process : 특정 방법으로 데이터 가공
- Write : 데이터를 다시 저장
배치 시나리오
- 배치 프로세스 주기적 커밋 전략 제공
- 동시 다발적인 Job(서로 독립적) 의 배치 처리, 대용량 병렬 처리
- 실패 후 수동 또는 스케줄링에 의한 재시작
- 의존관계가 있는 step 여러 개를 순차적으로 처리
- 조건적 Flow 구성을 통한 체계적이고 유연한 배치 모델 구성
- 반복, 재시도, Skip 처리
배치 아키텍처
- Application
- 스프링 배치 프레임워크를 통해 개발자가 구현한 모든 배치 job 과 커스텀 코드
- 개발자는 업무 로직의 구현에만 집중할 수 있고
기반 기술은 프레임웍이 담당한다.
- Batch Core
- job을 실행, 모니터링, 관리하는 API
- JobLauncher, Job, Step, Flow 등
- Batch Infrastructure
- Application, Core 모두 공통 Infrastructure 위에서 빌드한다.
- job 실행의 흐름과 처리를 위한 틀 제공
- Reader, Processor Writer, Skip, Retry 등
배치 시작
@EnableBatchProcessing
@SpringBootApplication
@EnableBatchProcessing
public class SpringBatchLectureApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBatchLectureApplication.class, args);
}
}
- 4개의 설정 클래스를 실행시킨다. 스프링 배치의 모든 초기화 및 실행 구성이 이루어진다.
- 스프링 부트 배치의 자동 설정 클래스가 실행, 빈으로 등록된 모든 Job 을 검색해서 초기화 및 Job 을 수행 가능하도록 한다.
4개의 설정 클래스
- BatchAutoConfiguration
- 스프링 배치가 초기화 할때, 자동 실행 되는 설정 클래스
- Job 을 수행하는 JobLauncherApplicationRunner 빈을 생성 ( JobLauncherApplicationRunner : ApplicationRunner 인터페이스를 구현한 구현체를 를 구동 => 해당 구현체가 Job 을 구동 )
- SimpleBatchConfiguration
- JobBuilderFactory 와 StepBuilderFactory 생성
- 스프링 배치의 주요 구성 요소 생성 - 프록시 객체로 생성한다
- BatchConfigurerConfiguration
- BasicBatchConfigurer
- SimpleBatchConfiguration 에서 생성한 프록시 객체의 실제 대상 객체를 생성하는 설정 클래스
- 빈으로 의존성 주입 받아서 주요 객체들을 참조해서 사용할 수 있다
- JpaBatchConfigurer
- JPA 관련 객체를 생성하는 설정 클래스
- BasicBatchConfigurer 상속
- BasicBatchConfigurer
2 -> 3 -> 1 순서로 초기화 진행
배치 Job 구현
@Configuration 선언
하나의 배치 Job 을 정의하고 빈 설정
Job 정의 구성 요소
- JobBuilderFactory : Job 을 생성하는 빌더 팩토리
- StepBuilderFactory : Step 을 생성하는 빌더 팩토리
- Job : 일
- Step : 일의 항목, 단계
- tasklet : 작업 내용
Job 구동 -> Step 을 실행 -> Taskelt 을 실행
@Configuration
@RequiredArgsConstructor
public class HelloJobConfiguration {
private final JobBuilderFactory jobBuilderFactory;
private final StepBuilderFactory stepBuilderFactory;
/**
* Job 정의
*/
@Bean
public Job helloJob(){
return jobBuilderFactory.get("helloJob")
.start(helloStep1())
.next(helloStep2())
.build();
}
/**
* Step1 정의
*/
@Bean
public Step helloStep2() {
return stepBuilderFactory.get("helloStep2")
.tasklet(new Tasklet() {
@Override
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
System.out.println("helloStep2");
return RepeatStatus.FINISHED;
}
})
.build();
}
/**
* Step2 정의
*/
@Bean
public Step helloStep1() {
return stepBuilderFactory.get("helloStep1")
.tasklet(new Tasklet() {
@Override
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
System.out.println("helloStep1");
return RepeatStatus.FINISHED;
}
})
.build();
}
}
참조 :
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B0%B0%EC%B9%98
'Backend > Spring Batch' 카테고리의 다른 글
Spring Batch 이벤트 리스너 (0) | 2023.04.24 |
---|---|
Spring Batch 멀티 스레드 프로세싱 (0) | 2023.04.19 |
Spring Batch 반복 및 오류 제어 (0) | 2023.04.17 |
JobBuilder 와 StepBuilder 그리고 배치 상태 종류 (0) | 2023.03.15 |
Spring Batch 도메인 이해 (0) | 2023.02.06 |