화. 8월 5th, 2025

안녕하세요, 자동화와 효율성을 사랑하는 여러분! n8n을 사용하시면서 “와, 이거 정말 편하다!”라고 느끼셨을 겁니다. 하지만 n8n은 겉으로 보이는 것보다 훨씬 더 깊고 강력한 기능들을 숨기고 있다는 사실을 알고 계셨나요? 마치 게임의 숨겨진 보너스 레벨이나 영화의 이스터 에그처럼, n8n에도 여러분의 워크플로우를 한 단계 업그레이드할 수 있는 비밀스러운 기능들이 존재합니다.

오늘은 구글 최신 검색을 통해 얻은 정보와 실제 n8n 사용자 커뮤니티의 팁을 바탕으로, 여러분만 몰랐던 n8n의 “숨겨진” 기능들을 파헤쳐 보겠습니다. 이 글을 다 읽고 나면 n8n 마스터로 거듭나는 것은 시간문제일 거예요! 🧙‍♂️


1. 표현식(Expressions) 마스터하기: 데이터 흐름의 마법사 ✨

n8n의 핵심이자 가장 강력한 기능 중 하나는 바로 표현식(Expressions)입니다. 단순히 노드 간에 데이터를 전달하는 것을 넘어, 원하는 데이터를 추출하고 가공하며 복잡한 로직을 구현할 수 있게 해주는 마법 같은 도구죠. 많은 분들이 기본적인 {{ $json.key }} 형태만 사용하시지만, 더 깊이 들어가면 무궁무진한 활용법이 있습니다.

1.1. $node를 이용한 다른 노드 데이터 참조 🔗

특정 노드의 결과를 다음 노드에서 참조하는 것은 기본이지만, 때로는 현재 워크플로우의 다른 어떤 노드든 그 결과를 가져와야 할 때가 있습니다. 이럴 때 $node 객체가 빛을 발합니다.

예시 💡: 워크플로우가 “HTTP Request” 노드로 API를 호출하고, 그 응답으로 받은 데이터를 “Set” 노드에서 가공하고 싶을 때:

  1. HTTP Request 노드 (예: GetUserData): https://api.example.com/users/123 호출
  2. Set 노드: “GetUserData” 노드의 응답 중 nameemail만 가져오고 싶다면:
    • Value: {{ $node["GetUserData"].json.name }}
    • Value: {{ $node["GetUserData"].json.email }}

이처럼 노드 이름을 정확히 알고 있다면, 워크플로우의 어떤 지점에서도 해당 노드의 출력 데이터를 참조할 수 있습니다. 이는 복잡한 분기나 합병이 있는 워크플로우에서 매우 유용합니다.

1.2. $itemIndex를 활용한 반복문 제어 🔢

n8n은 기본적으로 들어오는 데이터를 아이템(Item) 단위로 처리하며, 여러 개의 아이템이 들어오면 각 아이템에 대해 노드를 한 번씩 실행합니다. 이때, 현재 처리 중인 아이템의 순서(인덱스)를 알고 싶다면 $itemIndex를 사용할 수 있습니다.

예시 💡: Split In Batches 노드로 100개의 데이터를 10개씩 묶어 처리할 때, 각 배치마다 고유한 순번을 부여하고 싶을 경우:

  1. Split In Batches 노드: 데이터를 10개씩 분할
  2. 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” 노드에서 로깅하고 싶을 때:

  1. Google Sheets 노드 (UpdateSheet): Spreadsheet ID에 특정 ID 입력
  2. 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 호출이 실패할 경우, 사용자에게 알림을 보내는 워크플로우:

  1. Try 노드: 시작점
    • Try 노드 아래에 HTTP Request 노드 (외부 API 호출) 연결
    • HTTP Request 노드: https://api.example.com/non_existent_endpoint (일부러 에러 발생)
  2. 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으로 알림:

  1. 별도의 Error Notification Workflow를 생성합니다.
  2. 이 워크플로우 내에 Slack 노드를 배치하고, 에러 정보 ({{ $json.error }} 등)를 보냅니다.
  3. 다른 워크플로우의 설정에서 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개씩 묶어 마케팅 자동화 툴로 전송:

  1. Get Data 노드: 1000개의 고객 정보 가져오기
  2. Split In Batches 노드:
    • Batch Size: 100
    • Continue On Error: true (한 배치에 에러가 나도 다음 배치 계속 처리)
  3. 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

답글 남기기

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