오류 처리
노드 실패를 다루는 방법은 4계층입니다 — 노드 설정(재시도/계속), 에러 출력 포트(브랜치 분기), 에러 워크플로우(별도 워크플로우 발화), Saga 보상(분산 롤백).
노드 실행 설정
NDV 의 노드 설정에서 노드 단위 실패 동작을 제어합니다.
| 설정 | 값 | 동작 |
|---|---|---|
retryOnFail | on/off + maxTries(1waitBetweenTries(0 | 실패 시 지정 횟수만큼 재시도. 시도마다 타임아웃이 개별 적용됩니다 |
executeOnce | on/off | 입력이 여러 아이템이어도 첫 아이템만 처리 |
alwaysOutputData | on/off | 출력이 비어도 빈 아이템 1개를 내보내 하류 실행이 이어지게 함 |
onError | stopWorkflow(기본) / continueRegularOutput / continueErrorOutput | 실패 시: 워크플로우 중단 / 에러 아이템을 정상 출력으로 계속 / 에러 포트로 분기 |
에러 출력 포트
onError = continueErrorOutput 을 켜면 노드에 빨간 error 포트가 추가됩니다.
- 노드가 실패하면 오류 정보를 담은 아이템이 error 포트의 브랜치로 흐르고, 정상 브랜치는 실행되지 않습니다.
- 실패 알림 전송, 대체 처리 등 실패 전용 흐름을 같은 워크플로우 안에 만들 수 있습니다.
- error 포트를 연결하지 않은 채 실패하면 해당 브랜치는 정상 종결 처리됩니다.
관련 노드: 오류 중단(Stop and Error) — 조건에 따라 워크플로우를 의도적으로 실패시킬 때 사용합니다.
에러 워크플로우
워크플로우 설정의 errorWorkflow 에 에러 트리거로 시작하는 워크플로우를 지정하면, 실패 시 자동으로 실행됩니다(실패 실행 정보가 페이로드로 전달, mode=error). → 트리거 종류
Saga 보상 (분산 트랜잭션)
여러 외부 시스템을 건드리는 워크플로우에서 중간 노드가 실패하면, 엔진의 Saga 서브시스템이 이미 성공한 스텝을 역순으로 보상(롤백)합니다.
- 보상은 보상을 구현한 노드 서비스에 한해 실행됩니다(미구현 노드는 건너뜀으로 기록).
- 보상 요청 전달은 at-least-once 이므로 보상 로직은 멱등하게 동작합니다.
- 보상이 시간 내 끝나지 않으면 recovery 스케줄러가 재시도하고, 한도를 넘으면 수동 개입 대상으로 전환됩니다(Saga 관리 API/대시보드에서 재시도·수동 완료·중단 처리).
일반 사용자는 별도 설정 없이 동작하며, 운영자는 Saga 대시보드에서 보상 상태를 모니터링합니다.