안녕하세요, 자동화와 효율성을 사랑하는 여러분! n8n을 사용하시면서 “와, 이거 정말 편하다!”라고 느끼셨을 겁니다. 하지만 n8n은 겉으로 보이는 것보다 훨씬 더 깊고 강력한 기능들을 숨기고 있다는 사실을 알고 계셨나요? 마치 게임의 숨겨진 보너스 레벨이나 영화의 이스터 에그처럼, n8n에도 여러분의 워크플로우를 한 단계 업그레이드할 수 있는 비밀스러운 기능들이 존재합니다.
오늘은 구글 최신 검색을 통해 얻은 정보와 실제 n8n 사용자 커뮤니티의 팁을 바탕으로, 여러분만 몰랐던 n8n의 “숨겨진” 기능들을 파헤쳐 보겠습니다. 이 글을 다 읽고 나면 n8n 마스터로 거듭나는 것은 시간문제일 거예요! 🧙♂️
1. 표현식(Expressions) 마스터하기: 데이터 흐름의 마법사 ✨
n8n의 핵심이자 가장 강력한 기능 중 하나는 바로 표현식(Expressions)입니다. 단순히 노드 간에 데이터를 전달하는 것을 넘어, 원하는 데이터를 추출하고 가공하며 복잡한 로직을 구현할 수 있게 해주는 마법 같은 도구죠. 많은 분들이 기본적인 {{ $json.key }}
형태만 사용하시지만, 더 깊이 들어가면 무궁무진한 활용법이 있습니다.
1.1. $node
를 이용한 다른 노드 데이터 참조 🔗
특정 노드의 결과를 다음 노드에서 참조하는 것은 기본이지만, 때로는 현재 워크플로우의 다른 어떤 노드든 그 결과를 가져와야 할 때가 있습니다. 이럴 때 $node
객체가 빛을 발합니다.
예시 💡: 워크플로우가 “HTTP Request” 노드로 API를 호출하고, 그 응답으로 받은 데이터를 “Set” 노드에서 가공하고 싶을 때:
- HTTP Request 노드 (예:
GetUserData
):https://api.example.com/users/123
호출 - Set 노드: “GetUserData” 노드의 응답 중
name
과email
만 가져오고 싶다면:Value
:{{ $node["GetUserData"].json.name }}
Value
:{{ $node["GetUserData"].json.email }}
이처럼 노드 이름을 정확히 알고 있다면, 워크플로우의 어떤 지점에서도 해당 노드의 출력 데이터를 참조할 수 있습니다. 이는 복잡한 분기나 합병이 있는 워크플로우에서 매우 유용합니다.
1.2. $itemIndex
를 활용한 반복문 제어 🔢
n8n은 기본적으로 들어오는 데이터를 아이템(Item) 단위로 처리하며, 여러 개의 아이템이 들어오면 각 아이템에 대해 노드를 한 번씩 실행합니다. 이때, 현재 처리 중인 아이템의 순서(인덱스)를 알고 싶다면 $itemIndex
를 사용할 수 있습니다.
예시 💡:
Split In Batches
노드로 100개의 데이터를 10개씩 묶어 처리할 때, 각 배치마다 고유한 순번을 부여하고 싶을 경우:
- Split In Batches 노드: 데이터를 10개씩 분할
- Set 노드: 각 배치 아이템에
batchNumber
필드 추가Value
:{{ Math.floor($itemIndex / 10) + 1 }}
(0부터 시작하는 인덱스를 활용하여 1부터 시작하는 배치 번호 생성)
이렇게 하면 첫 10개 아이템은 batchNumber: 1
, 다음 10개는 batchNumber: 2
식으로 데이터를 처리할 수 있어, 로깅이나 외부 서비스에 데이터를 전송할 때 매우 유용합니다.
1.3. $parameter
를 이용한 노드 설정 값 참조 ⚙️
가끔 워크플로우 내에서 특정 노드의 설정 값을 동적으로 가져와야 할 필요가 있습니다. 예를 들어, 특정 API 키나 설정된 URL 등을 다른 노드에서 재활용하고 싶을 때 말이죠. $parameter
는 바로 이럴 때 사용됩니다.
예시 💡:
Google Sheets
노드에서 사용한 스프레드시트 ID를 “Code” 노드에서 로깅하고 싶을 때:
- Google Sheets 노드 (
UpdateSheet
):Spreadsheet ID
에 특정 ID 입력 - Code 노드:
const spreadsheetId = $parameter["UpdateSheet"].spreadsheetId; console.log(`사용된 스프레드시트 ID: ${spreadsheetId}`); return items;
이것은 노드의 입력 데이터(
$json
)가 아닌, 노드 자체의 설정 파라미터에 접근하는 방식이라 매우 강력합니다.
2. 에러 처리(Error Handling): 견고한 워크플로우 만들기 🛡️
자동화는 편리하지만, 예기치 않은 에러는 워크플로우를 중단시키고 시간을 낭비하게 합니다. n8n은 이러한 에러를 우아하게 처리하고, 워크플로우가 중단 없이 계속 실행되도록 돕는 강력한 기능을 제공합니다.
2.1. Try/Catch
노드: 특정 구역의 에러 잡기 🚧
프로그래밍에서 자주 사용되는 Try-Catch
블록과 유사합니다. Try
노드 안에 연결된 노드들에서 에러가 발생하면, Catch
노드로 제어를 넘겨 에러를 처리할 수 있게 합니다.
예시 💡: 외부 API 호출이 실패할 경우, 사용자에게 알림을 보내는 워크플로우:
- Try 노드: 시작점
Try
노드 아래에 HTTP Request 노드 (외부 API 호출) 연결- HTTP Request 노드:
https://api.example.com/non_existent_endpoint
(일부러 에러 발생)
- Catch 노드:
Catch
노드에 Slack 노드 (에러 알림 전송) 연결- Slack 노드 메시지:
{{ $node["HTTP Request"].error.message }}
(에러 메시지 출력)
이 경우, HTTP Request 노드에서 에러가 발생하면 워크플로우가 중단되지 않고 Catch 노드로 넘어갑니다. Catch 노드에서는 Slack으로 에러 메시지를 보내고 워크플로우를 계속 진행시키거나, 다른 복구 작업을 수행할 수 있습니다. Catch
노드에는 에러와 관련된 정보 ($error
)가 담겨 있으니 이를 활용하여 상세한 에러 처리가 가능합니다.
2.2. OnError
워크플로우: 전역 에러 처리 🚨
워크플로우 빌더 좌측 하단의 “⚙️ Settings”를 클릭하면 “Error Workflow” 설정을 볼 수 있습니다. 여기에 특정 워크플로우를 OnError
워크플로우로 지정해두면, n8n 인스턴스 내의 모든 워크플로우에서 예기치 않은 에러가 발생했을 때 자동으로 해당 OnError
워크플로우가 실행됩니다.
예시 💡: 모든 워크플로우의 에러를 한 곳에서 모아 Slack으로 알림:
- 별도의
Error Notification Workflow
를 생성합니다. - 이 워크플로우 내에 Slack 노드를 배치하고, 에러 정보 (
{{ $json.error }}
등)를 보냅니다. - 다른 워크플로우의 설정에서
Error Workflow
를 이Error Notification Workflow
로 지정합니다.
이는 대규모 자동화를 관리할 때 중앙 집중식으로 에러를 모니터링하고 대응할 수 있게 해주어, 운영의 효율성을 극대화합니다.
3. 고급 데이터 조작: 데이터의 연금술사 ⚗️
n8n은 다양한 데이터 형식을 다루는 데 능숙하지만, 특히 Set
노드와 Split In Batches
노드를 활용하면 복잡한 데이터 흐름을 훨씬 유연하게 제어할 수 있습니다.
3.1. Set
노드의 “Keep only set” vs. “Merge” 모드 🔄
Set
노드는 데이터를 추가하거나 변경하는 데 사용되는데, 이 노드에는 “Options” 섹션에 중요한 모드 변경 기능이 있습니다. 기본값은 “Merge” (새로운 필드를 기존 데이터에 추가)이지만, “Keep only set”으로 변경하면 입력된 모든 필드를 제거하고 Set
노드에서 설정한 필드만 남길 수 있습니다.
예시 💡:
-
입력 데이터:
[ { "id": 1, "name": "Alice", "age": 30, "city": "Seoul" } ]
-
Set 노드 설정:
Field
:user_name
Value
:{{ $json.name }}
Mode
: “Merge”- 결과:
[ { "id": 1, "name": "Alice", "age": 30, "city": "Seoul", "user_name": "Alice" } ]
(기존 데이터에
user_name
필드가 추가됨)
-
Set 노드 설정:
Field
:user_name
Value
:{{ $json.name }}
Mode
: “Keep only set”- 결과:
[ { "user_name": "Alice" } ]
(
id
,name
,age
,city
필드는 제거되고user_name
만 남음)
데이터를 정제하거나 필요한 정보만 다음 노드로 전달해야 할 때 “Keep only set” 모드는 불필요한 데이터를 제거하여 워크플로우를 더 깔끔하고 효율적으로 만듭니다.
3.2. Split In Batches
노드: 대량 데이터 분할 처리 📦
많은 양의 데이터를 외부 서비스로 전송할 때, API 호출 제한(Rate Limit)에 걸리거나 한 번에 너무 많은 데이터를 처리하기 어려울 때가 있습니다. 이럴 때 Split In Batches
노드가 구세주가 됩니다.
예시 💡: 1000개의 고객 정보를 100개씩 묶어 마케팅 자동화 툴로 전송:
- Get Data 노드: 1000개의 고객 정보 가져오기
- Split In Batches 노드:
Batch Size
:100
Continue On Error
:true
(한 배치에 에러가 나도 다음 배치 계속 처리)
- HTTP Request 노드 (또는 마케팅 툴 노드): 각 배치 전송
이렇게 하면 1000개의 데이터를 한 번에 보내는 대신, 10번에 걸쳐 100개씩 나눠 보내므로 API 제한에 걸릴 위험을 줄이고 안정적인 처리를 보장할 수 있습니다.
4. 코드 노드(Code Node): 무한한 가능성의 문 🚀
n8n의 노드들로 대부분의 작업을 처리할 수 있지만, 때로는 복잡한 논리나 특정 데이터 변환이 필요할 때가 있습니다. 이때는 JavaScript 기반의 Code
노드를 활용하여 직접 코드를 작성할 수 있습니다. 단순한 스크립트부터 외부 라이브러리(NPM) 사용까지 가능합니다.
4.1. 간단한 데이터 필터링/변환 📝
예시 💡: 이름이 ‘John’인 사용자만 필터링하거나, 특정 필드의 값을 변경하는 경우:
// 입력으로 들어온 모든 아이템에 대해 실행
for (const item of items) {
// 이름이 'John'인 아이템만 남기기
if (item.json.name === 'John') {
return [item]; // 해당 아이템만 반환
}
}
return []; // 'John'이 없으면 빈 배열 반환
혹은 모든 이름에 “Mr./Ms.”를 붙이고 싶을 때:
// 입력으로 들어온 모든 아이템에 대해 실행
for (const item of items) {
item.json.full_name = `Mr./Ms. ${item.json.name}`;
}
return items; // 변경된 아이템 배열 반환
Code
노드는 items
배열을 입력받아 items
배열을 반환해야 합니다. items
는 [{ json: { ... }, binary: { ... } }]
형태의 객체 배열입니다.
4.2. 바이너리 데이터 처리 및 NPM 모듈 사용 🌐
Code
노드는 binary
데이터를 직접 조작할 수도 있고, n8n 서버에 설치된 NPM 모듈을 require()
하여 사용할 수도 있습니다. 예를 들어, crypto
모듈로 해싱을 하거나, axios
로 복잡한 HTTP 요청을 보내는 등의 작업이 가능합니다. 이 기능은 정말 무궁무진한 커스터마이징 가능성을 열어줍니다.
5. 디버깅과 최적화: 문제 해결사의 필수 도구 🔍
아무리 잘 만든 워크플로우라도 에러가 발생하거나 예상대로 동작하지 않을 때가 있습니다. n8n은 강력한 디버깅 도구를 제공하여 문제를 빠르게 파악하고 해결할 수 있도록 돕습니다.
5.1. Test Workflow
및 단계별 실행 ▶️⏸️
워크플로우 빌더 상단의 “Test Workflow” 버튼을 누르면 워크플로우가 실행되면서 각 노드의 입출력 데이터를 실시간으로 확인할 수 있습니다.
- 단계별 실행: 각 노드 사이의 작은 “▷” 버튼을 클릭하면 해당 노드까지만 실행되고 일시 정지됩니다. 이를 통해 특정 노드에서 어떤 데이터가 어떻게 처리되는지 정확하게 확인하고 문제를 찾을 수 있습니다.
- JSON 데이터 뷰어: 각 노드의 출력 데이터는 JSON 형태로 깔끔하게 표시되어, 원하는 필드가 제대로 추출되었는지, 데이터 형식이 맞는지 등을 쉽게 검토할 수 있습니다.
5.2. Logs
확인: 실행 기록 추적 📜
워크플로우가 예상대로 실행되지 않았거나, 특정 시점에 어떤 일이 일어났는지 알고 싶을 때 “Executions” 탭의 Logs
를 확인하세요. 여기에는 워크플로우의 시작/종료, 각 노드의 실행 여부, 발생한 에러 메시지 등이 상세하게 기록됩니다. 이는 특히 백그라운드에서 실행되는 스케줄링된 워크플로우의 문제를 진단할 때 필수적입니다.
6. 그 외의 유용한 팁들 💡
- 서브 워크플로우(Sub-workflows) 활용: 반복적으로 사용되는 복잡한 로직이 있다면 별도의 워크플로우로 만들고,
Execute Workflow
노드를 통해 호출할 수 있습니다. 이는 워크플로우를 모듈화하여 관리하기 쉽게 만들고, 재사용성을 높여줍니다. 마치 함수를 만들어 사용하는 것과 같습니다. - 자격 증명(Credentials)의 재사용 및 보안: API 키, 사용자 이름, 비밀번호 등 민감한 정보는 각 노드에 직접 입력하기보다는 “Credentials” 메뉴에 등록하여 사용하세요. 한 번 등록하면 여러 워크플로우에서 재사용할 수 있으며, 민감 정보가 워크플로우 JSON 파일에 직접 노출되는 것을 방지하여 보안을 강화합니다.
- 공식 문서와 커뮤니티 활용: n8n 공식 문서 (docs.n8n.io)는 가장 정확하고 최신 정보를 제공합니다. 또한, Discord 채널이나 포럼(community.n8n.io)은 막히는 부분이 있을 때 도움을 얻을 수 있는 최고의 장소입니다. 전 세계의 n8n 사용자들이 활발하게 지식을 공유하고 있습니다.
결론: n8n의 무한한 가능성을 탐험하세요! 🌟
n8n은 단순한 자동화 툴이 아니라, 여러분의 아이디어를 현실로 만들어 줄 수 있는 강력한 플랫폼입니다. 오늘 소개해 드린 “숨겨진” 기능들은 n8n의 빙산의 일각일 뿐입니다. 중요한 것은 두려워하지 않고 다양한 노드를 조합해 보고, 표현식을 가지고 놀며, 디버깅 툴을 적극적으로 활용하는 것입니다.
이 글이 여러분의 n8n 활용 능력을 한 단계 더 끌어올리는 데 도움이 되기를 바랍니다. 지금 바로 n8n 빌더를 열고, 새로운 기능들을 직접 시도해 보세요! 당신만의 놀라운 자동화 워크플로우를 만들어낼 수 있을 겁니다. 해피 오토메이션! 🎉 D