토. 8월 16th, 2025

G: 안녕하세요, 자동화와 데이터 처리의 세계에 오신 것을 환영합니다! 🚀

복잡한 데이터를 다루다 보면, 원하는 형식으로 가공하는 것이 여간 까다로운 일이 아닙니다. 특히 여러 시스템 간에 데이터를 주고받을 때, 각 시스템이 요구하는 데이터 형식이 달라서 애를 먹는 경우가 많죠. 이럴 때 n8n의 “Set Node”는 여러분의 워크플로우를 훨씬 유연하고 강력하게 만들어주는 마법의 지팡이가 될 수 있습니다! ✨

Set Node는 n8n에서 데이터의 모양을 자유자재로 조작하는 데 사용되는 핵심 노드입니다. 단순히 값을 추가하는 것을 넘어, 기존 필드의 이름을 바꾸거나, 불필요한 필드를 제거하고, 심지어는 조건에 따라 값을 동적으로 설정하는 등 상상 이상의 일들을 해낼 수 있습니다.

오늘은 Set Node의 기본적인 기능부터 고급 활용법까지, 10가지 실용적인 예시를 통해 마스터하는 시간을 가져보겠습니다. 이 글을 다 읽고 나면, 어떤 복잡한 데이터라도 Set Node 하나로 손쉽게 처리할 수 있게 될 거예요! 💪


💡 n8n Set Node, 대체 뭘 하는 노드인가요?

n8n의 Set Node는 워크플로우에서 전달되는 아이템(Item)의 데이터를 조작하는 데 특화된 노드입니다. 주로 다음과 같은 목적으로 사용됩니다:

  1. 필드 추가 (Add): 새로운 데이터 필드를 추가하고 값을 할당합니다.
  2. 필드 수정 (Modify): 기존 필드의 값을 변경하거나, 다른 필드의 값을 조합하여 새로운 값을 만듭니다.
  3. 필드 이름 변경 (Rename): 기존 필드의 이름을 바꿉니다. (최신 버전 Set Node는 Operation 드롭다운에서 바로 Rename을 제공합니다.)
  4. 필드 제거 (Delete): 불필요한 데이터 필드를 삭제하여 데이터를 간결하게 만듭니다.

Set Node의 가장 큰 강점은 표현식(Expressions)을 활용하여 데이터를 동적으로 처리할 수 있다는 점입니다. $json 객체를 통해 현재 아이템의 모든 데이터에 접근할 수 있으며, 자바스크립트 문법을 사용하여 복잡한 로직을 구현할 수 있습니다.

또한, Set Node는 데이터를 처리하는 “모드(Mode)”를 선택할 수 있습니다:

  • Add/Merge (기본값): 설정된 필드를 추가하거나, 이미 존재하는 필드라면 값을 덮어씁니다.
  • Keep: 설정된 필드만 남기고 나머지는 모두 삭제합니다. 데이터 정제에 매우 유용합니다.
  • Delete: 설정된 필드를 삭제합니다.

이제 이 강력한 Set Node를 활용하는 10가지 예시를 자세히 살펴볼까요? 🛠️


n8n Set Node 10가지 사용 예시로 데이터 마스터하기!

각 예시마다 Input JSON (입력 데이터), Set Node 설정 (또는 표현식), Output JSON (출력 데이터)을 명확히 제시하여 이해를 돕겠습니다.

1. 새로운 정적 필드 추가 ✨

가장 기본적인 사용법입니다. 모든 아이템에 동일한 새로운 필드와 값을 추가할 때 사용합니다.

  • 시나리오: 특정 작업이 완료되었음을 나타내는 status 필드를 모든 데이터에 추가하고 싶을 때.
  • Input JSON:
    {
      "orderId": "ABC-123",
      "customerName": "김영희"
    }
  • Set Node 설정:
    • Operation: Add
    • Value: String
    • Key: status
    • Value: 처리 완료
  • Output JSON:
    {
      "orderId": "ABC-123",
      "customerName": "김영희",
      "status": "처리 완료"
    }
  • 팁: 워크플로우의 특정 단계에서 일괄적으로 상태를 부여하거나, API 요청에 필요한 고정 값을 추가할 때 유용합니다.

2. 기존 필드 이름 변경 🏷️

외부 API나 다른 시스템으로 데이터를 보낼 때, 필드 이름 규칙(예: snake_casecamelCase로)을 맞춰야 하는 경우가 많습니다.

  • 시나리오: first_namelast_name 필드를 firstNamelastName으로 변경하고 싶을 때.
  • Input JSON:
    {
      "order_id": "DEF-456",
      "first_name": "박",
      "last_name": "준영"
    }
  • Set Node 설정:
    • Operation: Rename
    • Old Name: order_id / New Name: orderId
    • Old Name: first_name / New Name: firstName
    • Old Name: last_name / New Name: lastName
  • Output JSON:
    {
      "orderId": "DEF-456",
      "firstName": "박",
      "lastName": "준영"
    }
  • 팁: Set Node의 “Operation” 드롭다운을 “Rename”으로 설정하면 여러 필드를 한 번에 변경할 수 있어 편리합니다.

3. 불필요한 필드 제거 🗑️

데이터를 다음 단계로 전달하기 전에, 불필요하거나 민감한 정보를 제거하여 데이터를 정제할 수 있습니다.

  • 시나리오: 데이터베이스에서 가져온 결과 중 내부적으로만 사용하는 _id__v 필드를 제거하고 싶을 때.
  • Input JSON:
    {
      "id": 101,
      "name": "새 상품",
      "description": "아주 좋은 상품입니다.",
      "_internal_code": "XYZ789",
      "created_at": "2023-10-26T10:00:00Z"
    }
  • Set Node 설정:
    • Mode: Delete
    • Fields:
      • _internal_code
      • created_at
  • Output JSON:
    {
      "id": 101,
      "name": "새 상품",
      "description": "아주 좋은 상품입니다."
    }
  • 팁: ModeDelete로 설정하고 제거할 필드를 지정하는 것이 가장 직관적입니다. 혹은 ModeKeep으로 설정하고 유지할 필드만 지정하는 방법도 있습니다.

4. 기존 필드 값을 조합하여 새 필드 생성 🧩

여러 필드의 값을 합쳐 새로운 의미 있는 필드를 만들 수 있습니다.

  • 시나리오: firstNamelastName을 합쳐 fullName 필드를 만들고 싶을 때.
  • Input JSON:
    {
      "firstName": "이",
      "lastName": "지은",
      "email": "jieun.lee@example.com"
    }
  • Set Node 설정:
    • Operation: Add
    • Value: Expression
    • Key: fullName
    • Value Expression: {{ $json.firstName + ' ' + $json.lastName }}
  • Output JSON:
    {
      "firstName": "이",
      "lastName": "지은",
      "email": "jieun.lee@example.com",
      "fullName": "이 지은"
    }
  • 팁: 문자열 조합뿐만 아니라 숫자 필드를 합산($json.price + $json.tax)하거나 복잡한 계산식도 가능합니다.

5. 조건에 따른 필드 값 동적 설정 🤔

삼항 연산자(Ternary Operator)를 사용하여 특정 조건에 따라 필드 값을 다르게 설정할 수 있습니다.

  • 시나리오: 주문 총액이 특정 금액 이상이면 customerType을 ‘VIP’로, 아니면 ‘일반’으로 설정하고 싶을 때.
  • Input JSON:
    {
      "orderId": "GHI-789",
      "orderTotal": 150000,
      "currency": "KRW"
    }
  • Set Node 설정:
    • Operation: Add
    • Value: Expression
    • Key: customerType
    • Value Expression: {{ $json.orderTotal >= 100000 ? 'VIP' : '일반' }}
  • Output JSON:
    {
      "orderId": "GHI-789",
      "orderTotal": 150000,
      "currency": "KRW",
      "customerType": "VIP"
    }
  • 팁: 이 기능은 IF 노드 없이도 간단한 조건부 로직을 데이터 자체에 내장할 수 있게 해주어 워크플로우를 간결하게 만듭니다.

6. 배열 내 특정 객체/값 추출 및 가공 🛒

API 응답에서 자주 볼 수 있는 배열 형태의 데이터에서 특정 값을 추출하여 새로운 필드로 만들 수 있습니다.

  • 시나리오: products 배열 내 각 상품의 name만 추출하여 쉼표로 구분된 문자열로 만들고 싶을 때.
  • Input JSON:
    {
      "cartId": "CART-001",
      "products": [
        { "id": 1, "name": "노트북", "price": 1200000 },
        { "id": 2, "name": "무선 마우스", "price": 50000 }
      ]
    }
  • Set Node 설정:
    • Operation: Add
    • Value: Expression
    • Key: productNamesList
    • Value Expression: {{ $json.products.map(product => product.name).join(', ') }}
  • Output JSON:
    {
      "cartId": "CART-001",
      "products": [
        { "id": 1, "name": "노트북", "price": 1200000 },
        { "id": 2, "name": "무선 마우스", "price": 50000 }
      ],
      "productNamesList": "노트북, 무선 마우스"
    }
  • 팁: map(), filter(), reduce()와 같은 자바스크립트 배열 메서드를 활용하면 배열 데이터를 매우 강력하게 가공할 수 있습니다.

7. 데이터 타입 변환 ↔️

숫자인데 문자열로 되어 있거나, 그 반대인 경우 데이터를 다음 시스템에 보내기 전에 타입을 변경해야 할 때가 있습니다.

  • 시나리오: amount 필드가 문자열 “12500”으로 되어 있어 계산이 불가능할 때, 이를 실제 숫자 타입으로 변환하고 싶을 때.
  • Input JSON:
    {
      "transactionId": "TXN-005",
      "amount": "12500",
      "currency": "USD"
    }
  • Set Node 설정:
    • Operation: Add
    • Value: Expression
    • Key: parsedAmount
    • Value Expression: {{ parseInt($json.amount) }}
  • Output JSON:
    {
      "transactionId": "TXN-005",
      "amount": "12500",
      "currency": "USD",
      "parsedAmount": 12500
    }
  • 팁: parseInt(), parseFloat(), String() (또는 .toString()) 등을 사용하여 원하는 타입으로 변환할 수 있습니다. 날짜 문자열을 Date 객체로 변환할 때는 new Date()를 사용하기도 합니다.

8. 필드에 기본값 설정 (null 또는 undefined일 때) 🛡️

데이터가 누락되었을 때 오류를 방지하거나, 기본값을 설정하여 처리의 일관성을 유지할 수 있습니다.

  • 시나리오: notes 필드가 비어 있거나 null일 경우, “기록 없음”이라는 기본값을 설정하고 싶을 때.
  • Input JSON:
    {
      "meetingId": "M-007",
      "title": "주간 보고 회의",
      "notes": null
    }

    (또는 {"meetingId": "M-007", "title": "주간 보고 회의"}notes 필드 자체가 없을 수도 있습니다.)

  • Set Node 설정:
    • Operation: Add
    • Value: Expression
    • Key: notes (기존 필드를 덮어씁니다)
    • Value Expression: {{ $json.notes || '기록 없음' }}
  • Output JSON:
    {
      "meetingId": "M-007",
      "title": "주간 보고 회의",
      "notes": "기록 없음"
    }
  • 팁: || (OR) 연산자를 사용하여 왼쪽 값이 null, undefined, , "", false일 경우 오른쪽 값을 기본값으로 사용하게 할 수 있습니다.

9. 중첩된 객체 필드 평탄화/직접 접근 🗺️

깊게 중첩된 JSON 구조에서 필요한 값을 바로 추출하여 최상위 필드로 만들 때 유용합니다.

  • 시나리오: user 객체 안에 address 객체가 있고, 그 안에 city가 있을 때, userCity라는 새로운 필드에 city 값을 할당하고 싶을 때.
  • Input JSON:
    {
      "eventId": "EVT-123",
      "user": {
        "id": "U-456",
        "name": "김민지",
        "address": {
          "street": "테헤란로",
          "city": "서울",
          "zipCode": "06130"
        }
      }
    }
  • Set Node 설정:
    • Operation: Add
    • Value: Expression
    • Key: userCity
    • Value Expression: {{ $json.user.address.city }}
    • Key: userStreet
    • Value Expression: {{ $json.user.address.street }}
  • Output JSON:
    {
      "eventId": "EVT-123",
      "user": {
        "id": "U-456",
        "name": "김민지",
        "address": {
          "street": "테헤란로",
          "city": "서울",
          "zipCode": "06130"
        }
      },
      "userCity": "서울",
      "userStreet": "테헤란로"
    }
  • 팁: $json.필드명.하위필드명.최하위필드명과 같이 . (점) 표기법을 사용하여 깊은 계층의 데이터에 접근할 수 있습니다.

10. 여러 필드를 묶어 새로운 JSON 객체 생성 📦

여러 개의 개별 필드를 묶어 하나의 새로운 중첩된 JSON 객체로 만들 때 사용합니다. API 요청 페이로드를 특정 형식으로 구성해야 할 때 매우 유용합니다.

  • 시나리오: productNameproductQuantity를 묶어 itemDetails라는 새로운 객체를 생성하고 싶을 때.
  • Input JSON:
    {
      "orderNumber": "ORD-789",
      "productName": "무선 이어폰",
      "productQuantity": 2,
      "unitPrice": 150000
    }
  • Set Node 설정:
    • Operation: Add
    • Value: Expression
    • Key: itemDetails
    • Value Expression: {{ { "name": $json.productName, "quantity": $json.productQuantity, "totalPrice": $json.productQuantity * $json.unitPrice } }}
  • Output JSON:
    {
      "orderNumber": "ORD-789",
      "productName": "무선 이어폰",
      "productQuantity": 2,
      "unitPrice": 150000,
      "itemDetails": {
        "name": "무선 이어폰",
        "quantity": 2,
        "totalPrice": 300000
      }
    }
  • 팁: {{ { "키": 값, "다른키": 다른값 } }} 형태로 중괄호를 두 번 사용하여 JSON 객체를 생성하고 할당할 수 있습니다.

Set Node 활용 시 추가 팁 및 모범 사례 🌟

  • 작은 단위로 테스트하세요: 복잡한 변환을 한 번에 하려 하지 말고, Set Node를 여러 개 사용하여 단계를 나누고 각 단계마다 테스트하여 예상대로 동작하는지 확인하는 것이 좋습니다.
  • 표현식을 적극 활용하세요: Set Node의 진정한 힘은 표현식에서 나옵니다. 자바스크립트의 기본 문법을 익히면 거의 모든 데이터 조작이 가능해집니다.
  • $json 이해하기: $json은 현재 처리 중인 아이템의 전체 데이터를 나타냅니다. 이 객체의 구조를 이해하고 올바르게 접근하는 것이 중요합니다.
  • KeepDelete 모드 활용: 불필요한 데이터를 제거하고 필요한 데이터만 남기는 것은 워크플로우의 효율성과 가독성을 높이는 좋은 방법입니다.
  • 다른 노드와 함께 사용: Set Node는 단독으로도 강력하지만, Code 노드로 복잡한 자바스크립트 로직을 구현하거나, IF 노드로 분기를 처리하고, Merge 노드로 데이터를 합치는 등 다른 노드들과 결합할 때 그 시너지가 극대화됩니다.

마무리하며 🎉

n8n의 Set Node는 단순한 데이터 조작 노드를 넘어, 복잡한 데이터 처리 문제를 해결하는 데 필수적인 도구입니다. 오늘 살펴본 10가지 예시들은 Set Node로 할 수 있는 일의 극히 일부에 불과하지만, 이 예시들을 통해 Set Node의 다양한 활용 가능성과 잠재력을 엿보셨기를 바랍니다.

이제 여러분은 어떤 종류의 데이터가 워크플로우로 들어오든, Set Node를 사용하여 원하는 형태로 가공하고 다음 단계로 매끄럽게 전달할 수 있는 능력을 갖추게 되었습니다! 🥳

가장 좋은 학습 방법은 직접 해보는 것입니다. n8n 워크플로우에서 Set Node를 추가하고, 다양한 데이터를 입력해보며 오늘 배운 예시들을 직접 구현해보세요. 꾸준히 연습하다 보면, Set Node는 여러분의 가장 친한 자동화 친구가 될 것입니다.

궁금한 점이나 더 다뤄줬으면 하는 주제가 있다면 언제든지 댓글로 남겨주세요! 다음에도 유용한 n8n 팁으로 찾아오겠습니다.

해피 오토메이션! 🤖✨

답글 남기기

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