G: 안녕하세요, n8n 자동화의 세계에 오신 것을 환영합니다! 🚀 비즈니스 프로세스를 효율적으로 만들고 데이터를 유연하게 다루는 것이 핵심인 시대입니다. n8n은 강력한 워크플로우 자동화 도구이지만, 그 중에서도 Set 노드는 데이터 조작의 마법봉과 같습니다. 🧙♂️
많은 분들이 n8n 워크플로우를 만들면서 데이터 변환에 어려움을 겪으시는데, Set 노드만 제대로 이해해도 90% 이상의 데이터 가공 문제를 해결할 수 있습니다. 이 가이드에서는 Set 노드가 무엇인지부터 시작하여 핵심 개념, 주요 기능, 그리고 실용적인 10가지 활용법까지 완벽하게 파헤쳐 보겠습니다. 데이터 가공의 달인이 될 준비되셨나요? ✨
1. n8n Set 노드란 무엇인가요? 🛠️
n8n의 Set 노드는 워크플로우에서 데이터 아이템(Item)의 JSON 구조를 조작하고, 새로운 필드를 추가하거나, 기존 필드의 값을 변경, 삭제, 또는 이름을 바꾸는 데 사용되는 핵심 노드입니다. 간단히 말해, 워크플로우를 통과하는 데이터의 내용을 입맛에 맞게 ‘설정’하는 역할을 합니다.
왜 Set 노드를 사용해야 할까요? 💡
- 데이터 정제 및 표준화: 들어오는 데이터가 불규칙할 때, 일관된 형식으로 만들어 다음 노드에서 쉽게 처리할 수 있게 합니다.
- 데이터 강화: 기존 데이터에 새로운 정보를 추가하여 더 풍부한 데이터를 만듭니다. (예:
first_name
과last_name
을 합쳐full_name
만들기) - 불필요한 데이터 제거: 다음 노드에서 필요 없는 민감하거나 과도한 데이터를 제거하여 워크플로우를 간소화하고 보안을 강화합니다.
- 조건부 로직 적용: 특정 조건에 따라 필드 값을 동적으로 설정할 수 있습니다.
Set 노드는 워크플로우의 거의 모든 단계에서 활용될 수 있는 만능 노드입니다.
2. Set 노드의 핵심 개념 완벽 이해 🧠
Set 노드를 효과적으로 사용하려면 몇 가지 핵심 개념을 정확히 이해해야 합니다.
2.1. 데이터 유형 (Data Types) 🔢📝✅
Set 노드에서 값을 설정할 때, 해당 값의 데이터 유형을 지정하는 것이 매우 중요합니다. n8n은 자동으로 유형을 추론하려고 시도하지만, 명시적으로 지정해주는 것이 오류를 줄이고 정확성을 높입니다.
- String (문자열): 일반적인 텍스트 데이터. (예: “안녕하세요”, “user@example.com”)
- Number (숫자): 정수 또는 소수. (예: 123, 3.14)
- Boolean (논리값):
true
또는false
. (예: ✅true
/ ❌false
) - JSON (JSON 객체): 중첩된 객체 또는 배열을 생성할 때 사용합니다. (예:
{ "key": "value" }
,[ "item1", "item2" ]
)- Array (배열): 여러 값을 순서대로 저장하는 목록. (예:
["apple", "banana"]
) - Object (객체): 키-값 쌍으로 이루어진 구조화된 데이터. (예:
{"name": "Alice", "age": 30}
)
- Array (배열): 여러 값을 순서대로 저장하는 목록. (예:
예시:
-
Key
:is_active
Value
:true
Type
:Boolean
-
Key
:user_info
Value
:{ "id": 123, "email": "test@example.com" }
Type
:JSON
2.2. 값 (Value) vs. 표현식 (Expression) 🎯✍️
Set 노드에서 가장 중요한 구분입니다.
-
Value (값): 입력된 문자 그대로의 값을 필드에 할당합니다. 정적인 텍스트나 숫자 등을 입력할 때 사용합니다.
- 사용 예시:
Key
:status
Value
:Pending
Type
:String
- ➡️ 결과:
{ "status": "Pending" }
- 사용 예시:
-
Expression (표현식): n8n의 강력한 표현식 언어를 사용하여 동적으로 값을 계산하거나, 이전 노드의 데이터를 참조하여 값을 할당합니다. 중괄호
{{ }}
안에 JavaScript와 유사한 구문으로 작성합니다.자주 사용되는 표현식 구문:
-
{{ $json.필드명 }}
: 현재 데이터 아이템의 특정 필드 값을 참조합니다.- 예:
{{ $json.email }}
(현재 아이템의email
필드 값)
- 예:
-
{{ $node["노드 이름"].json.필드명 }}
: 특정 노드의 출력 데이터를 참조합니다.- 예:
{{ $node["Webhook"].json.name }}
(Webhook 노드의name
필드 값)
- 예:
-
{{ $input.item.json.필드명 }}
: 현재 노드의 입력 데이터 아이템의 특정 필드 값을 참조합니다.{{ $json.필드명 }}
과 유사하지만, 명시적으로 입력 데이터를 지칭할 때 사용합니다. -
{{ $index }}
: 현재 처리 중인 아이템의 인덱스(0부터 시작)를 참조합니다.- 예:
{{ $index + 1 }}
(항목 번호를 1부터 시작하게 할 때)
- 예:
-
{{ $item(0).$json.필드명 }}
: 첫 번째 아이템(번 인덱스)의 특정 필드를 참조합니다. 모든 아이템에서 동일한 특정 값을 가져올 때 유용합니다.
-
조건부 논리: 삼항 연산자를 사용하여 조건을 만족할 때와 만족하지 않을 때 다른 값을 할당할 수 있습니다.
- 예:
{{ $json.amount > 100 ? "고액" : "소액" }}
(금액이 100보다 크면 “고액”, 아니면 “소액”으로 설정)
- 예:
-
문자열 조합: 백틱(
`
)을 사용하여 문자열과 표현식을 조합할 수 있습니다.- 예:
`안녕하세요, ${$json.name}님!`
- 예:
사용 예시 (Expression):
Key
:full_name
Value
:{{ $json.first_name + ' ' + $json.last_name }}
Type
:String
- ➡️ 결과:
{ "first_name": "John", "last_name": "Doe" }
➡️{ "full_name": "John Doe" }
-
2.3. 대상 필드 설정 (Target Field) 🗺️
Set 노드에서 값을 설정할 필드의 “경로”를 지정하는 방식입니다.
- 최상위 필드: 필드 이름을 직접 입력합니다. (예:
email
,status
) - 중첩 필드: 점(.)을 사용하여 경로를 지정합니다. (예:
user.address.city
,product.details.color
)Key
:user.address.zipcode
Value
:12345
- ➡️ 결과:
{ "user": { "address": { "zipcode": "12345" } } }
- 만약
user
나address
가 존재하지 않으면 Set 노드가 자동으로 해당 객체를 생성합니다.
2.4. 다중 항목 처리 (Handling Multiple Items) 🔄
Set 노드는 들어오는 모든 데이터 아이템에 대해 개별적으로 작동합니다. 즉, 10개의 데이터 아이템이 Set 노드를 통과하면, 각 아이템마다 설정된 규칙이 적용되어 10개의 변환된 아이템이 출력됩니다. 이는 각 항목을 독립적으로 처리해야 할 때 매우 강력합니다.
3. Set 노드 주요 기능 심층 분석 💡
Set 노드는 단순하지만 매우 유연한 기능을 제공합니다.
3.1. 필드 추가 (Add Field) ➕
가장 기본적인 기능입니다. 기존 데이터에 새로운 필드와 값을 추가합니다.
- 설정:
Operation
을Add
로 선택합니다. - 예시:
- Key:
created_at
- Value:
{{ new Date().toISOString() }}
- Type:
String
- (현재 날짜와 시간을 ISO 형식으로 추가)
- Key:
3.2. 필드 값 업데이트 (Update Field Value) ✏️
기존에 존재하는 필드의 값을 변경합니다. 필드가 존재하지 않으면 새로 생성됩니다.
- 설정:
Operation
을Add
로 선택하면, 기존 필드와 동일한 Key를 입력 시 자동으로 업데이트됩니다. - 예시:
- Key:
status
- Value:
Processed
- Type:
String
- (기존
status
필드의 값을Processed
로 변경)
- Key:
3.3. 필드 이름 변경 (Rename Field) 🏷️
Set 노드 자체에는 ‘Rename’이라는 직접적인 Operation은 없지만, ‘Add’와 ‘Remove’를 조합하여 필드 이름을 효과적으로 변경할 수 있습니다.
- 설정:
Operation
:Add
- Key:
새로운_필드_이름
- Value:
{{ $json.기존_필드_이름 }}
- Type: (기존 필드의 타입)
- Key:
Operation
:Remove
- Key:
기존_필드_이름
(위에서 추가한 필드와 동시에 처리)
- Key:
- 예시:
email
필드를user_email
로 변경- 첫 번째 Set 노드 설정 (Add):
Key
:user_email
Value
:{{ $json.email }}
Type
:String
- 두 번째 Set 노드 설정 (Remove):
Key
:email
- (또는 하나의 Set 노드에서 두 작업을 동시에 수행할 수 있습니다.)
- 첫 번째 Set 노드 설정 (Add):
3.4. 필드 삭제 (Delete Field) 🗑️
불필요하거나 민감한 데이터를 제거합니다.
- 설정:
Operation
을Remove
로 선택합니다.Key
에 삭제할 필드 이름을 입력합니다. - 예시:
- Key:
password
- Key:
temp_id
- (필요 없는
password
와temp_id
필드를 삭제)
- Key:
3.5. 조건부 로직 적용 (Conditional Logic) 🚦
표현식 내에서 삼항 연산자나 다른 JavaScript 문법을 사용하여 조건에 따라 다른 값을 할당합니다.
- 설정:
Operation
을Add
로 선택하고,Value
를Expression
모드로 설정합니다. - 예시:
- Key:
order_priority
- Value:
{{ $json.amount > 500 ? 'High' : ($json.amount > 100 ? 'Medium' : 'Low') }}
- Type:
String
- (주문 금액에 따라 우선순위를 High, Medium, Low로 설정)
- Key:
3.6. 배열 및 객체 다루기 (Handling Arrays & Objects) 🧩
Set 노드를 사용하여 복잡한 JSON 구조 내의 필드를 조작하거나 새로운 배열/객체를 생성할 수 있습니다.
- 중첩된 필드 접근:
user.address.street
와 같이 점(.) 표기법을 사용합니다. - 배열 내 요소 접근:
items[0].name
과 같이 대괄호([]
)와 인덱스를 사용합니다. - 새로운 객체 생성:
Type
을JSON
으로 설정하고,Value
에 JSON 객체 문자열을 입력합니다.- Key:
customer_info
- Value:
{ "id": {{ $json.user_id }}, "email": "{{ $json.email }}" }
- Type:
JSON
- (기존 데이터에서
user_id
와email
을 가져와customer_info
라는 새 객체 생성)
- Key:
4. Set 노드 10가지 활용법 🌟
이제 Set 노드의 다양한 기능을 실제 워크플로우에서 어떻게 활용할 수 있는지 10가지 예시를 통해 살펴보겠습니다.
활용법 1: 데이터 정규화 (Data Normalization) 🧹
- 시나리오: 여러 소스에서 들어오는 사용자 데이터의 이메일 필드 이름이
email
,user_email
,contact_email
등으로 제각각일 때, 이를unified_email
로 통일하고 싶을 때. - 설정:
Operation
:Add
Key
:unified_email
Value
:{{ $json.email || $json.user_email || $json.contact_email || '' }}
Type
:String
- 설명:
||
(OR 연산자)를 사용하여 첫 번째 존재하는 이메일 필드를 찾아unified_email
로 설정합니다.
활용법 2: 누락된 값에 기본값 설정 (Default Values for Missing) 🛡️
- 시나리오: 제품 정보에
quantity
필드가 없을 경우, 기본값으로1
을 설정하고 싶을 때. - 설정:
Operation
:Add
Key
:quantity
Value
:{{ $json.quantity || 1 }}
Type
:Number
- 설명:
||
연산자는 좌측 값이null
,undefined
,,
""
등 “falsy” 값일 경우 우측 값을 사용합니다.
활용법 3: 데이터 타입 변환 (Data Type Conversion) 🔄
- 시나리오:
price
필드가 문자열(“123.45”)로 들어올 때, 이를 실제 숫자(123.45)로 변환하고 싶을 때. - 설정:
Operation
:Add
Key
:price
Value
:{{ parseFloat($json.price) }}
(정수일 경우parseInt
)Type
:Number
- 설명: JavaScript 내장 함수인
parseFloat
를 사용하여 문자열을 부동 소수점 숫자로 변환합니다.
활용법 4: 복합 필드 생성 (Creating Composite Fields) 🧩
- 시나리오:
first_name
과last_name
필드를 합쳐full_name
필드를 생성하고 싶을 때. - 설정:
Operation
:Add
Key
:full_name
Value
:{{ $json.first_name + ' ' + $json.last_name }}
Type
:String
- 설명: 문자열 연결 연산자
+
를 사용하여 두 필드의 값을 합치고 공백을 추가합니다.
활용법 5: 조건에 따른 값 할당 (Conditional Value Assignment) 🚦
- 시나리오: 주문 금액(
order_amount
)에 따라 주문 등급(order_tier
)을 ‘Gold’, ‘Silver’, ‘Bronze’로 분류하고 싶을 때. - 설정:
Operation
:Add
Key
:order_tier
Value
:{{ $json.order_amount >= 1000 ? 'Gold' : ($json.order_amount >= 500 ? 'Silver' : 'Bronze') }}
Type
:String
- 설명: 중첩된 삼항 연산자를 사용하여 여러 조건을 처리하고 해당 등급을 할당합니다.
활용법 6: 불필요한 필드 제거 (Removing Unnecessary Fields) 🗑️
- 시나리오: API 응답에서
internal_id
,debug_info
,password_hash
와 같이 외부에 노출되거나 불필요한 필드를 제거하고 싶을 때. - 설정:
Operation
:Remove
Key
:internal_id
Key
:debug_info
Key
:password_hash
- 설명:
Remove
Operation을 사용하고 삭제할 필드를 여러 개 추가할 수 있습니다.
활용법 7: 중첩 객체 접근 및 재구성 (Accessing/Restructuring Nested Objects) 🪜
- 시나리오:
user_data.address.street
와 같이 깊이 중첩된 필드를 최상위 필드인street_address
로 간소화하고 싶을 때. - 설정:
Operation
:Add
Key
:street_address
Value
:{{ $json.user_data.address.street }}
Type
:String
- 설명: 점 표기법으로 중첩된 필드에 접근하여 새로운 최상위 필드를 만듭니다.
활용법 8: 동적 URL 또는 메시지 생성 (Dynamic URL/Message Generation) 🔗
- 시나리오: 사용자 ID를 포함하는 동적인 API 엔드포인트 URL을 생성하고 싶을 때.
- 설정:
Operation
:Add
Key
:api_endpoint_url
Value
:`https://api.example.com/users/${$json.user_id}/profile`
Type
:String
- 설명: 백틱(
`
)을 사용하여 템플릿 리터럴을 만들고,${}
안에 표현식을 넣어 동적인 문자열을 생성합니다.
활용법 9: 배열 내 특정 요소 추출 (Extracting Specific Array Elements) 📦
- 시나리오:
tags
라는 배열 필드에서 첫 번째 태그만main_tag
라는 필드로 추출하고 싶을 때. (예:tags: ["VIP", "New Customer"]
) - 설정:
Operation
:Add
Key
:main_tag
Value
:{{ $json.tags && $json.tags[0] ? $json.tags[0] : null }}
Type
:String
- 설명:
tags
배열이 존재하고 첫 번째 요소가 있을 경우에만 값을 가져오고, 그렇지 않으면null
을 반환하여 오류를 방지합니다.
활용법 10: 보안을 위한 민감 데이터 마스킹/삭제 (Masking Sensitive Data) 🔒
- 시나리오: 신용카드 번호(
credit_card_number
)를 로그에 기록하기 전에 마지막 4자리만 보이도록 마스킹하고 싶을 때. - 설정:
Operation
:Add
Key
:masked_card_number
Value
:{{ $json.credit_card_number ? $json.credit_card_number.slice(-4).padStart($json.credit_card_number.length, '*') : null }}
Type
:String
- 설명:
slice(-4)
로 마지막 4자리를 가져오고,padStart
로 나머지 부분을*
로 채워 마스킹합니다. 원본 필드는Remove
Operation으로 삭제할 수 있습니다.
5. Set 노드 사용 팁 & 베스트 프랙티스 ✅
- 테스트 워크플로우 활용: Set 노드의 설정이 올바른지 확인하기 위해 항상 워크플로우를 실행하여 “Executed Workflow” 탭에서 출력 데이터를 확인하세요. 🧪
- 입력 데이터 구조 이해: Set 노드를 추가하기 전에 이전 노드의 출력 데이터 구조를 명확히 이해하는 것이 중요합니다. n8n 에디터에서 이전 노드를 클릭하면 하단에 출력 데이터가 표시됩니다. 📊
- 단순하게 시작: 복잡한 변환을 시도하기 전에, 하나의 Set 노드에서 하나의 간단한 변경부터 시작하고 점차 기능을 추가해 나가세요.
Value
와Expression
모드 구분: 실수로Value
모드에 표현식을 입력하거나 그 반대로 하지 않도록 주의하세요. ✍️- n8n 표현식 문서 참고: n8n 공식 문서에는 다양한 내장 함수와 표현식 사용법이 자세히 나와 있습니다. (예: 날짜, 수학 함수) 📚
- 오류 처리: 표현식에 오류가 발생할 경우, Set 노드가 실패하거나 예상치 못한 결과가 나올 수 있습니다.
Try...Catch
노드를 활용하여 오류를 처리하거나, 표현식 내에서if
문 등으로 예외를 처리하는 로직을 포함하세요.
결론 🎉
Set 노드는 n8n 워크플로우에서 데이터 조작의 핵심 도구입니다. 이 가이드를 통해 Set 노드의 기본적인 기능부터 복잡한 표현식을 활용한 데이터 변환, 그리고 10가지 실용적인 활용법까지 완벽하게 익히셨기를 바랍니다.
이제 여러분은 어떤 형태의 데이터라도 n8n Set 노드를 사용하여 원하는 대로 가공하고 변환할 수 있는 능력을 갖추게 되었습니다. 데이터를 자유자재로 다루는 것은 강력한 자동화 워크플로우를 구축하는 첫걸음입니다.
이 지식을 바탕으로 여러분의 n8n 워크플로우를 더욱 강력하고 유연하게 만들어 보세요! 궁금한 점이 있다면 언제든지 n8n 커뮤니티나 공식 문서를 참고하시길 바랍니다. 행복한 자동화 생활 되세요! 🚀✨