금. 8월 15th, 2025

G: 자동화는 현대 비즈니스와 개인 생산성의 필수 요소가 되었습니다. 하지만 모든 작업이 항상 일률적일 수는 없죠! 🤖 때로는 특정 조건에 따라 다르게 작동해야 하는 똑똑한 워크플로우가 필요합니다. 여기서 n8n의 “If” 노드가 빛을 발합니다. ✨

n8n의 If 노드는 워크플로우에 조건부 로직을 추가하여 데이터를 기반으로 경로를 분기시킬 수 있게 해주는 핵심 도구입니다. 이 글에서는 If 노드의 기본부터 고급 활용법까지 완벽하게 분석하고, 10가지 실전 예시를 통해 여러분의 n8n 워크플로우를 한 단계 업그레이드할 수 있도록 도와드리겠습니다! 🚀


💡 1. n8n If 노드란 무엇인가요?

n8n의 If 노드는 들어오는 데이터를 검사하고, 설정된 조건에 따라 워크플로우의 흐름을 True 또는 False 두 갈래로 분기시키는 역할을 합니다. 마치 교통 신호등처럼, 특정 조건이 맞으면 한 방향으로, 그렇지 않으면 다른 방향으로 안내하는 것이죠.

주요 구성 요소:

  • Value 1 (값 1): 비교할 첫 번째 값입니다. 주로 이전 노드에서 넘어온 데이터 ({{ $json.propertyName }} 형태)를 사용합니다.
  • Operation (연산자): Value 1과 Value 2를 어떻게 비교할지 결정합니다. (예: equals, not equals, contains, greater than, is empty 등)
  • Value 2 (값 2): 비교할 두 번째 값입니다. 고정된 값(문자열, 숫자)이 될 수도 있고, 다른 데이터나 표현식(Expression)이 될 수도 있습니다.
  • Mode (모드): 여러 개의 조건을 추가했을 때, 모든 조건이 참이어야 하는지(All True), 하나라도 참이면 되는지(Any True)를 설정합니다.

If 노드는 설정된 조건이 참(True)이면 워크플로우를 True 출력 포트로 연결하고, 거짓(False)이면 False 출력 포트로 연결합니다. 이를 통해 훨씬 유연하고 동적인 자동화를 구현할 수 있습니다.


🔑 2. If 노드 마스터를 위한 핵심 개념

If 노드를 효과적으로 사용하려면 몇 가지 중요한 개념을 이해해야 합니다.

2.1. 데이터 타입의 이해 (Data Types)

n8n에서 데이터는 다양한 타입으로 존재합니다. If 노드로 비교할 때 이 데이터 타입을 정확히 아는 것이 매우 중요합니다.

  • String (문자열): “Hello World”, “123”, “이메일 주소” 등 텍스트 형식의 데이터.
  • Number (숫자): 10, 3.14, -5 등 숫자 형식의 데이터. (예: 문자열 “123”과 숫자 123은 다릅니다!)
  • Boolean (논리값): true 또는 false 두 가지 값만 가집니다. 조건부 표현식의 결과로 자주 사용됩니다.
  • Array (배열): [1, 2, 3], ["apple", "banana"] 와 같이 여러 개의 값이 순서대로 나열된 집합.
  • Object (객체): {"name": "Alice", "age": 30} 와 같이 키-값 쌍으로 이루어진 데이터 구조.

팁: If 노드에서 Value 2를 입력할 때, 오른쪽에 드롭다운 메뉴를 클릭하여 Input Data (텍스트, 숫자 등) 또는 Expression (표현식)을 선택할 수 있습니다. 숫자를 비교할 때는 반드시 Input DataNumber 타입을 선택해야 합니다.

2.2. 다양한 연산자 (Operations) 활용

If 노드는 다양한 연산자를 제공하여 복잡한 비교를 가능하게 합니다.

  • equals: 두 값이 정확히 같음
  • not equals: 두 값이 다름
  • contains: Value 1이 Value 2를 포함함 (문자열, 배열)
  • not contains: Value 1이 Value 2를 포함하지 않음
  • starts with: Value 1이 Value 2로 시작함 (문자열)
  • ends with: Value 1이 Value 2로 끝남 (문자열)
  • greater than: Value 1이 Value 2보다 큼 (숫자, 날짜)
  • less than: Value 1이 Value 2보다 작음 (숫자, 날짜)
  • is empty: Value 1이 비어있음 (문자열 “”, 배열 [], 객체 {})
  • is not empty: Value 1이 비어있지 않음
  • is null: Value 1이 null 또는 undefined
  • is not null: Value 1이 null 또는 undefined가 아님
  • regex: 정규 표현식을 사용하여 패턴 매칭 (고급)

2.3. 강력한 Expression (표현식) 활용 🧠

{{ }} 중괄호 안에 들어가는 표현식은 n8n의 If 노드를 진정으로 강력하게 만드는 요소입니다. JavaScript 문법을 기반으로 하며, 다음과 같은 작업이 가능합니다.

  • 중첩된 데이터 접근: {{ $json.customer.address.city }}
  • 데이터 조작: {{ $json.name.toLowerCase() }}, {{ $json.price * 1.1 }}
  • 배열 메서드 사용: {{ $json.roles.includes('admin') }} (배열에 ‘admin’이 포함되어 있는지 확인)
  • 조건 결합: {{ $json.status === 'active' && $json.amount > 100 }} (이런 복합 조건은 If 노드의 “Add Condition”으로도 가능하지만, 표현식 내에서도 가능합니다.)
  • 날짜/시간 조작: {{ DateTime.fromISO($json.orderDate).plus({ days: 7 }).toISODate() }}

팁: n8n 표현식 편집기에서 $를 입력하면 현재 워크플로우에서 사용 가능한 변수와 함수 목록이 나타납니다.

2.4. 다중 조건 (AND/OR 로직)

If 노드는 여러 조건을 동시에 평가할 수 있도록 “Add Condition” 기능을 제공합니다.

  • Mode: All True (AND 로직): 추가된 모든 조건이 참이어야 True 출력이 활성화됩니다. (예: 나이가 18세 이상 AND 국적이 한국)
  • Mode: Any True (OR 로직): 추가된 조건 중 하나라도 참이면 True 출력이 활성화됩니다. (예: 이메일 제목에 "긴급" 포함 OR 보낸 사람이 "vip@example.com")

🧪 3. 10가지 실전 예시로 배우는 If 노드 활용법

이제 실제 워크플로우에서 If 노드를 어떻게 활용할 수 있는지 10가지 예시를 통해 살펴보겠습니다. 각 예시마다 시나리오, 설정 방법, 예상 결과 및 팁을 제공합니다.

예시 1: 📧 간단한 텍스트 일치 여부 확인 (Simple Text Match)

  • 시나리오: 특정 키워드가 포함된 이메일만 처리하고 싶을 때.
  • 목표: 이메일 제목에 “중요”라는 단어가 포함되어 있는지 확인합니다.
  • If 노드 설정:
    • Value 1: {{ $json.subject }} (이메일 제목을 가져옵니다.)
    • Operation: contains
    • Value 2: 중요 (Input Data – String)
  • 예상 결과: 제목이 “주간 보고서 (중요)”인 이메일은 True로, “일반 알림”은 False로 분기됩니다.

예시 2: 💰 숫자 값 비교 (Numerical Comparison)

  • 시나리오: 특정 금액 이상의 주문에만 할인 쿠폰을 발송하고 싶을 때.
  • 목표: 주문 금액이 50,000원을 초과하는지 확인합니다.
  • If 노드 설정:
    • Value 1: {{ $json.orderAmount }} (주문 금액 데이터를 가져옵니다.)
    • Operation: greater than
    • Value 2: 50000 (Input Data – Number)
  • 예상 결과: 주문 금액이 60000원인 경우 True로, 45000원인 경우 False로 분기됩니다.

예시 3: ✅ 특정 값이 존재하는지 확인 (Check for Value Existence)

  • 시나리오: 사용자 프로필에서 ‘전화번호’ 필드가 비어있지 않은 경우에만 SMS를 발송하고 싶을 때.
  • 목표: phoneNumber 필드가 값이 있는지(비어있지 않은지) 확인합니다.
  • If 노드 설정:
    • Value 1: {{ $json.phoneNumber }}
    • Operation: is not empty
  • 예상 결과: phoneNumber가 “010-1234-5678″이면 True로, "" (빈 문자열)이면 False로 분기됩니다. is null도 유사하게 사용할 수 있습니다.

예시 4: 🗓️ 날짜 범위 확인 (Date Range Check)

  • 시나리오: 특정 기간 내에 가입한 신규 회원에게만 웰컴 이메일을 보내고 싶을 때.
  • 목표: 가입일 (registrationDate)이 지난 7일 이내인지 확인합니다.
  • If 노드 설정: (두 가지 조건이 필요하며, DateTime 라이브러리 사용)
    • Mode: All True
    • Condition 1:
      • Value 1: {{ DateTime.fromISO($json.registrationDate).toMillis() }} (가입일을 밀리초로 변환)
      • Operation: greater than or equals
      • Value 2: {{ DateTime.now().minus({ days: 7 }).toMillis() }} (7일 전의 시간을 밀리초로 변환)
    • Condition 2:
      • Value 1: {{ DateTime.fromISO($json.registrationDate).toMillis() }}
      • Operation: less than or equals
      • Value 2: {{ DateTime.now().toMillis() }} (현재 시간을 밀리초로 변환)
  • 예상 결과: 가입일이 오늘로부터 7일 전 ~ 오늘 사이인 경우 True로, 그 외의 경우 False로 분기됩니다.
    • 팁: DateTime 객체는 날짜/시간 처리를 위한 강력한 도구입니다. ISO 8601 형식(YYYY-MM-DDTHH:mm:ssZ)으로 된 날짜를 fromISO()로 변환하여 사용하세요.

예시 5: 📋 배열에 특정 요소 포함 여부 (Array Contains Specific Element)

  • 시나리오: 사용자에게 여러 역할이 부여될 수 있을 때, ‘admin’ 역할을 가진 사용자에게만 특정 관리자 페이지 접근 권한을 부여하고 싶을 때.
  • 목표: userRoles 배열에 ‘admin’ 문자열이 포함되어 있는지 확인합니다.
  • If 노드 설정:
    • Value 1: {{ $json.userRoles.includes('admin') }} (Expression)
      • 설명: userRoles 배열에 ‘admin’이라는 값이 포함되어 있으면 true, 없으면 false를 반환하는 JavaScript 표현식입니다.
    • Operation: equals
    • Value 2: true (Input Data – Boolean)
  • 예상 결과: userRoles["user", "admin", "viewer"]인 경우 True로, ["user", "viewer"]인 경우 False로 분기됩니다.

예시 6: 🤝 여러 조건 동시 만족 (AND 로직)

  • 시나리오: 주문 상태가 ‘pending’이면서 동시에 주문 금액이 100,000원 이상인 경우에만 관리자에게 알림을 보내고 싶을 때.
  • 목표: 주문 상태와 금액을 동시에 확인합니다.
  • If 노드 설정:
    • Mode: All True
    • Condition 1:
      • Value 1: {{ $json.status }}
      • Operation: equals
      • Value 2: pending (String)
    • Condition 2:
      • Value 1: {{ $json.amount }}
      • Operation: greater than or equals
      • Value 2: 100000 (Number)
  • 예상 결과: 상태가 ‘pending’이고 금액이 120000원인 주문은 True로, 상태는 ‘pending’이지만 금액이 50000원인 주문은 False로 분기됩니다.

예시 7: ✌️ 여러 조건 중 하나라도 만족 (OR 로직)

  • 시나리오: 특정 부서(영업 또는 마케팅)에 속한 직원에게만 공지 메일을 발송하고 싶을 때.
  • 목표: 직원의 부서가 ‘영업’이거나 ‘마케팅’인지 확인합니다.
  • If 노드 설정:
    • Mode: Any True
    • Condition 1:
      • Value 1: {{ $json.department }}
      • Operation: equals
      • Value 2: 영업 (String)
    • Condition 2:
      • Value 1: {{ $json.department }}
      • Operation: equals
      • Value 2: 마케팅 (String)
  • 예상 결과: 부서가 ‘영업’인 직원은 True로, 부서가 ‘개발’인 직원은 False로 분기됩니다.

예시 8: 🏘️ 중첩된 데이터 접근 및 비교 (Accessing Nested Data)

  • 시나리오: 고객 데이터에서 특정 도시(예: 서울)에 거주하는 고객에게만 특별 프로모션을 제공하고 싶을 때.
  • 목표: customer.address.city 필드의 값을 확인합니다.
  • If 노드 설정:
    • Value 1: {{ $json.customer.address.city }} (중첩된 객체 경로를 정확히 지정)
    • Operation: equals
    • Value 2: 서울 (String)
  • 예상 결과: 고객의 주소가 {"city": "서울"}이면 True로, {"city": "부산"}이면 False로 분기됩니다.

예시 9: 🔡 대소문자 구분 없이 텍스트 비교 (Case-Insensitive Text Comparison)

  • 시나리오: 사용자 입력(예: 제품명)이 대소문자 관계없이 특정 값과 일치하는지 확인하고 싶을 때.
  • 목표: productName을 소문자로 변환하여 ‘apple’과 비교합니다.
  • If 노드 설정:
    • Value 1: {{ $json.productName.toLowerCase() }} (Expression: 들어오는 문자열을 모두 소문자로 변환)
    • Operation: equals
    • Value 2: apple (String)
  • 예상 결과: productName이 “Apple”, “APPLE”, “apple” 모두 True로 분기됩니다.

예시 10: 🔎 정규 표현식을 사용한 고급 매칭 (Advanced Matching with Regular Expressions)

  • 시나리오: 이메일 주소나 전화번호 등 특정 패턴을 가진 문자열만 유효하다고 판단하고 싶을 때.
  • 목표: phoneNumber가 ‘XXX-XXXX-XXXX’ 형식의 유효한 전화번호인지 확인합니다.
  • If 노드 설정:
    • Value 1: {{ $json.phoneNumber }}
    • Operation: regex
    • Value 2: ^\d{3}-\d{4}-\d{4}$ (Input Data – String)
      • 설명: 이 정규 표현식은 정확히 숫자 3개, 하이픈, 숫자 4개, 하이픈, 숫자 4개로 이루어진 문자열에 매칭됩니다. (예: 010-1234-5678)
  • 예상 결과: phoneNumber가 “010-1234-5678″이면 True로, “123-4567″이나 “01012345678”이면 False로 분기됩니다.
    • 팁: 정규 표현식은 매우 강력하지만 복잡할 수 있습니다. regex101.com과 같은 도구를 활용하여 테스트해보고 학습하는 것을 추천합니다.

🚀 4. If 노드 사용을 위한 고급 팁 & Best Practice

  • Null, Undefined, Empty String 구분하기:
    • is empty: "" (빈 문자열), [] (빈 배열), {} (빈 객체)에 해당.
    • is null: 값이 아예 없거나 null인 경우. 데이터가 들어오지 않았을 때 주로 사용됩니다.
    • 두 연산자의 차이를 이해하고 적절히 사용하세요.
  • Continue If 노드와의 차이점 이해:
    • If 노드는 워크플로우를 두 갈래(True/False)로 분기합니다.
    • Continue If 노드는 조건을 만족하지 않는 항목을 필터링하여 워크플로우에서 제외시킵니다. 즉, True로만 나가는 단일 출력을 가집니다. 상황에 맞게 적절한 노드를 선택하세요.
  • 디버깅 및 테스트:
    • If 노드 앞에 Set 노드를 두어 들어오는 데이터의 구조를 확인하고, 임의의 데이터를 삽입하여 테스트해볼 수 있습니다.
    • 복잡한 표현식을 사용할 때는 console.log()를 사용하여 Expression 편집기의 콘솔에서 중간 결과를 확인할 수 있습니다.
  • 가독성 유지:
    • 조건이 복잡해질 경우 If 노드의 이름을 명확하게 지정하여 워크플로우의 목적을 쉽게 이해할 수 있도록 하세요. (예: “주문_금액_높음_And_상태_대기”)
    • Add Condition을 사용할 때 All TrueAny True 모드를 신중하게 선택하세요.
  • 성능 고려:
    • 대량의 데이터(수천 개 이상)를 처리할 때, 너무 복잡한 정규 표현식이나 반복적인 Expression 계산은 워크플로우 속도에 영향을 줄 수 있습니다. 필요하다면 데이터 전처리 노드(예: Code 노드)를 사용하여 데이터를 미리 정돈하는 것도 좋습니다.

🌟 결론: 스마트한 워크플로우의 시작

n8n의 If 노드는 단순한 조건문 이상의 의미를 가집니다. 이는 여러분의 자동화 워크플로우에 “지능”과 “유연성”을 부여하는 핵심 도구입니다. 이 글에서 제시된 10가지 예시와 고급 팁들을 통해 If 노드를 자유자재로 다루는 능력을 키우셨기를 바랍니다.

이제 여러분의 워크플로우는 더 이상 획일적이지 않을 것입니다. 데이터의 특성에 따라 다르게 반응하고, 특정 조건에만 알맞은 작업을 수행하는 훨씬 더 스마트하고 효율적인 자동화 시스템을 구축할 수 있게 된 것입니다.

지금 바로 n8n 워크플로우에 If 노드를 추가하여 무한한 가능성을 탐험해보세요! 질문이 있다면 언제든지 n8n 커뮤니티나 공식 문서를 참고하시면 큰 도움이 될 것입니다. 행복한 자동화 생활 되세요! 😊

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다