안녕하세요, 자동화와 효율성을 사랑하는 여러분! 😊
n8n은 코딩 지식 없이도 강력한 워크플로우를 구축할 수 있게 해주는 환상적인 도구입니다. 하지만 때로는 기본 노드만으로는 해결하기 어려운 복잡한 로직이나 데이터 처리 요구사항에 직면할 수 있습니다. 바로 이럴 때 n8n의 “Execute Code” 노드가 여러분의 자동화 능력을 한 차원 끌어올려 줄 비밀 병기가 됩니다.
오늘은 n8n의 Execute Code
노드를 활용하여 JavaScript(JS)와 Python을 통해 어떻게 자동화의 한계를 돌파하고, 더욱 강력하고 유연한 워크플로우를 구축할 수 있는지 자세히 알아보겠습니다. 함께 자동화의 마법을 경험해 보세요! ✨
1. n8n Execute Code
노드란 무엇인가요? 🤔
Execute Code
(또는 단순히 Code
노드)는 n8n 워크플로우 내에서 JavaScript 또는 Python 코드를 직접 실행할 수 있게 해주는 특별한 노드입니다. 마치 n8n 안에 작은 개발 환경을 내장한 것과 같습니다.
주요 특징:
- 스크립팅 언어 지원: 기본적으로 JavaScript를 지원하며, Python도 선택하여 사용할 수 있습니다.
- 워크플로우 데이터 접근: 이전 노드에서 넘어온 데이터에 쉽게 접근하고 조작할 수 있습니다.
- 맞춤형 로직 구현: n8n의 기본 노드로는 구현하기 어려운 복잡한 조건, 데이터 변환, 계산 등을 자유롭게 수행할 수 있습니다.
- 유연성 극대화: 자동화 워크플로우의 한계를 허물고 무궁무진한 가능성을 열어줍니다.
2. 왜 Execute Code
노드를 사용해야 할까요? (자동화 한계 돌파!) 💡
n8n은 수많은 노드를 제공하지만, 모든 시나리오를 커버할 수는 없습니다. Execute Code
노드는 다음과 같은 상황에서 진정한 힘을 발휘합니다.
2.1. 데이터 변환의 마법사 🪄
- 시나리오: 여러 필드의 데이터를 조합하여 새로운 문자열을 만들거나, 특정 조건에 따라 데이터를 가공해야 할 때.
- 예시:
- 이름, 성, 직책 필드를 조합하여
[직책] 이름 성
형식의 인사 정보를 생성해야 할 때. - 숫자 데이터를 통화 형식으로 포맷하거나, 날짜 형식을 변경해야 할 때.
- JSON 데이터에서 중첩된 객체를 플랫하게 펼치거나, 특정 배열에서 고유한 값만 추출해야 할 때.
- 일반 노드의 한계:
Set
노드나Merge
노드만으로는 복잡한 문자열 조합이나 조건부 데이터 변환이 어렵습니다.
- 이름, 성, 직책 필드를 조합하여
2.2. 복잡한 조건 로직 구현 🧠
- 시나리오: 단순
IF/ELSE
를 넘어, 여러 변수를 동시에 고려하거나, 복잡한 비즈니스 규칙에 따라 워크플로우의 흐름을 제어해야 할 때. - 예시:
- 주문 금액, 고객 등급, 프로모션 코드 등 여러 조건을 만족할 때만 특정 할인율을 적용해야 할 때.
- A/B 테스트 결과에 따라 사용자에게 다른 메시지를 보내거나 다른 워크플로우 분기를 태워야 할 때.
- 데이터 유효성 검사: 입력된 이메일 주소가 특정 도메인 목록에 있는지, 전화번호 형식이 유효한지 등.
- 일반 노드의 한계:
IF
노드를 여러 개 중첩하면 워크플로우가 지저분해지고 관리하기 어렵습니다.
2.3. 외부 서비스 및 레거시 시스템 연동 🔗
- 시나리오: n8n에 내장된
HTTP Request
노드만으로는 처리하기 어려운 복잡한 인증 절차(예: OAuth 2.0 커스텀 흐름), 비표준 API 요청, 또는 특정 라이브러리가 필요한 경우. - 예시:
- 특정 암호화 라이브러리를 사용하여 API 요청 페이로드를 암호화해야 할 때.
- 데이터베이스에 직접 연결하여 복잡한 쿼리를 실행하고 결과를 가져와야 할 때 (n8n의 DB 노드가 지원하지 않는 특정 DB이거나 더 복잡한 쿼리가 필요할 경우).
- 레거시 시스템이 제공하는 XML 데이터를 파싱하거나, 고유한 포맷의 CSV를 처리해야 할 때.
- 일반 노드의 한계:
HTTP Request
노드는 기본적인 GET/POST 요청은 가능하지만, 커스텀 스크립팅이 필요한 고급 시나리오에는 제약이 있습니다.
2.4. 맞춤형 에러 처리 및 로깅 🚨
- 시나리오: 워크플로우 실행 중 발생할 수 있는 특정 에러 상황을 예측하고, 이에 대한 맞춤형 처리(예: 에러 메시지 가공, 특정 채널로 알림 전송, 재시도 로직 구현)가 필요할 때.
- 예시:
- API 호출 실패 시, 에러 코드에 따라 다른 조치를 취하거나, 에러 메시지를 사람이 읽기 쉽게 가공하여 슬랙으로 전송해야 할 때.
- 특정 노드에서 데이터가 비어있을 경우, 워크플로우를 중단하지 않고 기본값으로 대체하여 다음 단계로 넘어가게 할 때.
- 일반 노드의 한계: n8n의 기본 에러 핸들링은 강력하지만, 개발자가 직접 에러 메시지를 가공하거나 복잡한 에러 복구 로직을 짜기 어렵습니다.
3. Execute Code
노드 사용법 (JavaScript vs. Python) 🧑💻
Execute Code
노드는 내부적으로 items
라는 배열을 통해 데이터를 주고받습니다. 각 item
은 JSON 객체를 포함합니다.
3.1. 인터페이스 이해 🧐
Execute Code
노드를 추가하면 다음과 같은 기본 코드를 볼 수 있습니다.
// JavaScript 예시
for (const item of items) {
// item.json은 이전 노드에서 전달된 데이터입니다.
// 이 데이터를 가공하여 item.json에 다시 할당하거나, 새로운 필드를 추가할 수 있습니다.
item.json.newField = "Hello " + item.json.name;
}
return items; // 변경된 데이터를 다음 노드로 전달합니다.
# Python 예시
# items는 이전 노드에서 전달된 데이터 리스트입니다.
for item in items:
# item["json"]은 이전 노드에서 전달된 데이터입니다.
# 이 데이터를 가공하여 item["json"]에 다시 할당하거나, 새로운 필드를 추가할 수 있습니다.
item["json"]["newField"] = "Hello " + item["json"]["name"]
return items # 변경된 데이터를 다음 노드로 전달합니다.
items
: 이전 노드로부터 전달받은 모든 데이터 항목들의 배열(JS) 또는 리스트(Python)입니다.item.json
(JS) 또는item["json"]
(Python): 각 데이터 항목의 실제 JSON 페이로드입니다. 이전 노드의 결과가 여기에 담겨 있습니다.return items
: 처리된items
배열/리스트를 다음 노드로 전달합니다. 이 부분을 생략하면 다음 노드로 데이터가 전달되지 않습니다.
3.2. JavaScript 예시 (기본이자 강력!) 💪
n8n은 JavaScript 기반으로 동작하므로, Execute Code
노드에서 JavaScript를 사용하는 것이 가장 자연스럽고 성능도 좋습니다.
예시 1: 데이터 필드 조합 및 가공
이전 노드에서 firstName
과 lastName
을 받았다고 가정하고, fullName
과 greeting
필드를 추가해봅시다.
for (const item of items) {
const firstName = item.json.firstName;
const lastName = item.json.lastName;
// 새로운 필드 추가
item.json.fullName = `${firstName} ${lastName}`;
item.json.greeting = `안녕하세요, ${firstName}님! n8n 워크플로우에 오신 것을 환영합니다.`;
// 특정 조건에 따라 데이터 변경
if (item.json.age && item.json.age = 200:
item["json"]["sales_grade"] = "Excellent"
elif current_amount >= 100:
item["json"]["sales_grade"] = "Good"
else:
item["json"]["sales_grade"] = "Normal"
output_items.append(item)
# 총 판매액과 평균 판매액을 별도의 아이템으로 추가하거나,
# 기존 아이템에 메타데이터로 추가할 수 있습니다.
# 여기서는 가장 첫 번째 아이템에 추가해보겠습니다.
if output_items:
output_items[0]["json"]["total_sales_all_products"] = total_amount
output_items[0]["json"]["average_sales_all_products"] = average_amount
return output_items
주의: n8n의 Python Code
노드에서 pandas
와 같은 외부 라이브러리를 사용하려면, n8n 서버 환경에 해당 라이브러리가 미리 설치되어 있어야 합니다. 그렇지 않으면 ModuleNotFoundError
가 발생합니다.
4. Execute Code
노드 사용 시 핵심 팁과 모범 사례 🌟
Execute Code
노드는 강력하지만, 잘못 사용하면 디버깅이 어렵거나 성능 문제를 일으킬 수 있습니다. 다음 팁들을 기억하세요!
- 입력 데이터 구조 파악 📋: 코드를 작성하기 전에 이전 노드에서 어떤 형태의 데이터가 넘어오는지 정확히 이해하는 것이 중요합니다.
Execute Code
노드에 연결된 노드의 “Output” 탭을 확인하여 데이터 구조를 파악하세요. - 디버깅은 필수! 🐞:
- JavaScript:
console.log()
를 사용하여 변수 값을 출력하고, n8n 실행 로그에서 결과를 확인하세요. - Python:
print()
함수를 사용하여 변수 값을 출력하고, 마찬가지로 n8n 실행 로그에서 확인하세요. - n8n의 “Execution” 탭을 통해 코드 실행 시 발생한 에러 메시지나 출력 내용을 상세히 볼 수 있습니다.
- JavaScript:
- 오류 처리 로직 포함 🛡️:
try...catch
(JavaScript) 또는try...except
(Python) 블록을 사용하여 예상치 못한 에러가 발생했을 때 워크플로우가 멈추지 않고 적절하게 처리되도록 하세요. - 모듈화와 재사용성 ✨: 만약 코드가 너무 길어지거나 복잡해진다면, 여러 개의
Execute Code
노드로 분리하거나, n8n Functions나 다른 커스텀 노드를 사용하는 것을 고려해 보세요. - 성능과 보안 고려 🤔:
Execute Code
노드는 서버 리소스를 사용하므로, 과도하게 복잡하거나 긴 실행 시간을 요구하는 코드는 피하는 것이 좋습니다.- 민감한 정보를 코드에 직접 하드코딩하지 마세요. 대신 n8n의 자격 증명(Credentials) 기능을 사용하여 안전하게 관리하세요.
- 최후의 수단으로 활용 💡: 항상 먼저 n8n의 내장 노드들을 사용하여 문제를 해결할 수 있는지 확인하세요. 내장 노드는 일반적으로 더 안정적이고, 관리하기 쉬우며, 성능 최적화가 되어 있습니다.
Execute Code
노드는 내장 노드로 해결할 수 없는 특별한 상황에서 사용해야 합니다.
5. 실전 예시: 고객 등급 기반 할인율 적용 (JS) 🛒
온라인 쇼핑몰에서 고객의 총 구매 금액에 따라 등급을 나누고, 해당 등급에 따라 할인율을 적용하여 최종 결제 금액을 계산하는 워크플로우를 만들어 봅시다.
시나리오:
- 이전 노드에서 고객의
id
,totalPurchaseAmount
(총 구매 금액),orderAmount
(현재 주문 금액) 데이터를 받습니다. totalPurchaseAmount
에 따라 고객 등급을 “Bronze”, “Silver”, “Gold”, “VIP”로 분류합니다.- 각 등급에 맞는 할인율을 적용하여
discountedAmount
를 계산하고,finalPaymentAmount
필드를 추가합니다.
Execute Code
노드 코드:
for (const item of items) {
const customerId = item.json.id;
const totalPurchaseAmount = item.json.totalPurchaseAmount;
const orderAmount = item.json.orderAmount;
let customerGrade = 'Bronze';
let discountRate = 0; // 기본 할인율 0%
// 고객 등급 분류
if (totalPurchaseAmount >= 5000000) { // 500만원 이상
customerGrade = 'VIP';
discountRate = 0.15; // 15% 할인
} else if (totalPurchaseAmount >= 1000000) { // 100만원 이상
customerGrade = 'Gold';
discountRate = 0.10; // 10% 할인
} else if (totalPurchaseAmount >= 100000) { // 10만원 이상
customerGrade = 'Silver';
discountRate = 0.05; // 5% 할인
} else {
customerGrade = 'Bronze';
discountRate = 0; // 0% 할인
}
// 할인 금액 및 최종 결제 금액 계산
const discountedAmount = orderAmount * discountRate;
const finalPaymentAmount = orderAmount - discountedAmount;
// 결과 데이터에 추가
item.json.customerGrade = customerGrade;
item.json.discountRate = discountRate * 100 + '%'; // 퍼센트 표시
item.json.discountedAmount = discountedAmount.toFixed(2); // 소수점 2자리 반올림
item.json.finalPaymentAmount = finalPaymentAmount.toFixed(2); // 소수점 2자리 반올림
console.log(`고객 ${customerId}: 등급 ${customerGrade}, 할인율 ${discountRate*100}%, 최종 결제 금액 ${finalPaymentAmount}`);
}
return items;
예상 입력 데이터 (JSON):
[
{
"json": {
"id": "customer_001",
"totalPurchaseAmount": 50000,
"orderAmount": 30000
}
},
{
"json": {
"id": "customer_002",
"totalPurchaseAmount": 1500000,
"orderAmount": 500000
}
},
{
"json": {
"id": "customer_003",
"totalPurchaseAmount": 7000000,
"orderAmount": 1000000
}
}
]
예상 출력 데이터 (JSON):
[
{
"json": {
"id": "customer_001",
"totalPurchaseAmount": 50000,
"orderAmount": 30000,
"customerGrade": "Bronze",
"discountRate": "0%",
"discountedAmount": "0.00",
"finalPaymentAmount": "30000.00"
}
},
{
"json": {
"id": "customer_002",
"totalPurchaseAmount": 1500000,
"orderAmount": 500000,
"customerGrade": "Gold",
"discountRate": "10%",
"discountedAmount": "50000.00",
"finalPaymentAmount": "450000.00"
}
},
{
"json": {
"id": "customer_003",
"totalPurchaseAmount": 7000000,
"orderAmount": 1000000,
"customerGrade": "VIP",
"discountRate": "15%",
"discountedAmount": "150000.00",
"finalPaymentAmount": "850000.00"
}
}
]
이처럼 Execute Code
노드를 사용하면 복잡한 비즈니스 로직도 워크플로우 내에서 유연하게 처리할 수 있습니다.
6. 결론: 자동화의 지평을 넓히다! 🔭
n8n의 Execute Code
노드는 단순한 자동화를 넘어, 진정한 지능형 자동화를 구현할 수 있게 해주는 강력한 도구입니다. JavaScript와 Python의 유연성을 활용하여 데이터 변환, 복잡한 조건 처리, 외부 시스템 연동 등 다양한 시나리오에서 n8n의 기본 노드가 제공하지 못하는 심층적인 기능을 구현할 수 있습니다.
처음에는 코드를 작성하는 것이 어렵게 느껴질 수 있지만, 몇 번의 시도와 디버깅을 통해 곧 익숙해질 것입니다. 이 노드를 마스터한다면, 여러분의 n8n 워크플로우는 상상 이상의 가능성을 열게 될 것입니다.
지금 바로 n8n에서 Execute Code
노드를 추가하고, 여러분만의 맞춤형 자동화 로직을 실험해 보세요! 궁금한 점이 있다면 언제든지 커뮤니티의 도움을 받거나, 공식 문서를 참고하여 더욱 깊이 있게 학습할 수 있습니다. 행복한 자동화 되세요! 💡🎉 D