Spring

[Spring Batch] SimpleFlow 아키텍처

꾸준함. 2023. 7. 17. 00:14

개요

FlowJob을 구성할 때 이해도 향상을 위해 SimpleFlow 아키텍처를 알아보겠습니다.

FlowJob 아키텍처는 아래 글을 참고해 주세요.

https://jaimemin.tistory.com/2302

 

[Spring Batch] FlowJob 아키텍처

개요 Job의 구현체는 아래와 같이 두 가지가 존재합니다. SimpleJob FlowJob SimpleJob 아키텍처는 https://jaimemin.tistory.com/2300에서 다루었고 이번 게시글에서는 FlowJob 아키텍처를 간단히 정리해보겠습니다

jaimemin.tistory.com

 

SimpleFlow

SimpleFlow는 start 메서드에 넘겨지는 파라미터에 따라 StateType 객체가 달라집니다.

  • start, next, from 메서드에 Step 객체가 전달될 경우 StepState가 생성되고 해당 State에 Step이 저장
  • start, next, from 메서드에 Flow 객체가 전달될 경우 FlowState가 생성되고 해당 State에 Flow가 저장
  • start, next, from 메서드에 JobExecutionDecider 객체가 전달될 경우 DecisionState가 생성되고 해당 State에 JobExecutionDecider가 저장

 

FlowBuilder에 의해 생성된 State는 StateTransition에 저장이 되는데 StateTransition은 Flow의 Api 설정 및 Transition 내용에 따라 State 객체를 생성하는 역할을 합니다.

저장하는 내용은 아래와 같습니다.

  • 현재 State가 pattern일 때 next state로 이동

 

정리하자면 SimpleFlow는 내부적으로 StateTransition 객체들을 담은 List<StateTransition>들을 가지고 있고 각각의 State Transition 값들을 참조해서 State에 담겨있는 각각의 Step, Flow, 혹은 Decision 객체들을 실행시킵니다.

 

SimpleFlow 내 List<StateTransition>의 예시
List<StateTransition>의 예시

 

위 사진을 보면 각각의 StateTransition이 현재의 State, pattern, 그리고 이에 따라 실행시켜야 할 다음 State 내용을 지니고 있는 것을 확인할 수 있습니다.

Transition은 구체적인 것부터 제너럴 한 순서로 적용이 됩니다.

여기서 중요한 점은 실행순서가 순차적 개념이 아닌 설정 및 조건에 따라 결정된다는 것입니다.

참고로 SimpleFlow 내 SimpleFlow를 N 중으로 중첩해서 복잡하게 구성하는 것도 가능합니다.

 

* FlowBuilder에는 split 메서드에 생성되는 SplitState도 존재하는데 이는 추후에 정리해 보겠습니다.

  • 간단하게 요약하자면 SplitState는 여러 Flow를 저장할 수 있는 State 객체입니다.

 

위 내용을 정리한 그림

 

 

* 앞서 언급하지 못했는데 SimpleFlow는 현재 호출되는 State가 어떤 타입인지 알 수 없고 단지 handle 메서드를 실행한 뒤 FlowExecutionStatus라는 상태값을 얻어올 뿐입니다. (상태 패턴)

 

출처

스프링 배치 - Spring Boot 기반으로 개발하는 Spring Batch (정수원 강사님)

반응형

'Spring' 카테고리의 다른 글

[Spring Batch] Skip, Retry 정책  (0) 2023.09.14
[Spring Batch] @JobScope,@StepScope  (0) 2023.07.19
[Spring Batch] FlowJob 아키텍처  (0) 2023.07.11
[Spring Batch] TaskletStep 아키텍처  (0) 2023.07.11
[Spring Batch] SimpleJob 아키텍처  (0) 2023.07.10