개념이 너무 크기에, 여기서는 간단한 용어들과 개념을 살펴봅니다.
사용법은 추후 포스팅에 작성합니다.
Step
기본 개념
- Job을 구성하는 독립적인 하나의 도메인 객체
- 배치 처리를 정의하고, 컨트롤하는 데 필요한 정보를 가진다.
- 단순한 단일 테스크 뿐 아니라 입력/처리/출력과 관련된 복잡한 로직 처리 가능
- 배치작업을 어떻게 구성하고 실행할 것인지 Job 의 세부 작업을 Task 기반으로 설정하고 명세해 놓은 객체
- 모든 Job은 하나 이상의 step으로 구성된다.
기본 구현체
- TaskletStep : 가장 기본적으로 사용되며, Tasklet 타입의 구현체들을 제어한다
- PartitionStep : 멀티 스레드 방식으로 Step 을 여러 개로 분리해서 실행한다
- JobStep : Step 내에서 Job 을 실행하도록 한다
- FlowStep : Step 내에서 Flow 를 실행하도록 한다
실행 단위
- Chunk : 큰 데이터를 chunk 단위로 쪼개서 처리한다. (ItemReader / ItemProcessor / ItemWriter)
- Task : 하나의 Task를 처리한다.
StepExecution
기본 개념
- Step이 실행될 때마다 생성. (1회의 실행을 의미)
- Step 실행 중에 발생한 정보(시작시간, 종료시간, 상태, commit count, rollback count 등) 을 가진다.
- Job 이 재시작 되면, 실패한 Step만 실행된다.
- 여러 Step 중, 이전 Step이 실패해서 현재 Step을 실행하지 않았다면 StepExecution을 생성하지 않는다.
- Step이 실제로 시작됐을 때만 StepExecution을 생성한다
- JobExecution 과의 관계
- 모든 StepExecution이 정상적으로 완료되어야 JobExecution도 성공한다.
- StepExecution들 중 하나라도 실패하면 JobExecution 은 실패한다.
BATCH_STEP_EXECUTION 테이블과 매핑
• JobExecution 와 StepExecution 는 1:M 의 관계
• 하나의 Job 에 여러 개의 Step 으로 구성했을 경우 각 StepExecution 은 하나의 JobExecution 을 부모로 가진다
StepContribution
기본 개념
- 청크 프로세스의 변경 사항을 버퍼링 한 후 StepExecution 상태를 업데이트하는 도메인 객체
- 청크 커밋 직전에 StepExecution 의 apply 메서드를 호출하여 상태를 업데이트 함
- ExitStatus 의 기본 종료코드 외 사용자 정의 종료코드를 생성해서 적용 할 수 있음

ExecutionContext
기본 개념
- Key/Value 로 이루어진 컬렉션
- StepExecution 또는 JobExecution 객체의 상태(state)를 공유한다.
- DB 에 직렬화 한 값으로 저장됨 - {“key” : “value”}
- 공유 범위
- Step : 각 Step 의 StepExecution 에 저장되며 Step 간 공유 안됨
- Job : 각 Job의 JobExecution 에 저장되며 Job 간 공유 안됨, Job 내 Step 간 공유됨
- Job 재 시작시 이미 처리한 Row 데이터는 건너뛰고 이후로 수행하도록 할 때 상태 정보를 활용한다
