[스프링 배치] Step 도메인 이해

조갱·2025년 1월 25일
0

스프링 배치

목록 보기
4/9

개념이 너무 크기에, 여기서는 간단한 용어들과 개념을 살펴봅니다.
사용법은 추후 포스팅에 작성합니다.

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 데이터는 건너뛰고 이후로 수행하도록 할 때 상태 정보를 활용한다
profile
A fast learner.

0개의 댓글