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

조갱·2025년 2월 9일
0

스프링 배치

목록 보기
5/9

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

FlowJob

기본 개념

  • FlowJobBuilder 을 사용하여 구성한다.
  • Step 을 특정 조건에 따라 흐름을 전환할 수 있도록 구성이 가능하다.
    • Step 이 실패하더라도, Job은 실패하지 않도록 구성
    • A, B, C 스탭이 있을 때, A 스탭의 성공/실패 여부에 따라 B 또는 C 스탭으로 분기가 필요할 때
    • 특정 Step은 실행되지 않게 구성 해야 하는 경우
  • Flow 와 Job 의 흐름을 구성하는데만 관여하고 실제 비즈니스 로직은 Step 에서 이루어진다.
  • 내부적으로 SimpleFlow 객체를 포함하고 있으며 Job 실행 시 호출한다.

생성 방법

  • JobBuilderFactory 를 통해 생성한다.
    • jobBuilderFactory.get("jobName") 을 통해 JobBuilder 를 생성하고,
      .start(Flow) 메소드를 통해 FlowJobBuilder 를 생성하여 FlowJob 을 구성할 수 있다.

구성 요소

  • Flow : Flow 를 정의한다. (start, from, next 메소드)
  • Transition : 조건에 따라 흐름을 전환한다. (to, stop, fail, end, stopAndRestart 메소드)

동작 방식

SimpleFlow

기본 개념

  • 스프링 배치에서 제공하는 Flow 의 구현체
  • FlowBuilder 를 사용해서 생성한다.
  • State 를 실행시킨다.
  • Transition 과 조합하여 여러 개의 Flow 및 중첩 Flow 를 만들어 Job 을 구성할 수 있다

State

  • Step, Flow, JobExecutionDecider 를 감싸고 있는 객체.
  • Flow 를 구성하면, 내부적으로 알아서 생성되고, Transition 과 연동된다.
  • handle() 메소드를 통해 State를 실행하고, 모든 step이 동작되도록 한다.
  • 마지막 실행 상태가 FlowJob 의 최종 상태가 된다.

  • SimpleFlow 는 stateMap 에 있는 모든 state 들을 handle 메소드를 통해 실행되도록 한다.
  • SimpleFlow 는 현재 실행되는 State 가 어떤 타입인지 알지 못한다. 단순히 handle 메소드만 실행하고, FlowExecutionStatus 를 반환받는다. => 상태 패턴

동작 방식

  • flow.execute(FlowExecutor) 를 통해 SimpleFlow 를 실행한다.
  • SimpleFlow 는 내부적으로 가지고 있는 StateMap 을 가지고 각 State를 실행한다.
    • 이 StateMap 은 초기화 시점에 StateTransition 객체로부터 State 객체 정보를 참조해서 매핑된다.
  • 최초에는 flow.start(FlowExecutor) 로 실행한다.
  • state.handle(FlowExecutor) 를 통해 State 를 실행한다.
  • simpleFlow.nextStatus(StateName, FlowExecutionStatus, StepExecution) 을 통해 다음에 실행할 State 를 선정한다.
    • 여기서 Transition 를 참조하여 흐름을 결정한다.
  • flow.resume(StateName, FlowExecutor) 를 통해 다음 State 를 Loop 로 반복하면서 처리한다.

FlowStep

기본 개념

  • Step 내에 Flow 를 할당하여 실행시키는 도메인 객체
  • flowStep 의 BatchStatus 와 ExitStatus 은 Flow 의 최종 상태값에 따라 결정된다

Transition

기본 개념

  • Flow 에 속한 Step 의 조건부 실행을 설정한다.
  • Job 의 API 설정을 통해 설정한다. (on 메소드를 통해 Transition Flow를 구성)
  • Step 의 ExitStatus가 어떤 pattern 과도 매칭되지 않으면 예외가 발생되며 Job이 실패 처리된다.
  • 구체적인 것부터 그렇지 않은 순서로 적용된다.
profile
A fast learner.

0개의 댓글