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
- Resilinece4j
- 키클락
- 사가 패턴
- MSA
- 타입스크립트
- 스프링 배치
- thread
- 배치
- TypeScript
- 체인 패턴
- 디자인 패턴
- spring cloud
- 생산자 소비자 패턴
- spring batch
- Spring Boot Actuator
- Parallel Old GC
- 멀티스레드
- JPA
- saga pattern
- Serial GC
- 스레드
- Action Pattern
- Java
- 디자인패턴
- java 정렬
- Transaction Pattern
- 알고리즘
- zipkin
- The law of Demeter
- Spring Cloud Netfilx Eureka
Archives
- Today
- Total
PSD( Private-Self-Development )
Spring Batch 도메인 이해 본문
1. Job
개념
- 배치 계층 구조의 최상위 개념, 하나의 작업 자체를 의미
- 배치 작업을 어떻게 구성하고 실행할 것인지 전체적으로 설명하고 명세해 놓은 클래스
- 스프링 배치가 기본 구현체를 제공한다.
- 여러 Step 을 포함하고 있다.
기본 구현체 종류
- SimpleJob
- 순차적으로 Step 을 실행
- FlowJob
- 특정 조건 과 흐름에 따라 Step 을 실행
2. JobInstance
개념
- Job 이 실행될 때 생성되는 Job 의 논리적 실행 단위 객체 (각 작업 실행)
- Job + JobParameter 의 구성을 가지며, 같은 Job 이라도 JobParameter 가 다르면 새로 JobInstance 를 생성
- Job(1) 과는 1:M
- JobParameter 와는 1:1
3. JobParameter
개념
- Job 을 생성할 때 사용되는 Parameter 도메인 객체
- 하나의 Job 에 사용되는 여러개의 Parameter 를 표현
- Job(1) 과는 1:M
- JobInstance 와는 1:1
- JobExecution(M) 과는 1:M
4. JobExecution
개념
- JobInstance 에 대한 한 번의 시도를 의미
- JobExecution 은 상태값을 가지며, 이 상태가 'FAILED' 이면 재실행 가능(여러번 가능), 'COMPLETED‘ 면 재실행 불가능
- JobInstance(1) 와는 1:M
- JobParameter(1) 와는 1:M
5. STEP
개념
- Batch Job 을 구성하는 단계를 의미 하는 도메인 객체
- 모든 Job 은 하나 이상의 Step 으로 구성된다.
기본 구현체 종류
- TaskletStep
- 기본이 되는 클래스 Tasklet 타입의 구현제 제어
- PartitionStep
- 멀티 스레드 방식으로 Step 을 여러개로 분리 실행
- JobStep
- Step 내에서 Job 을 실행
- FlowStep
- Step 내에서 Flow 를 실행
6. StepExecution
개념
- Step 에 대한 한 번의 시도를 의미
- 각 Step 별로 생성된다.
- Job 이 재시작 될 경우, 이미 성공한 Step 은 제외하고 실패한 Step 만 재실행 된다.
- 이전 단계 Step 이 실패한 경우, 현재 Step 에 관한 StepExecution은 생성하지 않는다.
- JobExecution(1) 과는 1:M 관계
JobExecution 과의 관계
- Step의 StepExecution 이 모두 정상적으로 완료 되어야 JobExecution이 정상적으로 완료된다.
- Step의 StepExecution 중 하나라도 실패하면 JobExecution 은 실패한다
7. StepContribution
개념
- 청크 프로세스의 변경사항을 버퍼링 한 후 StepExecution 의 상태를 업데이트 하는 도메인 객체
- 청크 커밋 직전에 StepExecution 의 apply 메서드를 호출
- ExitStatus 의 기본 종료 코드 외 사용자 정의 종료코드를 생성하여 적용 가능
❓청크(chunk)?
Spring Batch 에서 데이터 덩어리로 작업 할 때, 각 커밋 사이에 처리되는 row 수
즉, Chunk 단위로 트랜잭션 을 다루는 것
예를 들어, 작업이 실패한 경우, Chunk 만큼만 롤백이 되고, 이전에 커밋된 Chunk 범위는 반영이 된다.
8. ExecutionContext
개념
- StepExecution 또는 JobExecution 객체의 상태(state)를 저장하는 공유 객체
- DB 에 직렬화 한 값으로 저장됨 - { “key” : “value”}
- Job 재시작 시 이미 처리한 Row 데이터는 건너뛰고 이후로 수행하도록 할 때 상태 정보를 활용한다
공유 범위
- Step 범위
- 각 Step 의 StepExecution 에 저장되며 Step 간 서로 공유 안됨
- Job 범위
- 각 Job의 JobExecution 에 저장되며 Job 간 서로 공유 안되며 해당 Job의 Step 간 서로 공유됨
9. JobRepository
개념
- 배치 작업 중 정보를 저장하는 저장소 => git 의 로컬저장소 혹은 Jpa 컨텍스트 같은 역할
- Job이 언제 수행되었고, 언제 끝났으며, 몇 번이 실행되었고 실행에 대한 결과 등의
배치 작업의 수행과 관련된 모든 meta data 를 저장함 - JobLauncher, Job, Step 구현체 내부에서 CRUD 기능을 처리
- @EnableBatchProcessing 어노테이션만 선언하면 자동으로 JobRepository 빈 생성
- BatchConfigurer 인터페이스를 구현하거나 BasicBatchConfigurer 를 상속해서
JobRepository 설정을 커스터마이징 할 수 있다
설정 종류
- JDBC 방식으로 설정 - JobRepositoryFactoryBean
- 내부적으로 AOP 기술를 통해 트랜잭션 처리를 해주고 있음
- 트랜잭션 isolation 의 기본값은 SERIALIZEBLE 로 최고 수준,
다른 레벨(READ_COMMITED, REPEATABLE_READ)로 지정 가능 - 메타테이블의 Table Prefix 를 변경할 수 있음, 기본 값은 “BATCH_” 임
- In Memory 방식으로 설정 – MapJobRepositoryFactoryBean
- 성능 등의 이유로 도메인 오브젝트를 굳이 데이터베이스에 저장하고 싶지 않을 경우
- 보통 Test 나 프로토타입의 빠른 개발이 필요할 때 사용
10. JobLauncher
개념
- 배치 Job 을 실행시킨다.
- Job과 Job Parameters를 인자로 받으며, 요청된 배치 작업을 수행한 후 최종 client 에게 JobExecution을 반환함
- 스프링 부트 배치가 구동이 되면 JobLauncher 빈이 자동 생성 된다
실행 방법 종류
- 동기적 실행( 기본 )
- taskExecutor 를 SyncTaskExecutor 로 설정
- JobExecution 을 획득하고 배치 처리를 모두 완료 하고 client 에 JobExecution 반환
- 스케줄러에 의한 배치 처리에 적합 - 배치 처리 시간이 길어도 되는 경우
- 비 동기적 실행
- taskExecutor 가 SimpleAsyncTaskExecutor 로 설정
- JobExecution 을 획득한 후 Client 에게 바로 JobExecution 을 반환하고 배치 처리를 완료
- HTTP 요청에 의한 배치처리에 적합 – 배치처리 시간이 길 경우 응답이 늦어지지 않도록 함
참조
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B0%B0%EC%B9%98
https://jojoldu.tistory.com/331
'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.01.17 |