• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

EXITE_CODE 질문드립니다.

21.11.03 17:45 작성 조회수 193

1

챕터 : 스프링 배치 실행 - flow
강의명 : 
SimpleFlow 예제

해당 강의 13:59 부터 이해가 잘안되고 있습니다.

flow1()의 step2에서 예외가 발생하면서
STEP_EXCUTION의 EXITE_CODE가  FAILED이므로
flow3()을 실행했고
이후 flow3() 그에 해당하는 모든 스탭이 COMPLETED인데


왜 JOB_EXCUTION의 EXITE_CODE가 FAILED가 되는걸까요?

답변 2

·

답변을 작성해보세요.

0

개감님의 프로필

개감

질문자

2021.11.04

와.. 쏙쏙 이해가 되네요.. 감사합니다... ㅠㅠ감동스

0

개감님의 프로필

개감

질문자

2021.11.03

여러 테스트를 해봤는데요
flow job 안의 flow들 중에서 한번이라도 FAILED이 있으면
JOB_EXCUTION의 EXITE_CODE가 FAILED가 되는 것처럼 유추됩니다 ㅠㅠ...

JOB_EXECUTION 의 STATUS 와 EXIT_CODE 는 상태값이 다르게 작동하는데요

FlowJob 같은 경우 BATCH STATUS 값은 각 STEP 이나 FLOW 실행의 성공 및 실패 값에 따라 결정되는 것이 아니라 흐름의 최종 결정에 따라 정해집니다.

즉 FLOW 의 최종 흐름이 fail() 로 끝나면 STATUS 는 FAILED 가 되고 FLOW 의 최종 흐름이 end() 로 끝나면 STATUS 는 COMPLETED 가 되는 식입니다.

하지만 JOB_EXECUTION 의 EXIT_CODE 는 STEP 혹은 FLOW 의 실행에 따른 성공 및 실패 값에 따라 결정이 납니다.

그래서 흐름중에 어떤 STEP 에서 FAILED 가 발생하면 나머지 모두가 성공하더라도 종료 상태는 FAILED 가 됩니다. 

내부적으로 FAILED 가 COMPLETED 보다 우선적으로 최종 값이 되도록 로직이 구성되어 있습니다.

예를 들면 만장일치가 아니고 하나라도 반대하면 통과하지 못하는 것과 비슷한 맥락이라 보시면 됩니다.

일반적으로 우리가 배치가 최종 성공했는지 실패했는지를 판단하는 기준은 EXIT_CODE 라기 보다는 STATUS 라 보시면 됩니다.

종료를 실패로 마쳤는지 성공으로 마쳤는지의 기록도 필요하겠지만 궁극적으로는 배치의 최종 상태에 더 관심을 둡니다.

JOB 의 배치가 COMPLETED 로 최종 마쳤지만 STEP 이나 FLOW 는 얼마든지 FAILED 가 될 수 있습니다.

그렇기 때문에 비록 배치 상태 즉 STATUS 는 COMPLETED 이더라도 EXIT_CODE 값을 보고 모든 STEP 이나 FLOW 가 성공했는지 아니면 하나라도 실패했는지 파악할 수 있는 판단근거가 될 수 있기 때문에 둘의 상태를 구분해서 이해하시면 될 것 같습니다.

화이팅님의 프로필

화이팅

2023.05.25

내부적으로 ExitStatus의 우선순위에 대한 로직 공유합니다.

image