Warning: session_start(): Session cannot be started after headers have already been sent in /var/www/html/wp-content/plugins/postmagthemes-demo-import/inc/WXRImporter.php on line 12 Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/wp-content/themes/generatepress/functions.php:11) in /var/www/html/wp-includes/feed-rss2.php on line 8 n8n 데이터 추출 및 필터링 – air-geumwoo BLOG https://air-geumwoo.com Mon, 27 Jul 2026 11:08:23 +0000 ko-KR hourly 1 https://wordpress.org/?v=7.0.3 n8n item 표현식 가이드: 동적 데이터 추출 및 고급 활용법 https://air-geumwoo.com/n8n-item-expressions-guide/ https://air-geumwoo.com/n8n-item-expressions-guide/#respond Mon, 27 Jul 2026 11:08:23 +0000 https://air-geumwoo.com/n8n-item-expressions-guide/ 더 읽기]]>

n8n item 표현식 완벽 가이드: 동적 데이터 추출을 위한 고급 활용법

n8n에서 자바스크립트 기반 n8n item 표현식을 사용하여 아이템 데이터에 동적으로 접근하고 복잡한 JSON 데이터를 효과적으로 추출하는 고급 활용법을 배우세요. 워크플로우를 한 차원 높여보세요.

핵심 요약: n8n item 표현식은 워크플로우 자동화의 핵심으로, 동적 데이터 처리를 가능하게 합니다. 이 가이드는 {{ }} 구문과 $json 변수 같은 기본 개념부터, $('Node Name')을 활용한 다른 노드 데이터 접근법, 그리고 map(), filter() 등 자바스크립트 배열 메서드를 사용한 고급 데이터 추출 기술까지 다룹니다. 또한, 옵셔널 체이닝(?.)을 활용한 오류 방지 등 안정적인 워크플로우 구축을 위한 베스트 프랙티스를 제공하여 n8n 활용 능력을 극대화하는 방법을 안내합니다.

목차

2026년 7월 27일 오늘날, n8n 워크플로우 자동화에서 데이터의 동적인 처리와 정확한 추출은 더 이상 선택이 아닌 필수입니다. 정적인 값만으로는 실시간으로 변화하는 API 응답이나 데이터베이스 결과물을 처리하고 복잡한 비즈니스 로직을 구현하기 어렵습니다. 이러한 한계를 극복하기 위해 n8n은 강력한 표현식(Expressions) 기능을 제공합니다.

본 가이드에서는 n8n item 표현식(Expressions)을 사용하여 워크플로우의 유연성과 강력함을 극대화하는 방법을 심층적으로 다룹니다. 특히 자바스크립트 기반 표현식을 통해 아이템 데이터에 동적으로 접근하고 복잡한 n8n JSON 데이터 접근을 통해 데이터를 효과적으로 추출하는 고급 활용법에 초점을 맞춥니다. 단순히 값을 전달하는 것을 넘어, 데이터를 가공하고 조건에 따라 흐름을 제어하는 핵심 기술을 배우게 될 것입니다.

이 글을 통해 여러분은 n8n 표현식의 기본 문법부터 다른 노드의 데이터를 참조하는 방법, 복잡한 배열 데이터를 자유자재로 가공하는 기술, 그리고 오류를 방지하는 베스트 프랙티스까지 학습하여 n8n 데이터 추출의 전문가가 될 수 있습니다. 이제 여러분의 n8n 워크플로우를 한 차원 높은 수준으로 끌어올릴 준비를 시작해 봅시다.

n8n 워크플로우에서 데이터가 노드 사이를 흐르는 미래 지향적인 디지털 인터페이스 이미지

1. n8n item 표현식이란? (기본 개념과 중요성)

n8n item 표현식은 n8n 워크플로우 내에서 동적으로 값을 참조하고 데이터를 조작할 수 있게 해주는 핵심 기능입니다. 모든 표현식은 이중 중괄호 {{ }} 안에 자바스크립트 코드를 작성하는 방식으로 사용됩니다. 정적 텍스트가 아닌, 워크플로우 실행 시점의 데이터를 기반으로 동적인 결과물을 만들어내므로, 자동화의 지능과 유연성을 결정하는 가장 중요한 요소라고 할 수 있습니다.

이러한 표현식이 왜 필수적인지 이해하는 것은 중요합니다. 정해진 값만 입력할 수 있다면 워크플로우는 단순한 데이터 복사 도구에 머무를 것입니다. 하지만 표현식을 사용하면 API 응답, 데이터베이스 조회 결과 등 실행 시마다 달라지는 데이터에 유연하게 대응할 수 있습니다. 또한, 조건에 따라 다른 동작을 수행하거나 데이터를 특정 형식으로 가공하여 후속 노드로 전달하는 등 복잡한 비즈니스 로직 구현이 가능해집니다.

표현식의 필요성

  • 동적 데이터 대응: API 응답, 데이터베이스 조회 결과 등 실행 시마다 달라지는 데이터에 유연하게 대응합니다.
  • 워크플로우 유연성 확보: 조건에 따라 다른 동작을 수행하거나 데이터를 가공하여 후속 노드로 전달하는 등 복잡한 로직 구현이 가능해집니다.
  • 재사용성 증대: 하나의 워크플로우를 다양한 입력 값과 시나리오에 대응하도록 설계할 수 있어 생산성이 크게 향상됩니다.

기본 문법 및 핵심 변수

n8n 표현식의 가장 기본이 되는 문법과 변수는 다음과 같습니다. 이 두 가지만 알아도 기본적인 데이터 참조는 대부분 해결할 수 있습니다.

변수 설명 사용 예시
{{ }} 모든 n8n 표현식을 감싸는 기본 구문입니다. 이 안에 자바스크립트 코드를 작성합니다. {{ $json.name }}
$json 현재 노드에서 처리 중인 단일 아이템의 JSON 데이터에 접근하는 가장 일반적인 방법입니다. {{ $json.email }}
$env n8n 인스턴스에 설정된 환경 변수(Environment Variables)에 접근할 때 사용합니다. API 키 등 민감한 정보를 안전하게 관리할 수 있습니다. {{ $env.API_KEY }}

$json 변수는 워크플로우를 따라 흘러 들어온 데이터의 내용에 접근하는 관문과 같습니다. 예를 들어, 구글 시트에서 읽어온 데이터가 { "name": "홍길동", "email": "gildong@example.com" } 이라는 JSON 객체라면, {{ $json.name }} 표현식은 “홍길동”이라는 값을 반환하게 됩니다. 이러한 기본 개념을 바탕으로 더 복잡한 데이터 구조에 접근하는 방법을 차근차근 배워보겠습니다.

모니터 화면에 표시된 n8n 표현식 문법과 $json 변수가 강조된 코드 에디터의 근접 사진

2. 핵심 데이터 접근 방법: `$json`과 `$(‘Node Name’)`을 활용한 n8n JSON 데이터 접근

n8n 워크플로우에서 데이터는 여러 노드를 거치며 흐릅니다. 이때, 현재 노드에 막 도착한 데이터를 사용하는 것뿐만 아니라, 이전에 실행된 특정 노드의 결과를 참조해야 하는 경우가 빈번하게 발생합니다. n8n은 이를 위해 $json$('Node Name')이라는 두 가지 핵심적인 데이터 접근 방식을 제공합니다.

가. 현재 아이템 데이터 접근: `$json`

$json은 워크플로우가 아이템을 처리하는 바로 그 노드 안에서, 해당 아이템의 데이터에 접근하는 가장 직접적이고 빈번하게 사용되는 방법입니다. 이전 노드에서 전달받은 데이터를 현재 노드에서 사용하고자 할 때 사용하며, ‘현재 아이템의 내용물’이라고 생각하면 이해하기 쉽습니다.

예를 들어, Read Google Sheet 노드가 여러 행의 데이터를 읽어온 후 Set 노드로 전달했다고 가정해 봅시다. Set 노드는 각 행(아이템)을 순차적으로 처리하게 됩니다. 이때 Set 노드 안에서 {{ $json.email }}이라는 표현식을 사용하면, 현재 처리 중인 행의 ’email’ 컬럼 값을 정확하게 가져올 수 있습니다.

나. 다른 노드의 데이터 접근: `$(‘Node Name’).item`

워크플로우가 복잡해지면, 현재 아이템의 데이터뿐만 아니라 특정 노드(예: 워크플로우 시작 시 한 번만 실행된 ‘HTTP Request’ 노드)의 출력 데이터를 참조해야 할 때가 있습니다. 이럴 때 사용하는 것이 $('노드 이름').item 구문입니다. 이는 n8n $item().json 개념과 유사하게, 특정 노드의 출력 아이템에 직접 접근할 수 있게 해줍니다.

  • 단일 아이템 접근: {{ $('My HTTP Request').item.json.data.id }}

    ‘My HTTP Request’라는 이름을 가진 노드의 첫 번째(또는 유일한) 출력 아이템에 접근합니다. 그 아이템의 JSON 데이터(json) 내부의 data 객체 안에 있는 id 값을 가져옵니다.

  • 여러 아이템 중 특정 아이템 접근: {{ $('Read Sheet').item(2).json.name }}

    ‘Read Sheet’ 노드의 여러 출력 아이템 중 3번째 아이템(인덱스는 0부터 시작하므로 item(2))에 접근하여 ‘name’ 필드 값을 가져옵니다.

이 두 가지 방법의 차이점을 명확히 이해하는 것은 복잡한 워크플로우를 설계하는 데 매우 중요합니다. 아래 표를 통해 두 방식의 핵심 차이점을 정리했습니다.

구분 `$json` `$(‘Node Name’).item`
접근 대상 현재 노드에서 처리 중인 아이템 지정된 특정 노드의 출력 아이템
사용 위치 데이터 흐름상의 현재 위치 워크플로우 내 모든 노드
핵심 용도 이전 노드로부터 전달된 데이터 가공 여러 데이터 소스를 조합하거나, 특정 시점의 데이터 참조
기본 문법 {{ $json.propertyName }} {{ $('NodeName').item.json.prop }}
여러 노드가 연결되어 데이터를 주고받는 과정을 시각화한 3D 기술 이미지

3. n8n 데이터 추출 고급 기술: JavaScript 배열 메서드 활용

n8n 표현식의 진정한 힘은 단순한 값 참조를 넘어, 내장된 자바스크립트 엔진을 통해 데이터를 동적으로 가공하고 변형할 수 있다는 점에서 나옵니다. 특히 API 응답과 같이 배열(목록) 형태로 제공되는 복잡한 데이터를 다룰 때, 자바스크립트의 표준 배열 메서드를 활용하면 n8n 데이터 추출n8n JSON 데이터 접근을 매우 효율적으로 수행할 수 있습니다.

주요 JavaScript 배열 메서드

메서드 핵심 기능 사용 예시 (n8n 표현식)
map() 배열의 모든 요소를 순회하며, 각 요소를 변환하여 새로운 배열을 만듭니다. 제품 목록에서 이름만 추출: {{ $json.products.map(p => p.name) }}
filter() 배열의 모든 요소를 순회하며, 특정 조건을 만족하는 요소만 모아 새로운 배열을 만듭니다. 500원 초과 거래 내역만 필터링: {{ $json.transactions.filter(t => t.amount > 500) }}
find() 배열에서 특정 조건을 만족하는 첫 번째 요소를 찾아 반환합니다. (없으면 undefined) ID가 123인 사용자 찾기: {{ $json.users.find(u => u.id === 123) }}
reduce() 배열의 모든 요소를 순회하며, 주어진 함수를 실행하여 하나의 결과값으로 만듭니다. (예: 총합) 주문 항목 가격 총합 계산: {{ $json.orderItems.reduce((total, item) => total + item.price, 0) }}

map() – 데이터 변형 및 목록 추출

map() 메서드는 배열 속 각 객체에서 특정 속성 값만 뽑아내 새로운 목록을 만들고 싶을 때 매우 유용합니다. 예를 들어, 여러 제품 정보가 담긴 배열 [{"id": 1, "name": "상품 A"}, {"id": 2, "name": "상품 B"}]이 있을 때, {{ $json.products.map(p => p.name) }} 표현식은 ["상품 A", "상품 B"]라는 이름만 담긴 새로운 배열을 반환합니다.

filter() – 조건에 맞는 데이터 필터링

filter() 메서드는 수많은 데이터 중에서 원하는 조건에 맞는 데이터만 걸러내야 할 때 사용합니다. 예를 들어, 여러 주문 내역 중에서 “배송 완료” 상태인 주문만 추려내고 싶을 때, {{ $json.orders.filter(o => o.status === 'completed') }} 와 같이 사용할 수 있습니다.

find() – 조건에 맞는 첫 번째 데이터 찾기

find()는 여러 아이템 중에서 특정 조건을 만족하는 단 하나의 아이템을 찾아야 할 때 유용합니다. 예를 들어, 사용자 목록에서 이메일 주소로 특정 사용자를 찾아 그 사람의 ID를 가져오고 싶을 때 {{ $json.users.find(u => u.email === 'test@example.com').id }} 와 같이 사용할 수 있습니다. 단, find()는 조건에 맞는 값을 찾지 못하면 undefined를 반환하므로, 후속 처리에서 오류가 발생하지 않도록 주의해야 합니다.

reduce() – 배열을 단일 값으로 축약

reduce()는 배열의 모든 값을 사용하여 하나의 결과물을 도출해야 할 때 사용됩니다. 가장 대표적인 예시는 장바구니에 담긴 모든 상품의 가격 총합을 계산하는 것입니다. {{ $json.cartItems.reduce((sum, item) => sum + (item.price * item.quantity), 0) }} 표현식은 각 상품의 가격과 수량을 곱한 값을 모두 더하여 최종 합계 금액을 계산합니다.

데이터를 필터링하고 변환하는 자바스크립트 배열 메서드 과정을 형상화한 기술 테마 이미지

4. 실전 워크플로우: 오류 방지 및 베스트 프랙티스

강력한 n8n item 표현식을 사용하다 보면 예기치 않은 데이터 구조나 값의 부재로 인해 워크플로우가 실패하는 상황을 마주할 수 있습니다. 안정적이고 유지보수하기 쉬운 워크플로우를 구축하기 위해서는, 발생 가능한 오류를 미리 방지하는 코딩 습관이 매우 중요합니다. 다음은 n8n 데이터 추출 과정에서 반드시 알아야 할 실전 베스트 프랙티스입니다.

가. Null/Undefined 값 안전하게 처리하기

API 응답이나 데이터베이스 결과는 항상 우리가 기대하는 모든 필드를 포함하고 있지 않을 수 있습니다. 특정 필드가 존재하지 않을 때(undefined) 워크플로우가 멈추는 것을 방지하는 두 가지 효과적인 방법이 있습니다.

  • 옵셔널 체이닝 (?.): 중첩된 객체에 접근할 때 중간 경로의 값이 존재하지 않을 경우, 에러를 발생시키는 대신 undefined를 반환하여 워크플로우의 중단을 막아줍니다.
    • 위험한 예시: {{ $json.customer.address.city }} (address가 없으면 오류 발생)
    • 안전한 예시: {{ $json.customer?.address?.city }} (customer 또는 address가 없어도 오류 없이 undefined를 반환)
  • 기본값 설정 (||): 옵셔널 체이닝 등을 통해 얻은 값이 null 또는 undefined일 경우, 대신 사용할 기본값을 지정할 수 있습니다.
    • 예시: {{ $json.user.name || 'Anonymous' }} (사용자 이름이 존재하지 않으면 ‘Anonymous’라는 문자열을 대신 사용)

나. 데이터 타입 명시적 변환

API 응답 등 외부 시스템에서 받은 데이터는 숫자로 보여도 실제로는 문자열 타입인 경우가 많습니다. “123”과 123은 다르게 취급되므로, 의도치 않은 계산 오류를 방지하기 위해 데이터 타입을 명시적으로 변환해주는 것이 안전합니다.

  • 예시: {{ Number($json.product_id) }} (문자열 “123”을 숫자 123으로 변환)
  • 주요 변환 함수: Number(), String(), parseInt(), parseFloat()

다. 복잡한 로직은 `Code` 노드 활용

여러 줄의 복잡한 데이터 처리, 가독성이 중요한 로직, 여러 변수를 선언해야 하는 경우 등은 단일 표현식 안에 모두 담으려고 하기보다 Code 노드를 사용하는 것이 훨씬 효과적입니다. Code 노드는 더 완전한 자바스크립트 실행 환경을 제공하여 코드의 가독성과 유지보수성을 크게 향상시켜 줍니다. 표현식이 3~4줄 이상 길어진다면 Code 노드 사용을 적극적으로 고려해야 합니다.

라. 효과적인 디버깅 팁

표현식이 예상대로 동작하지 않을 때, 가장 간단하고 효과적인 디버깅 방법은 워크플로우 중간에 Set 노드를 추가하는 것입니다. Set 노드에 새로운 필드를 만들고, 그 값으로 확인하고 싶은 표현식을 입력해 보세요. 워크플로우를 실행한 후 Set 노드의 출력 결과를 확인하면, 해당 표현식이 어떤 값을 반환하는지 명확하게 파악하여 문제를 해결할 수 있습니다.

안정적인 워크플로우 구축과 오류 방지를 위해 코드를 점검하는 개발자 작업 환경 이미지

결론

지금까지 n8n item 표현식의 기본 개념부터 실전 활용법까지, 워크플로우 자동화의 핵심 기술을 깊이 있게 탐험했습니다. $json을 통한 기본적인 n8n JSON 데이터 접근부터, $('Node Name')을 이용한 노드 간 데이터 참조, 그리고 자바스크립트 배열 메서드를 활용한 고급 n8n 데이터 추출까지, 이제 여러분은 n8n의 잠재력을 최대한으로 끌어낼 수 있는 지식을 갖추게 되었습니다.

이 가이드에서 다룬 동적 데이터 처리 및 오류 방지 기술은 여러분의 n8n 워크플로우를 단순한 연결 도구에서 지능적인 자동화 시스템으로 격상시킬 것입니다. 데이터가 비어있을 때를 대비한 옵셔널 체이닝과 기본값 설정, 정확한 계산을 위한 타입 변환, 그리고 복잡한 로직을 위한 Code 노드 활용은 워크플로우의 안정성과 신뢰도를 보장하는 필수적인 습관입니다.

여기서 멈추지 마세요. n8n 공식 문서와 활발한 커뮤니티 포럼을 지속적으로 탐색하며 새로운 노드와 표현식 활용 사례를 학습한다면, 여러분의 자동화 역량은 꾸준히 발전할 것입니다. 이제 n8n item 표현식의 전문가가 되어, 반복적인 작업을 자동화하고 비즈니스 효율성을 극대화하는 무한한 가능성을 탐험하세요.

자주 묻는 질문 (FAQ)

Q: n8n 표현식에서 `$json`과 `$(‘Node Name’)`의 가장 큰 차이점은 무엇인가요?

A: $json은 현재 노드에서 처리 중인 아이템의 데이터에 접근하는 반면, $('Node Name')은 워크플로우의 다른 특정 노드의 출력 결과에 접근할 때 사용됩니다. $json은 데이터 흐름을 따라가는 것이고, $('Node Name')은 특정 지점의 데이터를 직접 참조하는 것입니다.

Q: API 응답에서 특정 값이 없을 때 워크플로우가 오류로 멈추는 것을 어떻게 방지할 수 있나요?

A: 옵셔널 체이닝(?.)을 사용하면 됩니다. 예를 들어 {{ $json.data?.user?.name }}와 같이 작성하면 중간에 datauser 객체가 없더라도 오류가 발생하지 않고 undefined를 반환하여 워크플로우를 안정적으로 실행할 수 있습니다.

Q: 복잡한 데이터 변환은 표현식 안에서 모두 처리해야 하나요?

A: 아니요, 여러 줄에 걸친 복잡한 로직이나 가독성이 중요한 코드의 경우, 표현식보다는 별도의 Code 노드를 사용하는 것이 좋습니다. Code 노드는 더 유연한 자바스크립트 환경을 제공하여 코드의 관리와 디버깅을 용이하게 합니다.

]]>
https://air-geumwoo.com/n8n-item-expressions-guide/feed/ 0
n8n 데이터 핸들링 및 JSON 변환 기술 완벽 마스터 가이드 https://air-geumwoo.com/n8n-data-handling-json-transformation/ https://air-geumwoo.com/n8n-data-handling-json-transformation/#respond Mon, 20 Jul 2026 07:42:40 +0000 https://air-geumwoo.com/n8n-data-handling-json-transformation/ 더 읽기]]>

n8n 데이터 핸들링 및 JSON 변환 기술 완벽 마스터 가이드

본 가이드는 n8n 자동화의 핵심인 데이터 핸들링 기술을 완벽히 마스터하기 위한 모든 것을 다룹니다. n8n의 기본 데이터 단위인 JSON과 Item의 구조를 이해하고, 코딩 없이 데이터를 가공하는 Set 노드, JavaScript를 활용한 Code 노드, 그리고 워크플로우를 동적으로 만드는 표현식(Expression) 사용법까지 단계별로 학습하여 데이터 파이프라인을 완벽하게 제어하는 전문가로 거듭나세요.

목차

서론: 자동화의 품질을 결정하는 n8n 데이터 핸들링의 모든 것

n8n으로 멋진 자동화 워크플로우를 구축했지만, 원하는 대로 데이터가 가공되지 않아 어려움을 겪고 계신가요? 성공적인 업무 자동화, 즉 디지털 트랜스포메이션의 첫걸음은 단순히 노드를 시각적으로 연결하는 것을 넘어, 그 사이를 흐르는 데이터를 얼마나 잘 이해하고 제어하는지에 달려 있습니다. 데이터는 자동화의 혈액과도 같으며, 이 혈액을 자유자재로 다룰 수 있을 때 비로소 워크플로우는 진정한 생명력을 얻습니다.

이 글의 목표는 여러분이 n8n 데이터 핸들링 및 JSON 변환 기술을 완벽하게 마스터하여, 어떤 복잡한 시나리오에서도 데이터를 자유자재로 다룰 수 있도록 돕는 것입니다. 데이터 파이프라인의 모든 단계를 완벽하게 제어하는 전문가로 거듭나 보세요.

이 가이드를 통해 다음 핵심 기술들을 배우게 될 것입니다.

  • 기본 데이터 단위: n8n의 기본 데이터 단위인 JSON과 Item의 구조
  • 노코드 데이터 매핑: 코딩 없이 데이터를 매핑하는 Set 노드 활용법
  • 코드 기반 데이터 변환: 코드를 통해 복잡한 데이터를 변환하는 Code 노드 활용법
  • 동적 데이터 참조: 동적으로 데이터를 참조하는 표현식(Expression) 사용법
  • 데이터 정제: 원하는 데이터만 골라내는 추출 및 필터링 기법
디지털 트랜스포메이션과 데이터 파이프라인을 상징하는 홀로그램 데이터 스트림이 흐르는 미래형 워크스페이스 공간의 실사 이미지

n8n 데이터의 기본: n8n JSON 데이터 구조와 Item 완벽 이해하기

n8n 자동화의 세계를 이해하기 위한 첫 번째 열쇠는 모든 데이터가 ‘Item 객체들의 배열’이라는 단 하나의 규칙을 따른다는 점을 아는 것입니다. 이 기본 원칙만 이해해도 데이터 흐름을 파악하는 것이 훨씬 수월해집니다.

n8n JSON 데이터 구조의 핵심

n8n에서 한 노드에서 다음 노드로 데이터가 전달될 때, 그 형태는 항상 배열(Array)입니다. 데이터가 단 한 개일지라도 [ ... ] 대괄호 안에 감싸여 있습니다.

  • Item: 배열 안의 각 중괄호 {...}로 묶인 객체를 Item이라고 부릅니다. Item은 n8n이 처리하는 데이터의 최소 단위입니다.
  • Item의 속성: 각 Item은 두 가지 핵심 속성을 가질 수 있습니다.
    • json: 우리가 흔히 다루는 텍스트, 숫자, 고객 정보 등 모든 구조화된 데이터는 이 json 객체 안에 저장됩니다. 예를 들어, [ { "json": { "name": "Alice", "email": "alice@example.com" } } ] 와 같은 구조를 가집니다.
    • binary: 이미지, PDF, CSV 파일 등 파일 기반 데이터는 binary 속성에 담깁니다.

n8n 공식 문서에 따르면, 모든 입출력 데이터는 이처럼 ‘객체들의 배열’ 형태를 따르며, 각 객체(Item)는 json 속성을 필수로 포함하는 표준 구조를 가집니다. n8n 편집기 화면에서 ‘Table’ 뷰는 스프레드시트처럼 깔끔하게 보여주지만, ‘JSON’ 뷰를 클릭하면 [ { "json": { ... } } ] 라는 실제 데이터 구조를 직접 확인할 수 있습니다. 이 구조를 이해하는 것이 n8n Item 활용법의 시작점입니다.

JSON 데이터 구조를 상징하는 투명한 큐브들이 정교하게 배열된 3D 시각화 이미지

코딩 없이 데이터 가공하기: n8n 필드 매핑 가이드 Set 노드

데이터 구조를 이해했다면, 이제 데이터를 원하는 형태로 바꾸는 방법을 배울 차례입니다. Set 노드는 코딩 한 줄 없이 데이터를 추가, 변경, 삭제할 수 있는 가장 기본적이고 강력한 도구입니다. 들어오는 Item을 기반으로 새로운 형태의 Item을 만들어내는 데이터 재구성의 핵심 노드입니다.

Set 노드의 주요 기능

기능 설명 예시 (Value 필드)
새로운 필드 추가 기존에 없던 새로운 데이터 필드(Key-Value)를 만듭니다. ‘Add Field’를 클릭하여 시작합니다. 정적 값: completed
동적 값: {{ $json.firstName }} {{ $json.lastName }}
기존 필드 값 변경 이미 있는 필드의 값을 새로운 값으로 덮어씁니다. ‘Name’에 기존 필드명을 그대로 사용합니다. {{ $json.email.toLowerCase() }}
필드 이름 변경 특정 필드의 이름을 바꿉니다. ‘Name’에 새 이름을, ‘Value’에 기존 값을 참조하는 표현식을 넣습니다. {{ $json.oldName }}
불필요한 필드 제거 ‘Keep Only Set’ 옵션을 활성화하면, Set 노드에 설정된 필드만 남고 나머지는 모두 사라집니다. (옵션 체크)

예를 들어, 고객의 성(lastName)과 이름(firstName)을 합쳐 전체 이름(fullName) 필드를 만들고 싶다면, Set 노드에서 ‘Name’에 fullName을 입력하고 ‘Value’에 n8n 표현식 Expression 사용법에 따라 {{ $json.firstName }} {{ $json.lastName }} 라고 입력하면 됩니다. 이처럼 Set 노드는 데이터 클렌징과 정제 작업에 필수적입니다.

코딩 없이 데이터를 매핑하는 깔끔한 UI 디자인과 업무에 집중하는 전문가의 손을 보여주는 실사 이미지

JavaScript로 무한한 데이터 변환: n8n Code 노드 활용 데이터 변환

Set 노드만으로 해결하기 어려운 복잡한 규칙이 필요할 때가 있습니다. 예를 들어 여러 조건을 동시에 확인하거나, 목록 데이터를 하나씩 처리하며 계산해야 할 때 Code 노드가 해결사 역할을 합니다. Code 노드는 JavaScript 코드를 직접 작성하여 데이터 변환의 한계를 없애줍니다.

Code 노드는 언제 사용할까요?

  • 여러 필드 값을 조합해 복잡한 if/else 조건부 로직을 적용해야 할 때
  • 상품 목록(배열)을 반복하며 총합계를 계산하는 등 루프(loop)가 필요할 때
  • 외부 라이브러리 없이 순수 JavaScript 함수로 데이터를 정교하게 가공해야 할 때

Code 노드 기본 사용법 및 예시

Code 노드는 이전 노드의 모든 Item이 담긴 items 라는 배열 변수를 입력받습니다. 코드를 실행한 후에는 반드시 n8n이 이해할 수 있는 데이터 구조, 즉 [ { "json": { ... } } ] 형태의 배열을 return 해야 합니다.

예시: 고객 등급 조건부 부여
고객의 구매 금액(amount)에 따라 등급을 부여하는 코드입니다.

for (let item of items) {
  // 구매 금액이 100 이상이면 'VIP', 아니면 'Regular' 등급 부여
  if (item.json.amount >= 100) {
    item.json.grade = 'VIP';
  } else {
    item.json.grade = 'Regular';
  }
}
// 가공된 items 배열 전체를 반환
return items;

n8n 공식 문서에서도 강조하듯, Code 노드는 items 배열에 직접 접근해 복잡한 로직을 수행한 후, 표준 데이터 구조로 결과를 반환하는 원리로 동작합니다. 이를 통해 n8n Code 노드 활용 데이터 변환의 무한한 가능성을 열 수 있습니다.

자바스크립트 코드가 선명하게 보이는 모니터와 그 주변에서 변환되는 데이터 입자를 표현한 기술적인 이미지

워크플로우의 동적 제어: n8n 표현식 Expression 사용법 완벽 정복

워크플로우를 만들다 보면 특정 값을 직접 입력하는 대신, 이전 단계의 결과를 가져와 사용해야 하는 경우가 많습니다. 이때 사용하는 것이 바로 ‘표현식(Expression)’입니다. 표현식은 {{ }} 이중 중괄호로 감싸진 특별한 문법으로, 워크플로우 내의 다른 데이터에 동적으로 접근하게 해주는 열쇠입니다.

핵심 표현식 변수 및 활용법

변수 설명 사용 예시
{{ $json.fieldName }} 가장 중요하고 자주 사용됩니다. 현재 처리 중인 Item의 json 객체 내 특정 필드 값에 접근합니다. {{ $json.name }}
{{ $item(index).json.fieldName }} 특정 순서(index)에 있는 Item의 데이터에 접근합니다. 0은 첫 번째 Item을 의미합니다. {{ $item(0).json.email }}
{{ $items("노드 이름")[index].json.fieldName }} 특정 노드의 출력 결과 전체에 접근합니다. 여러 데이터 소스를 조합할 때 필수적입니다. {{ $items("Read from Sheet")[0].json.city }}
{{ $now }} 현재 날짜와 시간을 ISO 형식으로 가져옵니다. {{ $now }}
{{ $env.YOUR_VARIABLE }} n8n 실행 환경에 설정된 환경 변수 값을 가져옵니다. API 키 등 민감 정보를 관리할 때 유용합니다. {{ $env.API_KEY }}

표현식 안에서는 JavaScript의 내장 함수나 간단한 연산도 가능합니다. 예를 들어 {{ $json.title.toUpperCase() }}는 제목을 대문자로 바꾸고, {{ $json.isActive ? "활성" : "비활성" }} 와 같은 삼항 연산자로 간단한 조건 처리도 가능합니다. 이처럼 n8n 표현식 Expression 사용법을 익히면 하드코딩 없는 유연하고 재사용 가능한 워크플로우를 설계할 수 있습니다.

동적 데이터 참조를 상징하는 빛나는 이중 중괄호 기호가 디지털 공간에 떠 있는 시각적 이미지

원하는 결과만 얻기 위한 n8n 데이터 추출 및 필터링

워크플로우가 항상 모든 데이터를 다음 단계로 넘겨야 하는 것은 아닙니다. 수백 개의 데이터 중 특정 조건을 만족하는 몇 개의 데이터만 처리해야 할 때, 필터링 기술은 워크플로우의 효율성과 정확성을 극대화합니다.

상황에 맞는 필터링 도구 선택하기

  • Filter 노드: 가장 직관적인 필터링 도구입니다. “고객의 국가 코드가 ‘KR’과 일치하는가?” 와 같은 명확한 조건을 설정하여, 조건을 통과하는 Item만 남기고 나머지는 걸러냅니다. 단순 조건 필터링에 가장 적합합니다.
  • Item Lists 노드: 목록 자체를 편집하고 싶을 때 사용합니다. 예를 들어, 데이터 중 상위 5개만 남기거나(Limit), 이메일 주소 기준으로 중복된 Item을 하나로 합치거나(Distinct), 특정 필드 기준으로 정렬(Sort)하는 등의 작업에 특화되어 있습니다.
  • Split In Batches 노드: 수천, 수만 개의 Item을 한 번에 API로 전송하면 과부하 또는 API 제한(Rate Limit)에 걸릴 수 있습니다. 이 노드는 대량의 데이터를 100개씩과 같이 작은 묶음(Batch)으로 나누어, 워크플로우가 안정적으로 순차 처리하도록 돕습니다. 대규모 데이터 처리 자동화의 필수 노드입니다.
  • 표현식을 이용한 고급 필터링: Code 노드 안에서 JavaScript의 .filter() 배열 함수를 사용하면 여러 조건을 조합하는 등 훨씬 복잡한 로직으로 데이터를 걸러낼 수 있습니다.

이러한 n8n 데이터 추출 및 필터링 도구들을 적재적소에 활용하면, 불필요한 연산을 줄이고 API 호출 횟수를 최적화하여 더 빠르고 안정적인 자동화 시스템을 구축할 수 있습니다.

데이터 덩어리들이 깔끔하게 필터링되어 정돈된 결과물로 나오는 과정을 표현한 정교한 3D 렌더링 이미지

결론: 데이터 핸들링 마스터, 진정한 n8n 전문가로 거듭나기

지금까지 n8n 자동화의 심장부인 데이터 핸들링 기술을 깊이 있게 탐험했습니다. 단순히 노드를 연결하는 것을 넘어, 데이터의 흐름을 이해하고 직접 제어하는 능력을 갖추는 것이 자동화 프로젝트의 성패를 좌우합니다.

오늘 배운 핵심 내용을 다시 정리해 보겠습니다.

  • n8n JSON 데이터 구조: 모든 데이터는 Item의 배열 [ { "json":{...} } ] 형태라는 것을 기억하세요.
  • Set 노드: 코딩 없이 필드를 추가, 변경, 삭제하는 가장 빠른 방법입니다.
  • Code 노드: JavaScript를 통해 복잡한 비즈니스 로직도 데이터 변환에 녹여낼 수 있습니다.
  • 표현식: {{ $json.field }} 와 같은 표현식은 워크플로우에 생명을 불어넣는 동적 제어의 핵심입니다.
  • 데이터 필터링: 필요한 데이터만 정확히 추출하여 워크플로우의 효율을 극대화합니다.

이 기술들을 자유자재로 활용할 수 있게 된 여러분은 더 이상 워크플로우를 ‘만드는’ 사용자가 아닙니다. 데이터를 ‘설계하고 제어하는’ 진정한 n8n 전문가로 거듭난 것입니다. 오늘 배운 n8n 데이터 핸들링 및 JSON 변환 기술을 바탕으로 기존의 워크플로우를 개선하거나, 완전히 새로운 아이디어를 현실로 만들어보세요. 궁금한 점이 생긴다면 주저 말고 n8n 공식 커뮤니티 포럼에서 질문하고 함께 성장해 나가시길 바랍니다.

복잡한 자동화 워크플로우를 완벽하게 제어하는 전문가의 자신감 있는 모습을 담은 고화질 이미지

자주 묻는 질문 (FAQ)

Q: Set 노드와 Code 노드의 가장 큰 차이점은 무엇인가요?

A: Set 노드는 코딩 없이 정해진 UI를 통해 필드를 추가, 변경, 제거하는 등 간단하고 직관적인 데이터 재구성에 사용됩니다. 반면 Code 노드는 JavaScript 코드를 직접 작성하여 조건문, 반복문 등 복잡한 비즈니스 로직을 포함한 데이터 변환을 자유롭게 구현할 수 있다는 점에서 차이가 있습니다.

Q: n8n에서 모든 데이터는 항상 배열(Array) 형태로 전달되나요?

A: 네, 맞습니다. n8n의 핵심 설계 원칙 중 하나는 노드 간에 전달되는 모든 데이터가 ‘Item 객체들의 배열’ 형태를 따른다는 것입니다. 데이터가 단 하나만 존재하더라도 항상 [ { ... } ] 와 같이 배열로 감싸여 전달됩니다. 이는 데이터 처리의 일관성을 유지하는 데 매우 중요합니다.

Q: 표현식(Expression)은 노드의 어떤 필드에서나 사용할 수 있나요?

A: 대부분의 입력 필드에서 표현식을 사용할 수 있습니다. 필드 옆에 작은 플라스크 또는 ‘Add Expression’ 버튼이 보인다면 해당 필드에서 표현식을 사용하여 동적인 값을 참조할 수 있습니다. {{ $json.fieldName }} 와 같은 표현식을 활용하면 이전 노드의 결과값을 현재 노드의 입력값으로 손쉽게 사용할 수 있어 매우 유연한 워크플로우 설계가 가능해집니다.

]]>
https://air-geumwoo.com/n8n-data-handling-json-transformation/feed/ 0