n8n 서브 워크플로우 설계 : 모듈화와 재사용

목차

    n8n 서브 워크플로우 설계 : 모듈화와 재사용

    노드 100개짜리 워크플로우, 어디서 에러났는지 찾으시나요?

    서브 워크플로우로 쪼개면 한 눈에 보입니다. 한 번 만들면 어디서든 재사용까지.

    이 글을 다 읽으면 복잡한 워크플로우를 깔끔하게 모듈화할 수 있습니다.

    ① n8n 서브 워크플로우란 — 프로그래밍의 함수처럼

    🎭 왜왜씨와 딱딱씨의 대화
    🤔
    왜왜씨

    워크플로우 노드가 너무 많아서 복잡해요...

    🎯
    딱딱씨

    서브 워크플로우로 분리해! 반복되는 로직을 하나의 모듈로 만들고, 필요할 때 호출하는 거야.

    🤔
    왜왜씨

    프로그래밍의 함수 같은 건가요?

    🎯
    딱딱씨

    딱 맞아! 입력받고, 처리하고, 결과를 반환하는 재사용 가능한 단위라고 생각하면 돼.

    서브 워크플로우 개념

    구분 메인 워크플로우 서브 워크플로우
    역할 전체 흐름 제어 특정 기능 담당
    트리거 Schedule, Webhook 등 Execute Workflow로 호출
    재사용 단독 실행 여러 곳에서 호출 가능
    핵심 개념

    서브 워크플로우 = 재사용 가능한 워크플로우 모듈
    메인 워크플로우에서 Execute Workflow 노드로 호출합니다.

    ② n8n 서브 워크플로우 분리 타이밍 — 3번 반복되면

    서브 워크플로우가 필요한 경우

    • 반복되는 로직 - 여러 워크플로우에서 같은 처리가 필요할 때
    • 복잡한 워크플로우 - 노드가 50개 이상으로 관리가 어려울 때
    • 팀 협업 - 기능별로 담당자를 나누어 개발할 때
    • 에러 격리 - 특정 기능의 에러가 전체에 영향 주지 않도록

    서브 워크플로우 후보 예시

    기능 설명
    알림 발송 Slack, Email, SMS 통합 알림
    데이터 변환 특정 포맷으로 데이터 정규화
    AI 분석 GPT/Claude 호출 및 결과 파싱
    파일 처리 업로드, 다운로드, 변환 로직

    3번 이상 반복되는 로직이 있다면 서브 워크플로우로 분리하세요!

    ③ n8n 서브 워크플로우 만들기 — 5분이면 끝

    Step 1: 서브 워크플로우 생성

    1. 새 워크플로우 생성
    2. Execute Workflow Trigger 노드 추가 (시작점)
    3. 처리 로직 구현
    4. 워크플로우 저장 및 활성화

    Step 2: 메인에서 호출

    // Execute Workflow 노드 설정
    Source: Database (워크플로우 선택)
    Workflow: "알림 발송 모듈"
    Mode:
      - "Wait for Sub-Workflow Completion" (결과 대기)
      - "Don't Wait" (비동기 실행)
    

    Execute Workflow Trigger 설정

    // 서브 워크플로우의 시작 노드
    // 별도 설정 없이 추가하면 됨
    // 전달받은 데이터는 $json으로 접근
    
    // 예: 전달받은 메시지
    {{ $json.message }}
    {{ $json.recipient }}
    

    💡 알림 모듈 서브 워크플로우

    🔗 Execute Workflow Trigger
    입력: message, channel
    🔀 Switch
    채널별 분기
    slack
    💬 Slack
    email
    📧 Email
    sms
    📱 SMS
    📝 Set
    결과 반환

    ④ 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 - 결과 대기 여부 선택
    모듈화 - 재사용성, 유지보수성 향상

    3초 선택 가이드

    반복 로직? → 서브 워크플로우로 분리
    결과 필요? → Wait for Completion 모드
    비동기 실행? → Don't Wait 모드
    네이밍? → [SUB] 기능명 규칙

    다음 글 예고

    👉 n8n AI Agent 구축하기 : LLM + Tool로 자율 자동화


    서브 워크플로우로 깔끔하고 확장 가능한 자동화를 구축하세요.
    한 번 만들어두면 어디서든 재사용!

    댓글

    이 블로그의 인기 게시물

    n8n으로 업무 자동화 시작하기 : 왜 필요하고 어떻게 활용할까?

    n8n 데이터 처리 노드 : Set, Split, Merge 완벽 정리

    n8n 트리거 노드 : 3가지 유형으로 자동화 시작하기