배치 애플리케이션의 개념과 스프링 배치의 대략적인 개요는 여기를 참고하자. 여기서는 전체적인 그림만 그리고 세부적인 사항과 구현은 별도의 포스팅으로 다룰 예정이다.
1. 스프링 배치 기본 구조
스프링 배치는 세 개의 티어로 구성된 레이어 구조로 이루어져있다.

1) 애플리케이션 레이어 (Application Layer)
- 배치 처리 구축에 사용되는 모든 사용자 코드와 구성
- 비즈니스 로직, 서비스, 잡 구조화와 관련된 구성을 포함한다
- 코어와 인프라스트럭처를 이용해 배치의 기능을 만든다
2) 코어 레이어 (Core Layer)
- 배치 도메인을 정의하는 모든 부분이 포함된다
- Job, Step, JobLauncher, JobParamters
3) 인프라스트럭처 레이어
- 외부와 상호작용을 담당한다
- 파일, 데이터베이스와의 I/O
- 잡 수행 실패 후 재시도 수행
- ItemReader, ItemWriter, RetryTemplate
2. 스프링 배치의 도메인
다음은 기본적인 스프링 배치의 도메인 구조를 나타낸 그림이다.

- Job은 배치 작업이며, JobLauncher에 의해 실행된다
- JobRepository는 Job, Step, 그리고 각종 Execution들을 저장한다
- Step은 배치 작업의 단계이며, 단계 내에서 ItemReader/ItemProcessor/ItemWriter 데이터를 읽고/처리하고/쓰는 작업을 수행한다
1) Job

- 전체 배치 과정을 캡슐화한 객체, 쉽게 말해 배치로 수행할 전체 작업
- 여러 개의 스텝으로 구성되며, 스텝의 순서를 지정한다
- JobParameters
- 배치 잡을 시작하기 위한 파라미터 집합(Set)
- JobInstance
- 잡의 논리적인 실행(logical execution)
- 잡의 이름과 파라미터 집합으로 구성된 유일한 존재 (JobInstance = Job + identifying JobParamters)
- 잡의 이름이나 파라미터 집합이 바뀌면 새로운 JobInstance가 생성된다
- JobExecution
- 잡의 실제 실행(exectuion)
- 잡을 구동할 때마다 매번 새로운 JobExecution을 얻게 된다
- JobInstance는 여러 개의 JobExecution을 얻을 수 있다
- 실행에 실패한 이후 다시 실행하면 동일한 논리적 실행이므로 새로운 JobExecution을 얻을 뿐, 새로운 JobInstance를 얻진 못한다
2) Step

- 배치 작업의 단계를 캡슐화한 객체, 쉽게 말해 잡을 구성하는 독립적인 작업 처리의 단위
- 크게 청크(chunk) 기반 스텝과 태스크릿(tasklet) 기반 스텝으로 나뉜다
- 청크 기반 스텝
- 구조가 약간 더 복잡하며, 아이템 기반의 처리에 사용한다
- 아이템은 레코드, 테이블의 한 행 정도로 생각하면 된다
- 청크 단위로 트랜잭션을 수행한다
- 청크는 아이템의 묶음이다
- ItemReader, ItemProcessor, ItemWriter라는 3개의 주요 부분으로 구성될 수 있다 (ItemProcessor는 필수가 아님)
- ItemReader는 청크 단위로 처리할 모든 레코드를 반복적으로 메모리로 읽어온다
- ItemProcessor를 구성했다면 메모리로 읽어들인 아이템은 반복적으로 ItemProcessor를 거쳐간다
- ItemWriter의 단일 호출은 물리적 쓰기를 일괄적으로 처리함으로써 IO 최적화를 이룬다
- 구조가 약간 더 복잡하며, 아이템 기반의 처리에 사용한다

- 태스크릿 기반 스텝
- 구조가 간단하며 초기화, 저장 프로시저 실행, 알림 전송 등과 같은 잡에서 일반적으로 사용된다
- 태스크릿 스텝 자체가 트랜잭션의 단위
- StepExecution
- Step이 실행될 때마다 생성되는 객체, JobExecution과 유사
- 전 스텝이 실패하면 스텝이 실행되지 않고, 이에 따라 StepExecution도 생성되지 않는다
4) JobRepository
- 다양한 배치 수행과 관련된 수치 데이터(시작 시간, 종료 시간, 상태, 읽기/쓰기 횟수 등)뿐만 아니라 잡의 상태를 유지 관리한다
- 일반적으로 RDB를 사용하며 스프링 배치 내 대다수의 주요 컴포넌트가 공유한다
5) JobLauncher
- 잡을 실행하는 역할
- Job.execute 메서드를 호출 외에도 잡의 재실행 가능 여부 검증, 잡의 실행 방법, 파라미터 유효성 검증 등의 처리를 수행한다
- 스프링 부트가 즉시 잡을 시작하는 기능을 제공하므로 일반적으로 직접 다룰 필요는 없는 컴포넌트이다
3. 참고
'Spring Batch' 카테고리의 다른 글
[Spring Batch] 스프링 배치4 - JobRepository와 메타 테이블 (0) | 2023.06.06 |
---|---|
[Spring Batch] 스프링 배치3 - 스텝(Step) (0) | 2023.04.10 |
[Spring Batch] 스프링 배치2 - 잡(Job) (0) | 2023.04.07 |
배치 애플리케이션의 개념과 스프링 배치의 대략적인 개요는 여기를 참고하자. 여기서는 전체적인 그림만 그리고 세부적인 사항과 구현은 별도의 포스팅으로 다룰 예정이다.
1. 스프링 배치 기본 구조
스프링 배치는 세 개의 티어로 구성된 레이어 구조로 이루어져있다.

1) 애플리케이션 레이어 (Application Layer)
- 배치 처리 구축에 사용되는 모든 사용자 코드와 구성
- 비즈니스 로직, 서비스, 잡 구조화와 관련된 구성을 포함한다
- 코어와 인프라스트럭처를 이용해 배치의 기능을 만든다
2) 코어 레이어 (Core Layer)
- 배치 도메인을 정의하는 모든 부분이 포함된다
- Job, Step, JobLauncher, JobParamters
3) 인프라스트럭처 레이어
- 외부와 상호작용을 담당한다
- 파일, 데이터베이스와의 I/O
- 잡 수행 실패 후 재시도 수행
- ItemReader, ItemWriter, RetryTemplate
2. 스프링 배치의 도메인
다음은 기본적인 스프링 배치의 도메인 구조를 나타낸 그림이다.

- Job은 배치 작업이며, JobLauncher에 의해 실행된다
- JobRepository는 Job, Step, 그리고 각종 Execution들을 저장한다
- Step은 배치 작업의 단계이며, 단계 내에서 ItemReader/ItemProcessor/ItemWriter 데이터를 읽고/처리하고/쓰는 작업을 수행한다
1) Job

- 전체 배치 과정을 캡슐화한 객체, 쉽게 말해 배치로 수행할 전체 작업
- 여러 개의 스텝으로 구성되며, 스텝의 순서를 지정한다
- JobParameters
- 배치 잡을 시작하기 위한 파라미터 집합(Set)
- JobInstance
- 잡의 논리적인 실행(logical execution)
- 잡의 이름과 파라미터 집합으로 구성된 유일한 존재 (JobInstance = Job + identifying JobParamters)
- 잡의 이름이나 파라미터 집합이 바뀌면 새로운 JobInstance가 생성된다
- JobExecution
- 잡의 실제 실행(exectuion)
- 잡을 구동할 때마다 매번 새로운 JobExecution을 얻게 된다
- JobInstance는 여러 개의 JobExecution을 얻을 수 있다
- 실행에 실패한 이후 다시 실행하면 동일한 논리적 실행이므로 새로운 JobExecution을 얻을 뿐, 새로운 JobInstance를 얻진 못한다
2) Step

- 배치 작업의 단계를 캡슐화한 객체, 쉽게 말해 잡을 구성하는 독립적인 작업 처리의 단위
- 크게 청크(chunk) 기반 스텝과 태스크릿(tasklet) 기반 스텝으로 나뉜다
- 청크 기반 스텝
- 구조가 약간 더 복잡하며, 아이템 기반의 처리에 사용한다
- 아이템은 레코드, 테이블의 한 행 정도로 생각하면 된다
- 청크 단위로 트랜잭션을 수행한다
- 청크는 아이템의 묶음이다
- ItemReader, ItemProcessor, ItemWriter라는 3개의 주요 부분으로 구성될 수 있다 (ItemProcessor는 필수가 아님)
- ItemReader는 청크 단위로 처리할 모든 레코드를 반복적으로 메모리로 읽어온다
- ItemProcessor를 구성했다면 메모리로 읽어들인 아이템은 반복적으로 ItemProcessor를 거쳐간다
- ItemWriter의 단일 호출은 물리적 쓰기를 일괄적으로 처리함으로써 IO 최적화를 이룬다
- 구조가 약간 더 복잡하며, 아이템 기반의 처리에 사용한다

- 태스크릿 기반 스텝
- 구조가 간단하며 초기화, 저장 프로시저 실행, 알림 전송 등과 같은 잡에서 일반적으로 사용된다
- 태스크릿 스텝 자체가 트랜잭션의 단위
- StepExecution
- Step이 실행될 때마다 생성되는 객체, JobExecution과 유사
- 전 스텝이 실패하면 스텝이 실행되지 않고, 이에 따라 StepExecution도 생성되지 않는다
4) JobRepository
- 다양한 배치 수행과 관련된 수치 데이터(시작 시간, 종료 시간, 상태, 읽기/쓰기 횟수 등)뿐만 아니라 잡의 상태를 유지 관리한다
- 일반적으로 RDB를 사용하며 스프링 배치 내 대다수의 주요 컴포넌트가 공유한다
5) JobLauncher
- 잡을 실행하는 역할
- Job.execute 메서드를 호출 외에도 잡의 재실행 가능 여부 검증, 잡의 실행 방법, 파라미터 유효성 검증 등의 처리를 수행한다
- 스프링 부트가 즉시 잡을 시작하는 기능을 제공하므로 일반적으로 직접 다룰 필요는 없는 컴포넌트이다
3. 참고
'Spring Batch' 카테고리의 다른 글
[Spring Batch] 스프링 배치4 - JobRepository와 메타 테이블 (0) | 2023.06.06 |
---|---|
[Spring Batch] 스프링 배치3 - 스텝(Step) (0) | 2023.04.10 |
[Spring Batch] 스프링 배치2 - 잡(Job) (0) | 2023.04.07 |