오류를 우아하게 처리하기

오류를 우아하게 처리하기

실행 오류를 어떻게 처리하는지 다뤄볼게요.

흐름 로직을 설계할 때는 잠재적인 오류를 미리 고려하고, 이를 우아하게 처리할 방법을 마련해 두는 것이 좋은 습관이에요. 오류 워크플로(error workflow)를 사용하면 워크플로 실행이 실패했을 때 n8n이 어떻게 응답할지 제어할 수 있어요.

{% hint style="info" %} 오류 조사하기

실패한 실행을 조사하려면 다음을 할 수 있어요.

오류 워크플로를 어떻게 설정하나요?

각 워크플로에 대해 Workflow Settings에서 오류 워크플로를 설정할 수 있어요. 실행이 실패하면 그 오류 워크플로가 실행돼요. 예를 들어 워크플로 실행이 오류가 났을 때 이메일이나 Slack 알림을 보내도록 할 수 있어요. 오류 워크플로는 Error Trigger로 시작해야 해요.

여러 워크플로에서 같은 오류 워크플로를 사용할 수 있어요.

  1. Error Trigger가 첫 번째 노드인 새 워크플로를 만드세요.
  2. 워크플로에 이름을 주세요. 예를 들어 Error Handler.
  3. Save를 선택하세요.
  4. 이 오류 워크플로를 사용하고 싶은 워크플로에서:
    1. Options Options menu icon > Settings를 선택하세요.
    2. Error workflow에서 방금 만든 워크플로를 선택하세요. 예를 들어 이름을 Error Handler로 했다면 Error handler를 선택하세요.
    3. Save를 선택하세요. 이제 이 워크플로에서 오류가 나면 관련 오류 워크플로가 실행됩니다.

오류 워크플로는 어떤 데이터를 받나요?

Error Trigger가 받는 기본 오류 데이터는 다음과 같아요.

[
	{
		"execution": {
			"id": "231",
			"url": "https://n8n.example.com/execution/231",
			"retryOf": "34",
			"error": {
				"message": "Example Error Message",
				"stack": "Stacktrace"
			},
			"lastNodeExecuted": "Node With Error",
			"mode": "manual"
		},
		"workflow": {
			"id": "1",
			"name": "Example Workflow"
		}
	}
]

다음을 제외한 모든 정보는 항상 존재해요.

  • execution.id: 실행이 데이터베이스에 저장되어 있어야 해요. 메인 워크플로의 트리거 노드에서 오류가 나면 워크플로가 실행되지 않으므로 이 값은 없어요.
  • execution.url: 역시 실행이 데이터베이스에 저장되어 있어야 해요. 트리거 노드 오류 시에는 없어요.
  • execution.retryOf: 실행이 실패한 실행의 재시도일 때만 존재해요.

오류가 이후 단계가 아니라 메인 워크플로의 트리거 노드에 의해 발생했다면, 오류 워크플로로 보내는 데이터가 달라져요. execution{}에는 정보가 적고 trigger{}에 더 많아요.

{
  "trigger": {
    "error": {
      "context": {},
      "name": "WorkflowActivationError",
      "cause": {
        "message": "",
        "stack": ""
      },
      "timestamp": 1654609328787,
      "message": "",
      "node": {
        . . . 
      }
    },
    "mode": "trigger"
  },
  "workflow": {
    "id": "",
    "name": ""
  }
}

Stop and Error 노드로 워크플로를 의도적으로 실패시키는 방법

오류 워크플로를 만들고 설정하면 실행이 실패할 때 n8n이 그 워크플로를 실행해요. 보통 이런 실패는 노드 설정 오류나 워크플로 메모리 부족 같은 것 때문에 발생해요.

선택한 상황에서 실행을 강제로 실패시키고 오류 워크플로를 트리거하려면 Stop And Error 노드를 워크플로에 추가할 수 있어요.