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 $item().json – 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