데이터 변환을 위한 표현식
n8n v2.29n8n에서 표현식이 지원되는 곳이라면 어디에서든 표현식 변환 함수를 사용할 수 있습니다. 다만 다른 작업 없이 표현식만으로 데이터를 변환하는 것이 주된 목적이라면 Edit Fields (Set) 노드를 사용하세요. 이를 통해 데이터 변환과 비즈니스 로직을 분리하여 워크플로를 체계적으로 유지할 수 있으며, 이해와 유지 관리도 더 쉬워집니다.
n8n에서 표현식이 지원되는 곳이라면 어디에서든 표현식 변환 함수를 사용할 수 있습니다.
다만 다른 작업 없이 표현식만으로 데이터를 변환하는 것이 주된 목적이라면 Edit Fields (Set) 노드를 사용하세요. 이 노드는 데이터 변환 전용으로 설계되었으며, 다음 작업을 위한 깔끔한 인터페이스를 제공합니다:
- 표현식 기반 값으로 새 필드 추가
- 변환 함수를 사용해 기존 필드 값 수정
- 필드 제거 또는 이름 변경
이를 통해 데이터 변환과 비즈니스 로직을 분리하여 워크플로를 체계적으로 유지할 수 있으며, 이해와 유지 관리도 더 쉬워집니다.
모범 사례: 여러 노드의 여러 매개변수에 복잡한 표현식을 추가하는 대신, Edit Fields를 사용해 데이터를 먼저 준비한 다음 변환된 데이터를 이후 노드로 전달하세요.

자세한 내용과 예시는 표현식 참조를 확인하세요.
예시: 웹훅 본문에서 데이터 가져오기#
다음 시나리오를 생각해 보세요. 웹훅 본문을 통해 데이터를 수신하는 웹훅 트리거가 있습니다. 그 데이터 중 일부를 워크플로에서 사용하기 위해 추출하고 싶습니다.
웹훅 데이터는 다음과 비슷하게 생겼습니다:
[
{
"headers": {
"host": "n8n.instance.address",
...
},
"params": {},
"query": {},
"body": {
"name": "Jim",
"age": 30,
"city": "New York"
}
}
]
워크플로의 다음 노드에서 city 값만 가져오고 싶습니다. 다음과 같은 표현식을 사용할 수 있습니다:
{{$json.body.city}}
이 표현식은 다음과 같이 동작합니다:
- n8n의 커스텀
$json변수를 사용해 수신된 JSON 형식 데이터에 접근합니다. city값을 찾습니다(이 예시에서는 "New York"). 이 예시는 JMESPath 문법을 사용해 JSON 데이터를 쿼리한다는 점에 유의하세요. 이 표현식은{{$json['body']['city']}}로도 작성할 수 있습니다.
자격 증명에서 표현식 사용하기#
자격 증명 필드에서도 표현식을 사용할 수 있습니다. 표현식을 사용해 데이터를 참조하면(예: {{$json.body.city}} 또는 {{ $('Webhook').item.json.headers.authorization }}), n8n은 현재 워크플로 실행 컨텍스트 내에서 해당 표현식을 평가합니다.
이는 다음을 의미합니다:
- 자격 증명 내 표현식은 이전 노드의 데이터를 포함해 현재 실행 컨텍스트에서 사용 가능한 데이터에 접근할 수 있습니다.
- 각 워크플로 실행은 자체 데이터 컨텍스트를 갖습니다.
- 표현식은 실행마다 평가되므로, 서로 다른 실행끼리는 데이터를 공유하지 않습니다.
예를 들어, 웹훅 노드가 액세스 토큰을 수신하고 이를 자격 증명 필드에서 표현식으로 참조하는 경우, 그 값은 해당 특정 워크플로 실행의 실행 데이터를 사용해 확인됩니다.
예시: 표현식으로 더 긴 JavaScript 작성하기#
표현식 안에서 변수 할당이나 여러 문장 작성 같은 작업도 할 수 있지만, 즉시 실행 함수 표현식(Immediately Invoked Function Expression, IIFE) 문법으로 코드를 감싸야 합니다.
다음 코드는 Luxon 날짜 및 시간 라이브러리를 사용해 두 날짜 사이의 시간을 개월 수로 구합니다. 코드를 표현식용 중괄호와 IIFE 문법 양쪽으로 감쌉니다.
{{(()=>{
let end = DateTime.fromISO('2017-03-13');
let start = DateTime.fromISO('2017-02-13');
let diffInMonths = end.diff(start, 'months');
return diffInMonths.toObject();
})()}}
일반적인 문제#
표현식과 관련된 일반적인 오류와 문제, 그리고 이를 해결하거나 문제를 해결하는 단계를 소개합니다.
항목 0의 'JSON Output'에 잘못된 JSON이 포함되어 있습니다#
이 오류는 JSON 모드를 사용하지만 유효한 JSON 객체를 제공하지 않을 때 발생합니다. JSON 객체의 문제 유형에 따라, 이 오류는 The 'JSON Output' in item 0 does not contain a valid JSON object로 표시되기도 합니다.
이를 해결하려면 제공하는 코드가 유효한 JSON인지 확인하세요:
- JSON validator로 JSON을 확인하세요.
- JSON 객체가 정의되지 않은 입력 데이터를 참조하지 않는지 확인하세요. 이는 수신 데이터에 항상 동일한 필드가 포함되지 않을 때 발생할 수 있습니다.
표현식에 대한 데이터를 가져올 수 없습니다#
이 오류는 표현식이 참조하는 데이터를 n8n이 가져올 수 없을 때 발생합니다. 대개 이전 노드가 아직 실행되지 않았을 때 발생합니다.
이 오류의 또 다른 형태는 Referenced node is unexecuted로 나타날 수 있습니다. 이 경우, 오류의 전체 텍스트는 다음과 같은 형식으로 실행되지 않은 정확한 노드를 알려줍니다:
An expression references the node '<node-name>', but it hasn't been executed yet. Either change the expression, or re-wire your workflow to make sure that node executes first.
문제 해결을 시작하려면 해당 노드까지 워크플로를 테스트해 보세요.
JavaScript나 다른 커스텀 코드를 사용하는 노드의 경우, 이전 노드의 값을 사용하기 전에 다음을 확인해 해당 노드가 실행되었는지 확인할 수 있습니다:
$("<node-name>").isExecuted
예를 들어, 이 JSON은 입력 데이터의 매개변수를 참조합니다. 다른 노드와 연결하지 않고 이 단계를 테스트하면 다음 오류가 표시됩니다:
{
"my_field_1": {{ $input.params }}
}
잘못된 문법#
이 오류는 문법 오류가 있는 표현식을 사용할 때 발생합니다.
예를 들어, 이 JSON의 표현식에는 마침표가 하나 더 붙어 있어 잘못된 문법 오류가 발생합니다:
{
"my_field_1": "value",
"my_field_2": {{ $('If').item.json. }}
}
이 오류를 해결하려면 표현식 문법을 확인하여 예상되는 형식을 따르는지 확인하세요.