InfoGrab Docs

데이터 변환을 위한 표현식

요약

n8n에서 표현식이 지원되는 모든 위치에서 표현식 변환 함수를 사용할 수 있습니다. 다만, 다른 작업 없이 표현식만으로 데이터를 변환하는 것이 주목적이라면 Edit Fields (Set) 노드를 사용하세요. 이렇게 하면 데이터 변환과 비즈니스 로직을 분리하여 워크플로우를 체계적으로 유지하고, 이해와 유지 관리가 용이해집니다.

n8n에서 표현식이 지원되는 모든 위치에서 표현식 변환 함수를 사용할 수 있습니다.

다만, 다른 작업 없이 표현식만으로 데이터를 변환하는 것이 주목적이라면 Edit Fields (Set) 노드를 사용하세요. 이 노드는 데이터 변환을 위해 특별히 설계되었으며, 다음 작업을 위한 깔끔한 인터페이스를 제공합니다:

  • 표현식 기반 값으로 새 필드 추가
  • 변환 함수를 사용하여 기존 필드 값 수정
  • 필드 제거 또는 이름 변경

이렇게 하면 데이터 변환과 비즈니스 로직을 분리하여 워크플로우를 체계적으로 유지하고, 이해와 유지 관리가 용이해집니다.

모범 사례: 여러 노드의 여러 파라미터에 복잡한 표현식을 추가하는 대신, Edit Fields를 사용하여 먼저 데이터를 준비한 다음 변환된 데이터를 후속 노드에 전달하세요.

UI에서 표현식 만들기

자세한 내용과 예시는 표현식 레퍼런스를 참조하세요.

예시: webhook body에서 데이터 가져오기#

다음 시나리오를 생각해 보세요: webhook 트리거가 webhook body를 통해 데이터를 수신합니다. 워크플로우에서 사용하기 위해 해당 데이터 중 일부를 추출하려고 합니다.

webhook 데이터는 다음과 유사합니다:

[
  {
    "headers": {
      "host": "n8n.instance.address",
      ...
    },
    "params": {},
    "query": {},
    "body": {
      "name": "Jim",
      "age": 30,
      "city": "New York"
    }
  }
]

워크플로우의 다음 노드에서 city 값만 가져오려면 다음 표현식을 사용할 수 있습니다:

{{$json.body.city}}

이 표현식은:

  1. n8n의 사용자 정의 $json 변수를 사용하여 수신되는 JSON 형식의 데이터에 접근합니다.
  2. city 값을 찾습니다 (이 예시에서는 "New York"). 이 예시는 JSON 데이터를 쿼리하기 위해 JMESPath 구문을 사용합니다. 이 표현식을 {{$json['body']['city']}}로 작성할 수도 있습니다.

자격 증명에서 표현식 사용하기#

자격 증명 필드에서도 표현식을 사용할 수 있습니다. 표현식을 사용하여 데이터를 참조하는 경우 (예: {{$json.body.city}} 또는 {{ $('Webhook').item.json.headers.authorization }}), n8n은 현재 워크플로우 실행 컨텍스트 내에서 표현식을 평가합니다.

이는 다음을 의미합니다:

  • 자격 증명의 표현식은 이전 노드의 데이터를 포함하여 현재 실행 컨텍스트에서 사용 가능한 데이터에 접근할 수 있습니다.
  • 각 워크플로우 실행은 자체 데이터 컨텍스트를 가집니다.
  • 표현식은 실행마다 평가되므로 서로 다른 실행이 데이터를 공유하지 않습니다.

예를 들어, webhook 노드가 액세스 토큰을 수신하고 표현식을 사용하여 자격 증명 필드에서 이를 참조하는 경우, 값은 해당 특정 워크플로우 실행의 실행 데이터를 사용하여 resolve됩니다.

예시: 표현식으로 더 긴 JavaScript 작성하기#

표현식에서 변수 할당이나 여러 구문 같은 작업을 수행할 수 있지만, 즉시 실행 함수 표현식(IIFE) 구문으로 코드를 감싸야 합니다.

다음 코드는 Luxon 날짜 및 시간 라이브러리를 사용하여 두 날짜 사이의 시간을 월 단위로 찾습니다. 표현식의 handlebar 괄호와 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 검증기로 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. }}
}

이 오류를 해결하려면 표현식 구문이 예상 형식을 따르는지 확인하세요.

데이터 변환을 위한 표현식

원문 보기
요약

n8n에서 표현식이 지원되는 모든 위치에서 표현식 변환 함수를 사용할 수 있습니다. 다만, 다른 작업 없이 표현식만으로 데이터를 변환하는 것이 주목적이라면 Edit Fields (Set) 노드를 사용하세요. 이렇게 하면 데이터 변환과 비즈니스 로직을 분리하여 워크플로우를 체계적으로 유지하고, 이해와 유지 관리가 용이해집니다.

n8n에서 표현식이 지원되는 모든 위치에서 표현식 변환 함수를 사용할 수 있습니다.

다만, 다른 작업 없이 표현식만으로 데이터를 변환하는 것이 주목적이라면 Edit Fields (Set) 노드를 사용하세요. 이 노드는 데이터 변환을 위해 특별히 설계되었으며, 다음 작업을 위한 깔끔한 인터페이스를 제공합니다:

  • 표현식 기반 값으로 새 필드 추가
  • 변환 함수를 사용하여 기존 필드 값 수정
  • 필드 제거 또는 이름 변경

이렇게 하면 데이터 변환과 비즈니스 로직을 분리하여 워크플로우를 체계적으로 유지하고, 이해와 유지 관리가 용이해집니다.

모범 사례: 여러 노드의 여러 파라미터에 복잡한 표현식을 추가하는 대신, Edit Fields를 사용하여 먼저 데이터를 준비한 다음 변환된 데이터를 후속 노드에 전달하세요.

UI에서 표현식 만들기

자세한 내용과 예시는 표현식 레퍼런스를 참조하세요.

예시: webhook body에서 데이터 가져오기#

다음 시나리오를 생각해 보세요: webhook 트리거가 webhook body를 통해 데이터를 수신합니다. 워크플로우에서 사용하기 위해 해당 데이터 중 일부를 추출하려고 합니다.

webhook 데이터는 다음과 유사합니다:

[
  {
    "headers": {
      "host": "n8n.instance.address",
      ...
    },
    "params": {},
    "query": {},
    "body": {
      "name": "Jim",
      "age": 30,
      "city": "New York"
    }
  }
]

워크플로우의 다음 노드에서 city 값만 가져오려면 다음 표현식을 사용할 수 있습니다:

{{$json.body.city}}

이 표현식은:

  1. n8n의 사용자 정의 $json 변수를 사용하여 수신되는 JSON 형식의 데이터에 접근합니다.
  2. city 값을 찾습니다 (이 예시에서는 "New York"). 이 예시는 JSON 데이터를 쿼리하기 위해 JMESPath 구문을 사용합니다. 이 표현식을 {{$json['body']['city']}}로 작성할 수도 있습니다.

자격 증명에서 표현식 사용하기#

자격 증명 필드에서도 표현식을 사용할 수 있습니다. 표현식을 사용하여 데이터를 참조하는 경우 (예: {{$json.body.city}} 또는 {{ $('Webhook').item.json.headers.authorization }}), n8n은 현재 워크플로우 실행 컨텍스트 내에서 표현식을 평가합니다.

이는 다음을 의미합니다:

  • 자격 증명의 표현식은 이전 노드의 데이터를 포함하여 현재 실행 컨텍스트에서 사용 가능한 데이터에 접근할 수 있습니다.
  • 각 워크플로우 실행은 자체 데이터 컨텍스트를 가집니다.
  • 표현식은 실행마다 평가되므로 서로 다른 실행이 데이터를 공유하지 않습니다.

예를 들어, webhook 노드가 액세스 토큰을 수신하고 표현식을 사용하여 자격 증명 필드에서 이를 참조하는 경우, 값은 해당 특정 워크플로우 실행의 실행 데이터를 사용하여 resolve됩니다.

예시: 표현식으로 더 긴 JavaScript 작성하기#

표현식에서 변수 할당이나 여러 구문 같은 작업을 수행할 수 있지만, 즉시 실행 함수 표현식(IIFE) 구문으로 코드를 감싸야 합니다.

다음 코드는 Luxon 날짜 및 시간 라이브러리를 사용하여 두 날짜 사이의 시간을 월 단위로 찾습니다. 표현식의 handlebar 괄호와 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 검증기로 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. }}
}

이 오류를 해결하려면 표현식 구문이 예상 형식을 따르는지 확인하세요.