n8n의 데이터 구조 이해하기
n8n의 데이터 구조 이해하기
n8n이 노드 사이에서 데이터를 어떻게 구조화하고 전달하는지 이해하는 것은 워크플로를 만드는 데 있어 가장 기본이 되는 부분이에요. 이 가이드에서는 데이터 구조 형식과 데이터가 워크플로를 따라 흐르는 방식, 두 가지를 함께 다룰게요.
데이터 구조
n8n에서 노드 사이를 오가는 모든 데이터는 객체의 배열(array of objects) 형태예요. 구조는 다음과 같아요.
[
{
// 대부분의 데이터:
// 각 항목을 'json' 키를 가진 객체로 감쌉니다.
"json": {
// 예시 데이터
"apple": "beets",
"carrot": {
"dill": 1
}
},
// 바이너리 데이터:
// 각 항목을 'binary' 키를 가진 객체로 감쌉니다.
"binary": {
// 예시 데이터
"apple-picture": {
"data": "....", // Base64로 인코딩된 바이너리 데이터 (필수)
"mimeType": "image/png", // 가능하면 설정하는 것이 좋음 (선택)
"fileExtension": "png", // 가능하면 설정하는 것이 좋음 (선택)
"fileName": "example.png", // 가능하면 설정하는 것이 좋음 (선택)
}
}
},
]
{% hint style="info" %}
json 키와 배열 문법을 생략하는 경우
0.166.0 버전부터 Function 노드나 Code 노드를 사용할 때는 json 키가 없으면 n8n이 자동으로 추가해 줘요. 필요하다면 항목을 배열([])로 감싸는 작업도 자동으로 처리돼요. 다만 이 자동 처리는 Function 노드와 Code 노드를 쓸 때만 적용돼요. 직접 자신만의 노드를 만들 때는 여전히 json 키를 가진 데이터를 반환하도록 신경 써야 해요.
{% endhint %}
노드 안에서 데이터가 흐르는 방식
워크플로에서 노드를 연결하면 데이터는 자동으로 한 노드에서 다음 노드로 전달돼요.
노드는 여러 항목을 자동으로 처리해요. 노드가 데이터 항목 배열을 받으면 각 항목을 개별적으로 처리하고 설정된 작업을 항목마다 수행해요.
예를 들어 Trello 노드를 Create-Card로 설정하고, 들어오는 데이터의 name-input-value 속성을 이용해서 Name 필드를 채우는 표현식을 만들었다고 해볼게요. 그러면 노드는 항목마다 카드를 하나씩 만들면서, 항상 현재 항목의 name-input-value 값을 사용해요.
예를 들어 이 입력은 카드를 두 개 만든답니다. 하나는 test1, 다른 하나는 test2라는 이름으로요.
[
{
"name-input-value": "test1"
},
{
"name-input-value": "test2"
}
]
드래그 앤 드롭으로 무엇을 매핑하는지 이해하기
데이터 매핑은 필드 경로(field path)를 매핑하고 필드의 값을 불러와요. 예를 들어 다음과 같은 데이터가 있다고 해볼게요.
[
{
"fruit": "apples",
"color": "green"
}
]
INPUT에서 fruit를 끌어다가 그 값을 사용하고 싶은 필드에 놓으면 fruit를 매핑할 수 있어요. 그러면 {{ $json.fruit }}이라는 표현식이 만들어져요. 노드가 입력 항목을 반복할 때마다 필드의 값은 각 항목의 fruit 값이 되는 거예요.
중첩 데이터 이해하기
다음과 같은 데이터가 있다고 해볼게요.
[
{
"name": "First item",
"nested": {
"example-number-field": 1,
"example-string-field": "apples"
}
},
{
"name": "Second item",
"nested": {
"example-number-field": 2,
"example-string-field": "oranges"
}
}
]
n8n은 이 데이터를 다음과 같이 표 형태로 보여주면서, 중첩(nested) 데이터를 담고 있다는 걸 알 수 있도록 nested 필드를 굵게 표시해 줘요.
