Error Trigger + 에러 핸들링 — 장애에 강한 워크플로우 만들기

Error Trigger + 에러 핸들링 — 장애에 강한 워크플로우 만들기

"정상 동작하는 워크플로우는 누구나 만든다. 실패해도 살아남는 워크플로우를 만드는 것이 프로의 영역이다."

n8n의 에러 처리 체계

n8n에서 에러가 발생하면 기본적으로 워크플로우가 즉시 중단된다. 프로덕션 환경에서는 이것만으로 부족하다. 에러를 감지하고, 알리고, 대응하는 체계가 필요하다.

                       Level 1          Level 2           Level 3
에러 발생 ──▶ [노드별 에러 설정] ──▶ [Error Workflow] ──▶ [모니터링]
              (재시도, 계속)         (알림, 로그)        (대시보드)

Level 1: 노드별 에러 설정

각 노드의 Settings 탭에서 에러 발생 시 동작을 설정할 수 있다.

On Error 옵션

옵션 동작 적합한 경우
Stop Workflow 즉시 중단 (기본값) 후속 노드가 이 데이터 없이 동작 불가
Continue on Fail 에러 정보를 담고 계속 진행 실패해도 나머지는 처리해야 할 때
Continue Using Error Output 에러 전용 출력으로 분기 에러 케이스를 별도 처리할 때

Continue on Fail 활용

[HTTP Request: API 호출]
  On Error: Continue on Fail
      │
      ▼
[IF: 에러 발생?]
  조건: {{ $json.error !== undefined }}
      │
  true ──▶ [에러 로그 저장]
      │
  false ──▶ [정상 처리 계속]

에러가 발생하면 $json에 에러 정보가 포함된다:

{
  "error": {
    "message": "Request failed with status code 429",
    "description": "Too Many Requests"
  }
}

Continue Using Error Output 활용

노드에 두 번째 출력 포트(빨간색)가 생긴다:

[HTTP Request]
   │ 정상 출력 (초록) ──▶ [정상 처리]
   │ 에러 출력 (빨강) ──▶ [에러 처리]

IF 노드 없이도 에러 케이스를 자연스럽게 분기할 수 있어 워크플로우가 깔끔해진다.


Level 2: Retry — 자동 재시도

일시적인 네트워크 오류나 API 속도 제한(429)에는 재시도가 효과적이다.

재시도 설정

Settings 탭에서:

설정 설명 권장값
Retry on Fail ON
Max Tries 최대 재시도 횟수 3
Wait Between Tries 재시도 간 대기 시간 (ms) 1000
Backoff 대기 시간 증가 방식 Exponential

Backoff 방식

방식 대기 시간 패턴 설명
Fixed 1초 → 1초 → 1초 항상 동일한 간격
Exponential 1초 → 2초 → 4초 간격이 2배씩 증가

💡 권장: API 속도 제한에는 Exponential Backoff가 좋다. 서버에 부하를 줄이면서 재시도 확률을 높인다.

재시도가 효과적인 에러

HTTP 코드 설명 재시도 효과
429 Too Many Requests ✅ 높음 (시간 지나면 해결)
500 Internal Server Error ✅ 보통 (일시적 오류)
502 Bad Gateway ✅ 보통
503 Service Unavailable ✅ 높음 (과부하)
401 Unauthorized ❌ 없음 (인증 문제)
404 Not Found ❌ 없음 (리소스 없음)

Level 3: Error Workflow — 글로벌 에러 핸들러

Error Workflow는 다른 워크플로우가 실패했을 때 자동으로 실행되는 전용 에러 처리 워크플로우다.

Error Workflow 만들기

Step 1: 에러 처리 워크플로우 생성

  1. 새 워크플로우 생성: "🚨 에러 알림"
  2. Error Trigger 노드 추가 (일반 Trigger가 아닌 Error Trigger)

Error Trigger 노드가 받는 데이터:

{
  "execution": {
    "id": "exec_abc123",
    "url": "https://n8n.example.com/execution/abc123",
    "error": {
      "message": "Request failed with status code 500",
      "node": {
        "name": "HTTP Request",
        "type": "n8n-nodes-base.httpRequest"
      }
    },
    "lastNodeExecuted": "HTTP Request",
    "mode": "trigger"
  },
  "workflow": {
    "id": "wf_xyz789",
    "name": "날씨 알림 봇"
  }
}

Step 2: 알림 노드 연결

[Error Trigger] ──▶ [Edit Fields: 메시지 구성] ──▶ [Slack: #alerts 채널]

Edit Fields 설정:

메시지: {{ "🚨 워크플로우 에러 발생!\n\n" +
  "워크플로우: " + $json.workflow.name + "\n" +
  "실패 노드: " + $json.execution.error.node.name + "\n" +
  "에러: " + $json.execution.error.message + "\n" +
  "실행 URL: " + $json.execution.url }}

Step 3: 메인 워크플로우에 연결

에러 알림을 받고 싶은 워크플로우의 Settings에서:

Error Workflow: "🚨 에러 알림" (방금 만든 워크플로우 선택)

이제 메인 워크플로우가 실패하면 자동으로 에러 알림 워크플로우가 실행된다.


에러 핸들링 패턴

패턴 1: Try-Catch 패턴

[HTTP Request]
   │ 정상 (초록) ──▶ [정상 처리]
   │ 에러 (빨강) ──▶ [대체 API 호출] ──▶ [정상 처리]

첫 번째 API가 실패하면 대체 API를 시도한다.

패턴 2: 에러 로깅 패턴

[HTTP Request]
   │ 정상 ──▶ [계속]
   │ 에러 ──▶ [Google Sheets: 에러 로그] ──▶ [Slack 알림]

에러 내용을 스프레드시트에 기록하고 알림을 보낸다.

패턴 3: 데드 레터 큐 패턴

처리 실패한 아이템만 별도 저장해두고 나중에 재처리:

[데이터 처리]
   │ 정상 ──▶ [DB 저장]
   │ 에러 ──▶ [Google Sheets: 실패 목록] (나중에 수동 재처리)

패턴 4: 서킷 브레이커 패턴

연속 실패 시 워크플로우를 비활성화:

[Error Trigger] ──▶ [Code: 에러 횟수 체크]
                         │
                    3회 미만 ──▶ [Slack: 경고 알림]
                         │
                    3회 이상 ──▶ [HTTP: n8n API로 워크플로우 비활성화]
                                   ──▶ [Slack: 🔴 워크플로우 중단됨]

실행 모니터링

Executions 페이지

좌측 메뉴 → Executions에서 모든 실행 기록을 확인할 수 있다.

필터 설명
All 모든 실행
Error 실패한 실행만
Success 성공한 실행만
Running 현재 실행 중
Waiting Wait 노드에서 대기 중

각 실행을 클릭하면 해당 시점의 노드별 데이터를 그대로 재현해서 볼 수 있다. 실패 원인 분석에 필수적이다.

실행 데이터 관리

시간이 지나면 실행 데이터가 쌓여 디스크를 차지한다.

# docker-compose.yml 환경 변수
- EXECUTIONS_DATA_PRUNE=true      # 자동 정리 활성화
- EXECUTIONS_DATA_MAX_AGE=720     # 720시간(30일) 이후 삭제

💡 팁: 에러 실행 데이터는 더 오래 보관하고 싶다면, Error Workflow에서 에러 내용을 별도로 저장(DB, Google Sheets 등)해두자.


에러 핸들링 체크리스트

프로덕션 워크플로우를 만들 때 아래 항목을 점검하자.

항목 확인
외부 API 노드에 재시도 설정
핵심 노드에 Continue on Fail 또는 Error Output 설정
Error Workflow 연결하여 실패 시 알림
실행 데이터 자동 정리(Prune) 설정
에러 내용을 로그로 저장 (Sheets, DB 등)
팀 채널에 에러 알림 전송 (Slack, Email 등)

📝 정리

  • [x] 노드별 에러 설정: Stop / Continue on Fail / Error Output 3가지 선택
  • [x] 재시도: Max Tries + Exponential Backoff로 일시적 오류 대응
  • [x] Error Workflow: Error Trigger로 글로벌 에러 감지 → 알림/로그
  • [x] 패턴: Try-Catch, 로그, 데드 레터 큐, 서킷 브레이커
  • [x] 모니터링: Executions 페이지에서 실패 이력 추적, 자동 정리 설정

다음 편 예고

12편: Schedule Trigger + Cron 표현식 — 시간이 자동화를 깨운다

"매일 오전 9시", "매주 월요일", "매월 1일 자정"... Cron 표현식을 정복하고 모든 시간 기반 자동화를 설계하자.