n8n 서브 워크플로우 설계 : 모듈화와 재사용
목차
노드 100개짜리 워크플로우, 어디서 에러났는지 찾으시나요?
서브 워크플로우로 쪼개면 한 눈에 보입니다. 한 번 만들면 어디서든 재사용까지.
이 글을 다 읽으면 복잡한 워크플로우를 깔끔하게 모듈화할 수 있습니다.
① n8n 서브 워크플로우란 — 프로그래밍의 함수처럼
워크플로우 노드가 너무 많아서 복잡해요...
서브 워크플로우로 분리해! 반복되는 로직을 하나의 모듈로 만들고, 필요할 때 호출하는 거야.
프로그래밍의 함수 같은 건가요?
딱 맞아! 입력받고, 처리하고, 결과를 반환하는 재사용 가능한 단위라고 생각하면 돼.
서브 워크플로우 개념
| 구분 | 메인 워크플로우 | 서브 워크플로우 |
|---|---|---|
| 역할 | 전체 흐름 제어 | 특정 기능 담당 |
| 트리거 | Schedule, Webhook 등 | Execute Workflow로 호출 |
| 재사용 | 단독 실행 | 여러 곳에서 호출 가능 |
서브 워크플로우 = 재사용 가능한 워크플로우 모듈
메인 워크플로우에서 Execute Workflow 노드로 호출합니다.
② n8n 서브 워크플로우 분리 타이밍 — 3번 반복되면
서브 워크플로우가 필요한 경우
- 반복되는 로직 - 여러 워크플로우에서 같은 처리가 필요할 때
- 복잡한 워크플로우 - 노드가 50개 이상으로 관리가 어려울 때
- 팀 협업 - 기능별로 담당자를 나누어 개발할 때
- 에러 격리 - 특정 기능의 에러가 전체에 영향 주지 않도록
서브 워크플로우 후보 예시
| 기능 | 설명 |
|---|---|
| 알림 발송 | Slack, Email, SMS 통합 알림 |
| 데이터 변환 | 특정 포맷으로 데이터 정규화 |
| AI 분석 | GPT/Claude 호출 및 결과 파싱 |
| 파일 처리 | 업로드, 다운로드, 변환 로직 |
3번 이상 반복되는 로직이 있다면 서브 워크플로우로 분리하세요!
③ n8n 서브 워크플로우 만들기 — 5분이면 끝
Step 1: 서브 워크플로우 생성
- 새 워크플로우 생성
- Execute Workflow Trigger 노드 추가 (시작점)
- 처리 로직 구현
- 워크플로우 저장 및 활성화
Step 2: 메인에서 호출
// Execute Workflow 노드 설정 Source: Database (워크플로우 선택) Workflow: "알림 발송 모듈" Mode: - "Wait for Sub-Workflow Completion" (결과 대기) - "Don't Wait" (비동기 실행)
Execute Workflow Trigger 설정
// 서브 워크플로우의 시작 노드
// 별도 설정 없이 추가하면 됨
// 전달받은 데이터는 $json으로 접근
// 예: 전달받은 메시지
{{ $json.message }}
{{ $json.recipient }}
💡 알림 모듈 서브 워크플로우
입력: message, channel
채널별 분기
결과 반환
④ n8n 서브 워크플로우 데이터 전달 — 주고받기
메인 → 서브 (입력)
// Execute Workflow 노드에서 데이터 전달
// 이전 노드의 데이터가 자동으로 전달됨
// 또는 특정 데이터만 전달
{
"message": "{{ $json.alertMessage }}",
"channel": "slack",
"priority": "high"
}
서브 → 메인 (출력)
// 서브 워크플로우 마지막 노드의 출력이 반환됨
// Set 노드로 반환 데이터 정의
// 서브 워크플로우 마지막 Set 노드
{
"success": true,
"sentAt": "{{ $now.toISO() }}",
"messageId": "{{ $json.id }}"
}
// 메인 워크플로우에서 접근
{{ $json.success }}
{{ $json.sentAt }}
"Wait for Completion" 모드에서만 서브 워크플로우의 반환값을 받을 수 있습니다!
⑤ n8n 서브 워크플로우 설계 원칙 — 깔끔하게 정리하기
✅ 권장 사항
- 명확한 네이밍 - [SUB] 알림 발송, [MOD] 데이터 변환
- 단일 책임 - 하나의 기능만 담당
- 입출력 문서화 - 어떤 데이터가 필요하고 무엇을 반환하는지 명시
- 에러 처리 - 서브 워크플로우 내에서 에러 핸들링
네이밍 컨벤션 예시
// 서브 워크플로우 이름 규칙 [SUB] 알림 발송 모듈 [SUB] AI 분석기 [SUB] 데이터 검증 [SUB] 파일 업로드 // 폴더로 그룹화 📁 Sub-workflows ├── [SUB] 알림 발송 ├── [SUB] AI 분석 └── [SUB] 데이터 처리
아키텍처 예시
💡 주문 처리 시스템 구조
[메인] 주문 처리 워크플로우
├── Webhook (주문 수신)
├── [SUB] 재고 확인 ───────────┐
├── [SUB] 결제 처리 ───────────┤ 서브 워크플로우
├── [SUB] 배송 요청 ───────────┤
└── [SUB] 알림 발송 ───────────┘
서브 워크플로우 공식 문서에서 더 자세한 내용을 확인하세요!
Execute Workflow Trigger - 서브 워크플로우 시작
Execute Workflow - 메인에서 서브 호출
Wait Mode - 결과 대기 여부 선택
모듈화 - 재사용성, 유지보수성 향상
반복 로직? → 서브 워크플로우로 분리
결과 필요? → Wait for Completion 모드
비동기 실행? → Don't Wait 모드
네이밍? → [SUB] 기능명 규칙
👉 n8n AI Agent 구축하기 : LLM + Tool로 자율 자동화
서브 워크플로우로 깔끔하고 확장 가능한 자동화를 구축하세요.
한 번 만들어두면 어디서든 재사용!
댓글
댓글 쓰기