개요
FlowJob을 구성할 때 이해도 향상을 위해 SimpleFlow 아키텍처를 알아보겠습니다.
FlowJob 아키텍처는 아래 글을 참고해 주세요.
https://jaimemin.tistory.com/2302
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 객체들을 실행시킵니다.
위 사진을 보면 각각의 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 |