IF · Switch 조건 분기
모든 워크플로는 결국 "조건 따라 다르게 처리" 가 필요합니다. n8n 의 분기는 두 종류 — 단순 양자택일(IF), 다중 분기(Switch).
Ch.11 의 RSS 워크플로에서 "어제 이후 글만" 같은 조건이 등장했죠. 그게 IF 노드의 영역. 더 복잡한 케이스 — VIP/일반/신규 회원별로 다른 메시지 — 는 Switch 의 영역.
IF — 둘로 갈라지는 가장 단순한 분기

IF 노드 출력은 항상 두 갈래 — true 와 false. 각 갈래에 다른 후속 노드를 붙입니다.
이 IF 노드는 "금액이 10,000 보다 크면 true" 분기. true 출력으로 VIP 처리, false 로 일반 처리.
흔히 쓰는 조건 8가지
| Operation | 의미 | 예 |
|---|---|---|
| equal | 정확히 같음 | status = "active" |
| contains | 문자열 포함 | email contains "@gmail" |
| starts with | 시작 글자 | phone starts with "010" |
| larger / smaller | 크다 / 작다 | amount > 10000 |
| is empty | 빈 값 | email is empty |
| regex | 정규식 매칭 | id matches /^USR-\d+$/ |
| before / after | 날짜 비교 | createdAt before $now.minus({days:7}) |
| length larger | 배열·문자열 길이 | items.length > 5 |
여러 조건 묶기 — AND / OR
한 IF 노드에 조건 여러 개 추가 가능. 묶음 모드 선택:
amount > 10000 AND country = "KR")OR — 하나라도 만족 시 true (예:
role = "admin" OR plan = "enterprise")복잡해지면 IF 안에 또 IF 를 중첩하기보단 Switch 가 깔끔.
Switch — 다중 분기 (3가지 이상)
회원 등급 4개 (VIP/Pro/Free/Trial) 각각 다른 처리? IF 중첩은 지저분. Switch 한 노드로 깔끔.
각 Output 에 다른 노드 연결. 예: VIP → 전담 매니저 Slack, Pro → 자동 메일, Free → 마케팅 메일, Trial → 14일 카운트다운.
실수 패턴 + 디버깅
API 가 보낸
"10000"(문자열) 인데 IF 에서 larger 10000(숫자) 비교 → 항상 false. ={{ Number($json.amount) }} 로 강제 변환 또는 IF Operation 을 "equal" 로 변경.Switch 에 "어디에도 안 맞으면" Fallback 출력 미설정 → 그 item 은 그냥 사라짐. 워크플로 결과가 빠진 채 끝남. 항상 Fallback 출력 연결 권장 (실패 알림 등).
실전 — 다중 채널 알림 라우팅
실무에서 가장 자주 만나는 Switch 패턴 — 이벤트 타입별로 다른 채널에 알림. 결제 알림은 영업 Slack, 에러는 개발 Slack, 가입은 그로스 Slack 으로.
이 패턴 하나로 한 워크플로 안에서 3-4 채널 운영. 워크플로를 4개 따로 만들 필요 없고, 새 이벤트 타입 추가 시 Switch 에 Output 하나 추가만 하면 됨. 확장이 쉬워서 운영 안정성 ↑.
또 IF/Switch 의 출력은 일반 데이터 그대로 통과 — 변환·가공이 일어나지 않습니다. 분기 후 각 갈래의 Set 노드에서 채널별 메시지를 다르게 조립하는 게 일반 패턴.
다음 Ch.13 — Code 노드. IF·Switch 로 부족한 복잡한 로직 (정규식 변환, 다단계 가공) 을 JavaScript 로 직접 작성하는 패턴.