G: 자동화 워크플로우를 만들다 보면, 단순히 선형적인 흐름으로는 해결하기 어려운 복잡한 시나리오에 직면하게 됩니다. 특정 조건에 따라 다른 작업을 수행하거나, 여러 가지 경우의 수에 맞춰 워크플로우를 분기해야 할 때가 바로 그때죠! 🤯
이러한 상황에서 n8n 워크플로우에 날개를 달아주는 핵심 노드가 바로 Switch 노드입니다. 오늘은 n8n Switch 노드가 무엇인지, 왜 중요한지, 그리고 어떻게 활용하여 복잡한 워크플로우를 마스터할 수 있는지 자세히 알아보겠습니다! ✨
1. n8n Switch 노드란 무엇인가요? 🤔
n8n Switch 노드는 마치 교통 정리원과 같습니다. 🚦 특정 입력 값을 평가하여, 그 값에 따라 데이터를 미리 정의된 여러 경로 중 하나로 보내는 역할을 합니다. 즉, 하나의 입력에서 시작하여 여러 개의 다른 결과 경로로 워크플로우를 분기시키는 조건부 라우팅(Conditional Routing)의 핵심 노드라고 할 수 있습니다.
단순한 ‘만약 ~이라면 ~하고, 그렇지 않다면 ~한다’는 If 노드의 역할을 넘어, ‘만약 A라면 X를, B라면 Y를, C라면 Z를 한다’와 같이 여러 개의 조건과 결과 경로를 처리할 수 있게 해줍니다.
2. Switch 노드, 왜 중요할까요? ✨
Switch 노드는 워크플로우의 유연성과 복잡성을 크게 향상시켜주기 때문에 매우 중요합니다.
- 동적 워크플로우 구축: 실생활 시나리오는 대부분 선형적이지 않습니다. 고객의 주문 상태, 결제 금액, 문의 유형 등 다양한 변수에 따라 다른 액션이 필요하죠. Switch 노드는 이러한 동적인 요구 사항을 충족시킵니다.
- 워크플로우 가독성 향상: 여러 개의 If 노드를 중첩하여 사용하는 것보다 Switch 노드 하나로 깔끔하게 조건을 정리할 수 있어, 워크플로우의 가독성과 유지보수성이 크게 향상됩니다.
- 확장성 증대: 새로운 조건이 추가되어도 기존 워크플로우의 큰 변경 없이 Switch 노드에 새로운 케이스(Case)만 추가하면 되므로, 워크플로우의 확장성이 뛰어납니다.
- 오류 처리 및 예외 상황 관리: 어떤 조건에도 해당하지 않을 때 실행될 ‘기본 출력(Default Output)’을 설정하여 예외 상황을 효과적으로 처리할 수 있습니다.
3. Switch 노드 설정, 하나씩 살펴보기 🛠️
Switch 노드를 효과적으로 사용하기 위해 주요 설정들을 자세히 살펴보겠습니다.
(실제 n8n Switch 노드 스크린샷을 상상하며 봐주세요!)
3.1. Value (값)
- 설명: Switch 노드가 평가할 입력 값입니다. 일반적으로 이전 노드에서 전달받은 데이터의 특정 필드를 지정합니다.
- 예시:
{{ $json.orderStatus }}
: 이전 노드에서 받은 JSON 데이터 중orderStatus
필드의 값.{{ $json.totalAmount }}
:totalAmount
필드의 값.{{ $json.userRole }}
: 사용자 역할 필드의 값.{{ (new Date()).getDay() }}
: 현재 요일을 숫자로 가져오는 JavaScript 표현식 (일요일:0, 월요일:1, …, 토요일:6).
3.2. Conditions (조건)
- 설명: ‘Value’가 어떤 상태일 때 해당 경로로 분기할지 정의하는 규칙입니다.
- 주요 조건 유형:
- Equals (같음): 값이 정확히 일치할 때. (가장 흔하게 사용)
- Not Equals (같지 않음): 값이 일치하지 않을 때.
- Contains (포함): 값이 특정 문자열을 포함할 때.
- Starts With (시작): 값이 특정 문자열로 시작할 때.
- Ends With (끝): 값이 특정 문자열로 끝날 때.
- Greater Than (보다 큼): 값이 특정 숫자보다 클 때.
- Less Than (보다 작음): 값이 특정 숫자보다 작을 때.
- Is Empty (비어 있음): 값이 비어 있거나
null
일 때. - Is Not Empty (비어 있지 않음): 값이 비어 있지 않을 때.
- Regex (정규식): 복잡한 패턴 매칭이 필요할 때 사용합니다. (고급)
3.3. Case (케이스)
- 설명: ‘Value’가 ‘Condition’에 의해 평가될 때, 실제 비교할 값입니다. 이 ‘Case’에 따라 워크플로우가 분기되는 아웃풋(Output) 포트가 생성됩니다.
- 예시:
- Condition:
Equals
, Case:Shipped
(Value가 ‘Shipped’와 같을 때) - Condition:
Greater Than
, Case:100000
(Value가 100000보다 클 때)
- Condition:
3.4. Type (타입) ❗가장 중요❗
- 설명: ‘Value’와 ‘Case’를 비교할 때, 어떤 데이터 타입으로 비교할지를 지정합니다. 이 설정을 잘못하면 의도치 않은 결과가 나올 수 있으니 주의해야 합니다.
- 주요 타입:
- String (문자열): 텍스트를 비교할 때 사용합니다. (예: “Seoul”, “pending”)
- Number (숫자): 숫자를 비교할 때 사용합니다. (예: 100, 50000)
- Boolean (논리값):
true
또는false
를 비교할 때 사용합니다. - Date (날짜): 날짜 값을 비교할 때 사용합니다.
- 예시 (타입 오류 방지):
Value
가{{ $json.totalAmount }}
이고 값이10000
일 때,Type: Number
,Condition: Greater Than
,Case: 5000
=>true
(정상)Type: String
,Condition: Greater Than
,Case: "5000"
=>false
(문자열 “10000”이 문자열 “5000”보다 크지 않다고 판단될 수 있음, 또는 알파벳 순서로 비교될 수 있음)
3.5. Fall Through (폴 스루)
- 설명: 특정 케이스가 일치했을 때, 해당 아웃풋으로만 데이터를 보내는 것이 아니라, 그 다음 케이스들도 계속 평가하도록 하는 고급 설정입니다.
- 주의: 일반적인 조건부 분기에는 잘 사용되지 않으며, 특정 워크플로우 패턴에서만 유용합니다. 처음에는 이 기능을 비활성화한 상태로 사용하는 것을 권장합니다.
3.6. Default Output (기본 출력)
- 설명: 모든 정의된 ‘Case’ 조건에 해당하지 않을 경우, 데이터가 전송되는 경로입니다.
- 활용: 예외 처리, 오류 로깅, 혹은 ‘기타’ 상황을 처리하는 데 매우 유용합니다. 항상 설정해두는 것이 좋습니다.
4. Switch 노드 활용 예시 (실전 가이드) 💡
실제 시나리오에서 Switch 노드가 어떻게 활용될 수 있는지 다양한 예시를 통해 알아보겠습니다.
예시 1: 주문 상태별 워크플로우 분기 📦
- 시나리오: 전자상거래 시스템에서 새로운 주문이 들어왔을 때, 주문 상태에 따라 다른 후속 조치를 취하고 싶습니다.
- 워크플로우 흐름:
- Webhook Node: 새로운 주문 데이터 수신.
- Switch Node:
orderStatus
값을 평가.- Value:
{{ $json.orderStatus }}
- Type:
String
- Cases:
- Case 1 (Output 0): Condition
Equals
, CasePending
(결제 대기 중)- ➡️ 고객에게 “결제 대기 중” 알림 이메일 발송 📧
- Case 2 (Output 1): Condition
Equals
, CaseShipped
(배송 중)- ➡️ 고객에게 “배송 시작” 알림톡 발송 💬, 송장 번호 안내
- Case 3 (Output 2): Condition
Equals
, CaseCancelled
(주문 취소)- ➡️ 고객에게 “주문 취소 및 환불 안내” 이메일 발송 📨, 재고 복구 로직 실행
- Default Output (Output 3): 그 외 모든 상태
- ➡️ 내부 관리자에게 알림 (Slack 등), 오류 로깅 🚨
- Case 1 (Output 0): Condition
- Value:
예시 2: 결제 금액에 따른 할인 적용 여부 💰
- 시나리오: 결제 금액에 따라 다른 할인율을 적용하거나, 특정 금액 이상 구매 시 VIP 고객으로 분류하고 싶습니다.
- 워크플로우 흐름:
- Webhook Node: 결제 완료 데이터 수신 (결제 금액 포함).
- Switch Node:
purchaseAmount
값을 평가.- Value:
{{ $json.purchaseAmount }}
- Type:
Number
❗ (가장 중요!) - Cases (순서가 중요합니다! 큰 금액부터 작은 금액 순으로):
- Case 1 (Output 0): Condition
Greater Than
, Case100000
(10만원 초과)- ➡️ “프리미엄 고객” 그룹에 추가, 10% 할인 쿠폰 자동 발송 🎁
- Case 2 (Output 1): Condition
Greater Than
, Case50000
(5만원 초과)- ➡️ 5% 할인 쿠폰 자동 발송 🎫
- Default Output (Output 2): 그 외 모든 금액 (5만원 이하)
- ➡️ 일반 구매 완료 알림 발송 😊
- Case 1 (Output 0): Condition
- Value:
예시 3: 문의 유형별 고객 응대 자동화 📞
- 시나리오: 고객 지원 채널로 들어오는 문의를 유형별로 분류하여 담당 팀에 배정하고, 초기 응대 메시지를 자동화하고 싶습니다.
- 워크플로우 흐름:
- Webhook Node: 고객 문의 데이터 수신 (문의 유형 필드 포함).
- Switch Node:
inquiryType
값을 평가.- Value:
{{ $json.inquiryType }}
- Type:
String
- Cases:
- Case 1 (Output 0): Condition
Equals
, CaseTechnical Support
(기술 지원)- ➡️ 기술팀 Slack 채널에 알림, 고객에게 “기술팀이 곧 연락드릴 예정입니다” 자동 회신 🧑💻
- Case 2 (Output 1): Condition
Equals
, CaseBilling Issue
(결제/청구 문제)- ➡️ 회계팀 이메일로 전달, 고객에게 “결제 관련 문의가 접수되었습니다” 자동 회신 💰
- Case 3 (Output 2): Condition
Equals
, CaseGeneral Question
(일반 문의)- ➡️ FAQ 링크가 포함된 자동 회신 이메일 발송, 일반 CS 팀에 배정 🙋♀️
- Default Output (Output 3): 알 수 없는 문의 유형
- ➡️ 운영팀에 수동 확인 요청 알림, 고객에게 “정확한 문의 유형을 선택해주세요” 안내 🧐
- Case 1 (Output 0): Condition
- Value:
예시 4: 요일별 스케줄링 📅
- 시나리오: 주중(월~금)에는 특정 마케팅 보고서를 발송하고, 주말(토,일)에는 데이터베이스 백업을 실행하고 싶습니다.
- 워크플로우 흐름:
- Cron Node: 매일 특정 시간에 워크플로우 실행.
- Switch Node: 현재 요일을 평가.
- Value:
{{ (new Date()).getDay() }}
(JavaScript 표현식으로 현재 요일을 숫자로 가져옴)- 참고: 일요일=0, 월요일=1, …, 토요일=6
- Type:
Number
- Cases:
- Case 1 (Output 0): Condition
Equals
, Case(일요일)
- ➡️ 데이터베이스 백업 실행 노드로 연결 💾
- Case 2 (Output 1): Condition
Equals
, Case6
(토요일)- ➡️ 데이터베이스 백업 실행 노드로 연결 💾
- Default Output (Output 2): 그 외 모든 요일 (월~금)
- ➡️ 마케팅 보고서 생성 및 발송 노드로 연결 📈
- Case 1 (Output 0): Condition
- Value:
5. Switch 노드 사용 시 꿀팁 & 주의사항 📌
- 데이터 타입 일치 확인 (강조 또 강조!):
Type
설정은 정말 중요합니다. 숫자를 문자열로 비교하거나, 문자열을 숫자로 비교하면 예상치 못한 결과가 나옵니다. 항상 Value의 실제 데이터 타입과Type
설정을 일치시키세요.- 예: “100” (문자열)과 100 (숫자)은 다릅니다.
- 조건의 순서: 숫자 범위(
Greater Than
,Less Than
)를 사용하는 경우, 가장 구체적인 (또는 가장 큰/작은) 조건부터 먼저 평가하도록 Case의 순서를 위에서 아래로 정렬하는 것이 중요합니다. 위에서 아래로 순서대로 평가되기 때문입니다.> 100000
이 먼저, 그 다음> 50000
이 와야 합니다.
- 기본 출력(Default Output) 활용: 예상치 못한 값이나 조건에 맞지 않는 값이 들어왔을 때를 대비하여 Default Output을 항상 연결해두는 것이 좋습니다. 이를 통해 오류를 방지하고 예외 상황을 처리할 수 있습니다.
- 표현식(Expression) 활용: Switch 노드의 Value 필드에서는 JavaScript 표현식을 자유롭게 사용할 수 있습니다. 복잡한 로직이 필요할 경우 이를 적극적으로 활용하세요. (예:
{{ $json.itemCount > 5 ? 'Bulk' : 'Single' }}
와 같이 If 논리를 Value 자체에서 처리하는 것도 가능) - 워크플로우 테스트: Switch 노드를 포함한 워크플로우는 다양한 입력값에 대해 철저하게 테스트해야 합니다. 각 조건이 올바르게 작동하는지, 그리고 Default Output으로 빠지는 경우까지 모두 확인하세요.
- 가독성 유지: 각 Case의 이름(Output 포트)을 해당 조건에 맞춰 명확하게 설정하면 워크플로우의 가독성을 높일 수 있습니다. (예: “결제대기”, “배송완료”)
6. If 노드 vs. Switch 노드: 언제 무엇을 쓸까요? 🤔
n8n에는 Switch 노드 외에 If 노드도 있습니다. 둘 다 조건부 분기를 담당하지만, 사용 목적이 다릅니다.
-
If 노드:
- 목적: 단순히 두 가지 경로로만 분기할 때 (참/거짓, 예/아니오).
- 예시: “이메일 주소가 유효한가?” (유효하면 전송, 아니면 로깅)
- 비유: 갈림길에서 왼쪽으로 갈지 오른쪽으로 갈지 결정하는 것 👈👉
-
Switch 노드:
- 목적: 세 가지 이상의 여러 경로로 분기할 때. 특정 값에 따라 다수의 고유한 액션이 필요할 때.
- 예시: “주문 상태가 무엇인가?” (대기, 처리 중, 배송 완료, 취소 등 여러 경우)
- 비유: 원형 교차로에서 여러 출구 중 하나를 선택하는 것 🔄
간단히 말해, 선택지가 2개라면 If 노드, 3개 이상이라면 Switch 노드를 고려하세요!
결론 🎉
n8n Switch 노드는 복잡한 자동화 워크플로우를 구축하는 데 있어 없어서는 안 될 핵심 도구입니다. 이 노드를 마스터하면 여러분의 n8n 워크플로우는 훨씬 더 강력하고, 유연하며, 지능적으로 변모할 것입니다.
오늘 배운 내용들을 바탕으로 직접 n8n 워크플로우에 Switch 노드를 적용해보세요! 처음에는 어렵게 느껴질 수 있지만, 몇 번 연습하다 보면 여러분의 자동화 스킬이 한 단계 더 성장한 것을 느낄 수 있을 것입니다. 🚀 Happy Automating!