n8n Sub-Workflow · Execute Workflow
같은 로직을 5개 워크플로에 복붙하는 짓 그만. 함수처럼 호출하는 재사용 모듈로 정리.
n8n 을 몇 달 쓰면 자연스럽게 같은 패턴이 여러 워크플로에 나타난다. "Slack 알림", "이메일 발송", "에러 로깅" — 매번 같은 노드 4-5개를 복붙. 그러다 알림 채널을 한 번 바꾸려면 5개 워크플로를 다 손봐야 하는 지옥이 시작된다.
답은 Sub-Workflow. 프로그래밍의 함수와 같은 개념을 n8n 캔버스로 옮겨놓은 것. 이번 16편에서는 Sub-Workflow 가 언제 필요한지, 어떻게 입출력을 정의하는지, 그리고 19편 AI Agent 가 Sub-Workflow 를 Tool 로 부르는 패턴까지 정리한다.
1. Sub-Workflow 두 노드 — Trigger 와 Caller
Sub-Workflow 한 쌍은 항상 두 워크플로로 나뉜다. 호출되는 쪽 (Sub) 과 호출하는 쪽 (Parent). 각자 다른 트리거 노드를 쓴다.
| 역할 | 노드 | 위치 |
|---|---|---|
| Sub-Workflow 입구 | Execute Sub-workflow Trigger (Manual·Webhook 대신 이걸 트리거로) | 호출되는 워크플로의 첫 노드 |
| Sub-Workflow 호출 | Execute Workflow (또는 Execute Workflow Tool for AI Agent) | 호출하는 워크플로의 본문 중간 |
흐름: Parent 의 Execute Workflow 노드가 Sub 의 Execute Sub-workflow Trigger 를 깨움 → Sub 의 본문 실행 → 마지막 노드의 출력이 Parent 의 Execute Workflow 노드 출력으로 돌아옴. 함수 호출과 정확히 동일.
2. 입력·출력 정의 — 함수 시그니처 박기
Sub-Workflow 가 함수처럼 재사용 가능하려면 명확한 입출력 스키마가 필요하다. n8n 은 "Workflow Inputs" 패널에서 입력 필드를 미리 선언할 수 있다.
호출되는 워크플로의 Execute Sub-workflow Trigger 노드 → "Workflow Input Schema" 에 JSON Schema 정의:
{
"email": {"type": "string", "required": true},
"subject": {"type": "string", "required": true},
"html": {"type": "string"}
}
이러면 Parent 의 Execute Workflow 노드가 입력 필드를 자동 인식해서 form 으로 보여줌. 잘못된 타입·필수 누락이면 호출 시점에 에러. 함수 시그니처 + 타입 체크와 같은 효과.
3. 언제 Sub-Workflow 로 빼야 하는가 — 3 신호
"이걸 빼는 게 맞나" 고민될 때 판단 기준 셋. 하나라도 해당하면 분리할 가치.
신호 1 — 같은 노드 묶음이 3 워크플로 이상 반복
Slack 알림 4 노드 (Set 메시지 포맷 + Slack + IF 성공 체크 + Log) 가 신규·결제·에러 워크플로에 모두 들어가 있다면 즉시 분리. Notify Slack 라는 Sub-Workflow 1개 만들어서 3 곳에서 호출.
신호 2 — 그 로직이 독립 테스트 필요
"이메일 발송 로직이 진짜 작동하나" 테스트하려고 메인 워크플로를 다 실행할 필요가 없어야. Sub-Workflow 로 빼면 Manual Trigger 모드로 단독 실행 가능. 독립 테스트 가능성 = 좋은 분리 신호.
신호 3 — 19편 AI Agent 의 Tool 후보
"DB 조회·이메일 발송·검색" 같이 AI Agent 가 자율 호출할 만한 액션이면 Sub-Workflow + Execute Workflow Tool 노드로 묶기. AI Agent 가 description 보고 알아서 부른다. 19편 4 컴포넌트의 ③ Tool 자리가 이걸로 채워진다.
4. 실전 — 알림 Sub-Workflow 한 개로 5 워크플로 통합
박준성님의 warehouse 운영을 예로. 현재 알림이 필요한 5 시점:
- 새 블로그 발행 → Slack
- n8n 워크플로 실패 → Slack + Email (17편 Error Workflow)
- Replicate 월 예산 80% 도달 → Slack
- WordPress DB 연결 끊김 → Slack + SMS
- 새 클라이언트 문의 수신 → Slack + Email
5 곳에 같은 Slack 노드 + 메시지 포맷을 박지 말고, "Notify" Sub-Workflow 1개 만든다. 입력 스키마:
{
"channel": {"type": "string", "required": true},
"level": {"type": "string", "enum": ["info","warn","critical"]},
"message": {"type": "string", "required": true},
"details": {"type": "object"}
}
내부는 IF 분기 — level=critical 이면 Slack + SMS + Email 모두, warn 이면 Slack + Email, info 면 Slack 만. 5 워크플로는 Execute Workflow 노드 하나로 호출 — channel·level·message 만 채워서.
알림 채널이 바뀌어도 (예: Slack → Discord) Sub-Workflow 1 곳만 수정. 17편 Error Workflow 와 결합하면 운영 안정성이 한 단계 올라간다. 20편 Self-host 의 백업·credentials 까지 끝나면 production 완성.
다음 글
n8n 교재 20편 — Self-host 배포. Queue mode · 백업 · Credentials 관리 · Reverse Proxy 로 production 배포 마지막 단계.