안녕하세요, 자동화와 노코드/로우코드에 관심 있는 모든 분들! 👋 n8n은 정말 강력한 도구죠. 복잡한 워크플로우를 코딩 없이 시각적으로 구축할 수 있게 해주지만, 때로는 그 “복잡성” 자체가 큰 장벽이 되기도 합니다. 수많은 노드들 사이에서 어떤 노드를 써야 할지 막막하고, 워크플로우가 꼬이는 경험… 다들 있으실 거예요.
걱정 마세요! 🙌 오늘은 n8n으로 복잡한 로직을 우아하게 처리할 수 있도록 도와주는 핵심 노드 5가지를 집중적으로 파헤쳐 볼 겁니다. 이 노드들만 제대로 이해하고 활용해도 여러분의 n8n 워크플로우 구축 능력은 한 단계 업그레이드될 거예요!
🚀 시작하며: 왜 핵심 노드에 집중해야 할까요?
n8n의 노드는 정말 많지만, 대부분의 복잡한 시나리오는 특정 몇몇 노드의 조합으로 해결할 수 있습니다. 마치 레고 블록의 기본 브릭들처럼, 이 핵심 노드들은 모든 복잡한 구조의 기본이 됩니다.
우리가 오늘 살펴볼 노드들은 다음과 같습니다:
- If 노드: 조건에 따라 흐름을 분기할 때 (Decision Making)
- Merge 노드: 분기된 흐름을 다시 합치거나 데이터를 병합할 때 (Flow & Data Unification)
- Set 노드: 데이터 항목을 추가, 수정, 삭제할 때 (Data Transformation – Simple)
- Code (Function) 노드: 복잡한 데이터 가공이나 커스텀 로직이 필요할 때 (Data Transformation – Advanced & Custom Logic)
- Try/Catch (Error Workflow): 워크플로우 에러를 우아하게 처리할 때 (Error Handling)
- (보너스) Split In Batches 노드: 대량의 데이터를 효율적으로 처리할 때 (Batch Processing)
자, 그럼 각 노드의 강력한 기능과 활용 예시를 자세히 알아볼까요? 💡
1. 복잡한 로직의 핵심 – If 노드와 Merge 노드
워크플로우가 단순히 순차적으로 진행되지 않고, 특정 조건에 따라 다른 경로로 진행되어야 할 때가 있습니다. 이때 If
노드와 Merge
노드가 빛을 발합니다.
🎯 If 노드: 조건부 분기점
If
노드는 입력된 데이터가 특정 조건을 만족하는지에 따라 워크플로우의 흐름을 두 가지(True/False)로 나누는 역할을 합니다.
-
언제 사용할까요?
- 사용자의 등급(VIP/일반)에 따라 다른 이메일을 보낼 때 📧
- 주문 금액이 특정 기준을 넘을 때만 할인 쿠폰을 발행할 때 💰
- API 응답 상태 코드에 따라 성공/실패 로직을 분리할 때 ✅❌
- 데이터 유효성을 검사하여 올바른 데이터만 다음 단계로 넘길 때 📝
-
사용 예시: 여러분은 웹사이트에서 문의가 들어오면 n8n으로 자동 처리하려고 합니다. 이때 문의 내용에 “긴급”이라는 키워드가 포함되어 있으면 담당자에게 바로 알림을 보내고, 아니면 일반 문의로 분류하여 데이터베이스에 저장하고 싶습니다.
- Trigger 노드:
Webhook
노드로 문의 데이터를 받습니다. - If 노드:
- Condition:
$json["message"].includes("긴급")
message
필드에 “긴급”이라는 단어가 포함되어 있으면True
브랜치로, 아니면False
브랜치로 흐름을 나눕니다.
- Condition:
- True 브랜치:
Slack
노드를 통해 담당자에게 즉시 알림을 보냅니다. 🔔 - False 브랜치:
Google Sheets
노드를 통해 일반 문의 시트에 저장합니다. 📊
이렇게 If 노드 하나로 문의 유형에 따른 맞춤형 처리가 가능해집니다!
- Trigger 노드:
🤝 Merge 노드: 분기된 흐름 합치기
Merge
노드는 If
노드 등으로 분기되었던 여러 브랜치를 다시 하나로 합치거나, 다른 노드에서 생성된 데이터를 하나로 병합하는 데 사용됩니다.
-
언제 사용할까요?
If
노드의 True/False 브랜치에서 각각 다른 작업을 수행한 후, 다음 공통 작업으로 넘어가기 위해 흐름을 합칠 때 🔄- 두 개의 다른 API에서 가져온 데이터를 하나의 JSON 객체로 합쳐서 다음 단계에 전달할 때 🧩
- 리스트에 여러 항목을 추가한 후 최종 리스트를 만들 때 ➕
-
사용 예시: 위의 If 노드 예시에서, 긴급 문의든 일반 문의든 처리가 끝난 후에는 “문의 처리 완료” 이메일을 고객에게 보내야 한다고 가정해 봅시다.
- (If 노드 이후)
Slack
노드 (True 브랜치)와Google Sheets
노드 (False 브랜치)의 다음 노드로Merge
노드를 연결합니다. - Merge 노드 설정:
- Mode:
Merge By Index
또는Combine
(이 경우엔 보통Combine
이 적합) - 각 브랜치에서 넘어온 데이터를 Merge 노드가 하나로 합쳐서 다음 노드로 전달합니다.
- Mode:
- 다음 노드:
Email
노드를 연결하여 고객에게 “문의 처리 완료” 이메일을 보냅니다. ✅
이렇게
Merge
노드를 사용하면 복잡한 분기 로직 후에도 깔끔하게 워크플로우를 이어갈 수 있습니다. - (If 노드 이후)
2. 데이터 가공의 마법사 – Set 노드와 Code 노드
자동화의 핵심은 데이터를 원하는 형태로 가공하고 처리하는 것입니다. Set
노드와 Code
노드는 이 역할을 수행하는 데 필수적입니다.
🏷️ Set 노드: 간편한 데이터 수정 및 추가
Set
노드는 기존 데이터 항목의 값을 변경하거나, 새로운 데이터 항목을 추가하거나, 불필요한 항목을 제거하는 데 사용됩니다. 복잡하지 않은 데이터 조작에 최적입니다.
-
언제 사용할까요?
- 특정 필드 이름을 변경할 때 (예:
user_name
->userName
) ✏️ - 모든 데이터에 현재 시간을 추가하고 싶을 때 ⏰
- 특정 고정 값을 모든 데이터 항목에 추가할 때 (예:
status: "processed"
) 🏷️ - 민감한 정보를 삭제하고 싶을 때 🚫
- 특정 필드 이름을 변경할 때 (예:
-
사용 예시: 여러분은 고객 정보를 받아 이메일을 보내려고 합니다. 그런데 고객 이름이 “first_name”, “last_name”으로 분리되어 있고, 이메일 주소는
email_address
로 되어 있습니다. 이메일 템플릿에 사용할 수 있도록fullName
과email
이라는 필드를 만들고 싶습니다.- Trigger 노드: 고객 데이터를 받습니다. (예:
{ "first_name": "김", "last_name": "철수", "email_address": "chulsoo@example.com" }
) - Set 노드:
- Mode:
Merge
- Value:
fullName
:{{ $json["first_name"] }} {{ $json["last_name"] }}
email
:{{ $json["email_address"] }}
- Mode:
- 결과:
{ "first_name": "김", "last_name": "철수", "email_address": "chulsoo@example.com", "fullName": "김 철수", "email": "chulsoo@example.com" }
이렇게 원하는 형식으로 데이터가 가공됩니다. ✨
- Trigger 노드: 고객 데이터를 받습니다. (예:
👨💻 Code (Function) 노드: 무한한 데이터 가공의 자유
Code
노드는 JavaScript 코드를 직접 작성하여 데이터를 가공하거나, 복잡한 로직을 구현할 수 있게 해주는 궁극의 노드입니다. n8n 내장 노드로는 해결하기 어려운 모든 문제를 해결할 수 있는 “만능 칼”과 같습니다.
-
언제 사용할까요?
- 매우 복잡한 조건부 로직이나 계산이 필요할 때 🧮
- 여러 개의 중첩된 JSON 데이터를 복잡하게 변환해야 할 때 🌳
- 외부 라이브러리(Axios, Lodash 등)를 사용하여 특정 작업을 수행해야 할 때 🌐
- 동적으로 URL을 생성하거나, 복잡한 문자열 처리가 필요할 때 🔗
- 배열 내부의 항목들을 반복하며 처리해야 할 때 🔄
-
사용 예시: 여러분은 쇼핑몰 주문 데이터를 처리하는데, 각 주문에 포함된 상품들의 총 가격을 계산하고, 특정 조건에 따라 배송비를 다르게 적용해야 합니다. 또한, 상품 목록(배열)에서 특정 상품만 필터링해야 합니다.
Set
노드로는 복잡하고,Code
노드가 제격입니다.// 입력 데이터 예시: // { // "orderId": "ORD123", // "items": [ // { "name": "Laptop", "price": 1200, "quantity": 1 }, // { "name": "Mouse", "price": 25, "quantity": 2 }, // { "name": "Keyboard", "price": 75, "quantity": 1 } // ], // "customerTier": "Gold" // } for (const item of $input.all()) { const order = item.json; // 1. 총 상품 가격 계산 let totalItemsPrice = 0; for (const product of order.items) { totalItemsPrice += product.price * product.quantity; } // 2. 배송비 계산 (예시: Gold 고객은 무료 배송, 100달러 미만 주문은 5달러, 이상은 무료) let shippingFee = 0; if (order.customerTier === "Gold") { shippingFee = 0; // 골드 고객 무료 배송 } else if (totalItemsPrice product.name === "Laptop"); // 결과 객체에 추가 order.totalItemsPrice = totalItemsPrice; order.shippingFee = shippingFee; order.finalPrice = totalItemsPrice + shippingFee; order.filteredItems = filteredItems; // 필터링된 상품 리스트 추가 // 다음 노드로 전달할 데이터 반환 return [{ json: order }]; }
Code
노드를 사용하면 이렇게 복잡한 계산과 배열 필터링을 한 번에 처리할 수 있습니다. 무궁무진한 가능성을 가진 노드이니, JavaScript에 익숙하다면 꼭 활용해 보세요!
3. 대량 데이터 처리의 달인 – Split In Batches 노드
API 호출 시 레이트 리밋에 걸리거나, 수천 개의 데이터 항목을 개별적으로 처리해야 할 때가 있습니다. 이때 Split In Batches
노드가 큰 도움이 됩니다.
📦 Split In Batches 노드: 효율적인 분할 처리
Split In Batches
노드는 대량의 입력 데이터를 지정된 크기의 “배치(batch)”로 분할하여 다음 노드로 전달합니다. 이를 통해 API 과부하를 막고, 각 항목에 대한 개별적인 처리 로직을 구현하기 용이합니다.
-
언제 사용할까요?
- 외부 API에 데이터를 전송할 때, API의 초당 요청 제한(Rate Limit)을 준수해야 할 때 ⏱️
- 1000개의 이메일 주소에 각각 맞춤형 이메일을 보낼 때 (한 번에 보내면 부담이 크므로 50개씩 끊어서 보낼 때) 📧
- 각 데이터 항목에 대해 복잡한 계산이나 외부 서비스 호출이 필요하여 한 번에 처리하기 어려울 때 📈
-
사용 예시: 여러분은 1,000개의 상품 정보가 담긴 JSON 리스트를 받았고, 이 정보를 한 번에 50개씩 묶어 외부 쇼핑몰 API로 전송해야 합니다.
- Trigger 노드: 1,000개 상품 데이터 리스트를 받습니다. (예:
[{...}, {...}, ..., {1000번째}]
) - Split In Batches 노드:
- Batch Size:
50
으로 설정합니다. - 이 노드를 통과하면, 다음 노드로는 50개씩 묶인 상품 데이터가 순차적으로 전달됩니다.
- Batch Size:
- HTTP Request 노드: 50개씩 묶인 상품 데이터를 외부 API로 전송합니다. 🌐
- (옵션)
Wait
노드를 추가하여 각 배치 사이에 지연 시간을 줄 수 있습니다. (예:5초
대기) ⏸️
이렇게 하면 1,000개의 상품 데이터를 20번에 걸쳐(1000/50=20) 안정적으로 처리할 수 있게 됩니다.
- Trigger 노드: 1,000개 상품 데이터 리스트를 받습니다. (예:
4. 에러 없는 워크플로우를 위한 방패 – Try/Catch (Error Workflow)
복잡한 워크플로우를 구축할 때는 항상 예외 상황을 염두에 두어야 합니다. 외부 API 오류, 잘못된 데이터 형식 등 예기치 않은 문제로 워크플로우가 중단되는 것을 막으려면 Try/Catch
또는 에러 워크플로우 설정이 필수적입니다.
🛡️ Try/Catch (Error Workflow): 견고한 자동화 시스템
n8n에서는 Error Trigger
노드를 사용하여 별도의 “에러 워크플로우”를 만들거나, 메인 워크플로우 내에서 Try/Catch
블록을 구성하여 특정 노드의 에러를 직접 처리할 수 있습니다.
-
언제 사용할까요?
- 외부 API 호출이 실패했을 때 재시도를 하거나, 담당자에게 알림을 보낼 때 📢
- 데이터 처리 중 예상치 못한 값이 들어와 노드 실행에 실패했을 때, 에러를 로깅하고 워크플로우가 중단되지 않게 할 때 ✍️
- 중요한 작업이 실패했을 때, 사용자에게 알림 이메일을 보내거나, 롤백 작업을 수행할 때 ↩️
-
사용 예시: 여러분은 주문 정보를 ERP 시스템에 입력하는 워크플로우를 만들었습니다. 만약 ERP 시스템과의 통신 오류로 주문 정보 입력에 실패하면, 슬랙으로 담당자에게 알리고, 실패한 주문 정보를 별도의 실패 로그에 기록하고 싶습니다.
방법 1: 메인 워크플로우 내 Try/Catch 노드 사용
- Trigger 노드: 주문 데이터를 받습니다.
- Try Catch 노드: 이 노드를 추가하고, 안에
HTTP Request
노드 (ERP 시스템 호출)를 넣습니다. - Catch 브랜치:
HTTP Request
노드 실행 중 오류가 발생하면Catch
브랜치로 흐름이 넘어갑니다. - Slack 노드 (Catch 브랜치): 담당자에게 “ERP 주문 입력 실패! 주문 ID: {{ $json.orderId }}”와 같은 메시지를 보냅니다.
- Google Sheets 노드 (Catch 브랜치): 실패한 주문 데이터를 “ERP_Fail_Log” 시트에 추가합니다. 📝
방법 2: 별도의 Error Workflow 구성 (전역 에러 처리)
- 새로운 워크플로우 생성 (Error Workflow):
Error Trigger
노드를 시작 노드로 추가합니다.Error Trigger
노드에 “Workflow Name” 필터를 적용하여 특정 워크플로우의 에러만 감지할 수 있습니다.Slack
노드를 연결하여 에러 발생 시 알림을 보냅니다.$json.error.message
등 에러 정보를 활용할 수 있습니다.Google Sheets
또는Database
노드를 연결하여 에러 로그를 기록합니다.
이처럼
Try/Catch
나Error Workflow
는 워크플로우를 더욱 견고하게 만들어, 예상치 못한 상황에서도 시스템이 멈추지 않고 적절하게 대응할 수 있도록 돕습니다.
💡 마무리하며: 복잡함 속의 단순함 찾기
오늘 우리는 n8n 워크플로우의 복잡성을 해결하는 데 핵심적인 5가지 노드와 한 가지 보너스 노드를 살펴보았습니다.
- If & Merge: 흐름 제어의 기본이자 핵심.
- Set & Code: 데이터 가공의 필수 도구 (간단한 것부터 복잡한 것까지).
- Split In Batches: 대규모 데이터 처리의 효율성.
- Try/Catch (Error Workflow): 안정성과 견고함 보장.
처음에는 이 노드들의 조합이 어렵게 느껴질 수 있지만, 실제 시나리오에 적용하며 연습하다 보면 자연스럽게 익숙해질 것입니다. 모든 복잡한 워크플로우는 이처럼 단순한 핵심 블록들의 논리적인 조합으로 이루어져 있습니다.
가장 중요한 것은 “문제를 작은 단위로 나누어 생각하는 것”입니다. 전체적인 워크플로우를 한 번에 만들려고 하지 말고, 각 단계에서 어떤 노드가 어떤 역할을 할지 고민해 보세요.
n8n과 함께라면 여러분의 아이디어를 현실로 만드는 것이 훨씬 쉬워질 겁니다. 이 핵심 노드들을 마스터하고 더욱 강력한 자동화 워크플로우를 구축해 보세요!
궁금한 점이나 자신만의 n8n 활용 팁이 있다면 댓글로 공유해주세요! 👇 함께 성장해나가는 n8n 커뮤니티가 되길 바랍니다. 행복한 자동화 생활하세요! 🥳 D