자동화를 구축하다 보면 밤새워 만든 워크플로우가 빨간색 에러 메시지를 띄우며 멈춰버리는 경험, 다들 한 번쯤 있으실 겁니다. 특히 n8n을 처음 접하시는 분들이 가장 많이 겪는 좌절의 순간이 바로 데이터가 내 마음대로 움직이지 않을 때입니다. 분명히 이전 단계에서는 데이터가 보였는데 다음 노드에서는 없다고 나오거나, 리스트를 처리하고 싶은데 맨 첫 번째 항목만 실행되고 끝나버리는 황당한 경우가 있습니다.
이런 문제의 90퍼센트는 n8n이 데이터를 다루는 방식, 즉 JSON 구조가 어긋났기 때문에 발생합니다. 툴 자체가 직관적이다 보니 대충 연결하면 되겠지 하고 넘어가기 쉽지만, 사실 이 뼈대를 이해하지 못하면 고급 자동화로 넘어갈 수 없습니다. 오늘은 복잡한 이론서는 덮어두고, 제가 수많은 워크플로우를 고치며 깨달은 n8n 데이터 구조의 핵심과 실전 노하우를 아주 쉽게 풀어서 설명해 드리겠습니다. 이 글을 다 읽으실 때쯤이면 머릿속에 데이터가 흐르는 길이 선명하게 그려지실 겁니다.
자동화, 데이터 흐름 이해하기
우리가 n8n 화면에서 선으로 노드들을 연결하는 것은 단순히 순서를 정하는 것이 아닙니다. 그것은 데이터가 흐르는 선을 이어주는 작업과 같습니다. 이 선을 타고 흐르는 것이 바로 JSON 데이터입니다. n8n은 전 세계의 수만 가지 앱과 서비스를 연결해주는데, 이들 각각이 사용하는 언어가 다릅니다. 구글 시트는 행과 열을 쓰고, 슬랙은 메시지 객체를 씁니다. n8n은 이 서로 다른 언어들을 JSON이라는 만국 공용어로 통역해서 소통하게 해 줍니다.
문제는 이 과정에서 n8n만의 독특한 규칙이 있다는 점입니다. 이 규칙을 모르면 마치 외국인에게 한국말을 그대로 직역해서 말하는 것처럼 소통 오류가 발생합니다.
n8n이 데이터를 바라보는 방식: 택배박스와 편지봉투
가장 먼저 머리에 새겨야 할 것은 n8n의 모든 데이터는 배열(Array) 형태라는 사실입니다. 개발 용어가 나와서 당황하셨나요? 아주 쉬운 비유를 들어보겠습니다.
n8n의 데이터는 거대한 택배 상자라고 상상해 보세요. 이 상자의 이름은 items입니다. 모든 노드는 실행될 때 이 items라는 상자를 하나 받습니다. 그리고 상자를 열어보면 그 안에는 여러 개의 편지봉투가 들어 있습니다. 이 편지봉투 하나하나가 우리가 처리해야 할 개별 데이터입니다.
여기서 중요한 점은 편지봉투의 구조입니다. 봉투를 열어보면 보통 두 가지가 들어있습니다. 하나는 우리가 읽을 수 있는 글씨가 적힌 편지지, 다른 하나는 사진이나 파일 같은 물건입니다. n8n에서는 편지지를 json이라고 부르고, 사진 같은 물건을 binary라고 부릅니다.
우리가 워크플로우에서 다루는 이름, 이메일, 전화번호 같은 텍스트 데이터는 모두 이 json이라는 편지지 안에 적혀 있습니다. 그래서 우리가 데이터에 접근할 때 항상 json.name이나 json.email처럼 json이라는 단어를 먼저 언급해야 하는 것입니다. 반면 엑셀 파일이나 이미지 파일을 다룰 때는 binary라는 공간을 찾아봐야 합니다.
내 워크플로우는 왜 첫 번째 데이터만 처리하는지
많은 분들이 겪는 대표적인 실수가 있습니다. 구글 시트에서 회원 명단 100명을 불러왔는데, 슬랙 알림은 딱 한 번만 오고 끝나는 경우입니다. 혹은 반대로 한 번만 실행되어야 할 알림이 100번이나 울리는 경우도 있습니다.
이것은 앞서 말한 택배 상자(items 배열)의 개념을 혼동했기 때문입니다. n8n의 대부분의 노드는 상자 안에 들어있는 편지봉투(아이템)의 개수만큼 반복해서 실행되도록 설계되어 있습니다.
만약 구글 시트 노드가 100명의 데이터를 읽어왔다면, items 상자 안에는 100개의 편지봉투가 들어있는 셈입니다. 이 상자를 슬랙 노드에 전달하면, 슬랙 노드는 본능적으로 100번의 작업을 수행하려고 합니다. 이것이 n8n이 가진 강력한 자동 반복 기능입니다. 별도로 반복문을 설정하지 않아도 알아서 배열의 개수만큼 실행되는 것입니다.
그런데 만약 데이터를 하나로 뭉쳐서 이메일 한 통에 100명의 명단을 모두 적어 보내고 싶다면 어떻게 해야 할까요? 이때는 100개의 편지봉투를 큰 서류 봉투 하나에 몰아넣는 작업이 필요합니다. 즉, 100개의 아이템을 1개의 아이템으로 합치는 변환 과정이 필요한 것입니다. 이 차이를 이해하는 것이 중급자로 가는 지름길입니다.
실전에서 마주치는 데이터 참조의 기술
이제 구조를 알았으니 실제로 데이터를 끄집어내서 사용하는 방법을 알아보겠습니다. n8n 화면에서 변수를 넣고 싶을 때 Expressions(표현식) 창을 엽니다. 여기서 달러 표시($)로 시작하는 몇 가지 핵심 명령어를 볼 수 있습니다.
가장 많이 쓰는 것은 $json입니다. 이것은 지금 내 손에 들려 있는 편지봉투 안의 편지지를 보여줘라는 뜻입니다. 현재 처리 중인 아이템의 데이터를 가져올 때 씁니다. 가장 기본적이면서도 중요한 명령어입니다.
그다음으로 유용한 것이 $node입니다. 이것은 바로 앞 단계가 아닌, 저 멀리 떨어져 있는 과거의 노드에서 데이터를 가져오고 싶을 때 사용합니다. 예를 들어 1단계에서 받은 주문 정보를 5단계에서 다시 확인하고 싶다면 $node[“1단계 노드 이름”].json.orderId 같은 방식으로 데이터를 소환할 수 있습니다.
여기서 주의할 점이 하나 있습니다. $node를 사용할 때는 데이터의 순서가 중요합니다. 만약 1단계 노드에는 데이터가 10개였는데, 중간에 필터링을 거쳐 5단계에는 데이터가 3개만 남았다면 어떻게 될까요? 이때 $node를 잘못 사용하면 서로 짝이 맞지 않는 엉뚱한 데이터를 가져올 위험이 있습니다. 이럴 때는 데이터를 억지로 가져오기보다는, 필요한 데이터를 잃어버리지 않도록 중간중간 정보를 합쳐서 데려오는 설계가 필요합니다.
자주 겪는 에러와 해결방법
워크플로우를 돌리다 보면 [object Object]라는 알 수 없는 문구를 보게 될 때가 있습니다. 이것은 텍스트가 나와야 할 자리에 데이터 꾸러미 자체가 통째로 들어갔을 때 발생합니다. 즉, 편지지에 적힌 내용을 읽어야 하는데 편지봉투 자체를 읽으려고 시도한 셈입니다. 이럴 때는 내가 참조한 경로 뒤에 .name이나 .id처럼 구체적인 항목을 지정해 주었는지 확인해야 합니다.

또 다른 흔한 에러는 Cannot read property of undefined입니다. 이건 정말 지긋지긋하게 보게 되는 에러입니다. 해석하자면 없는 데이터에서 무언가를 찾으려고 했다는 뜻입니다. 보통 API에서 데이터를 받아올 때, 어떤 항목은 값이 있고 어떤 항목은 비어있는 경우가 많습니다.

예를 들어, 고객 정보에 주소지가 있는 사람도 있고 없는 사람도 있다고 가정해 봅시다. 주소가 없는 사람의 데이터를 처리할 때 address.city를 찾으라고 시키면 n8n은 당황하며 에러를 뿜어냅니다. 이럴 때는 멈추지 말고 넘어가라는 설정을 해주거나, 표현식에서 물음표(?)를 활용한 옵셔널 체이닝 기술을 써야 합니다. 자바스크립트 문법이지만 n8n에서는 아주 유용하게 쓰입니다.
코딩 없이 데이터 다루는 방법
개발자가 아니더라도 몇 가지 노드만 잘 활용하면 데이터를 떡 주무르듯 다룰 수 있습니다.
첫 번째는 Aggregate(집계) 노드입니다. 흩어져 있는 여러 개의 아이템을 하나로 묶어줄 때 사용합니다. 개별적으로 발송되던 알림을 하나로 모아서 요약 리포트로 만들 때 필수적입니다.
두 번째는 Edit Fields(Set) 노드입니다. 복잡한 데이터 중에서 내가 필요한 것만 골라내거나, 이름을 보기 좋게 바꿀 때 사용합니다. 워크플로우 중간중간에 이 노드를 배치해서 데이터를 깔끔하게 정리해 주면, 나중에 문제가 생겼을 때 어디서 잘못되었는지 찾기가 훨씬 수월해집니다.
세 번째는 Code 노드입니다. 코딩을 몰라도 요즘은 AI에게 물어보면 n8n용 자바스크립트 코드를 아주 잘 짜줍니다. 특히 복잡한 계산이 필요하거나 데이터 구조를 완전히 뒤바꿔야 할 때, AI의 도움을 받아 코드를 붙여 넣기만 하면 마법 같은 일이 일어납니다.
개념만 있으면 데이터 에러는 문제없습니다
처음에는 괄호와 따옴표로 뒤덮인 JSON 데이터가 외계어처럼 보일 수 있습니다. 하지만 그 안에는 일정한 규칙과 질서가 있습니다. 오늘 말씀드린 items 배열이라는 큰 상자와 json 객체라는 편지봉투의 개념만 확실히 잡고 계신다면, 어떤 복잡한 워크플로우를 만나도 당황하지 않으실 겁니다.
에러가 났다고 해서 좌절하지 마시고, 에러 메시지는 데이터가 길을 잃었다고 보내는 신호일뿐입니다. 그 신호를 읽고 길을 다시 터주는 과정에서 자동화 실력은 비약적으로 성장할 것입니다. 이제는 데이터가 왜 거기서 멈췄는지 조금은 다르게 보이실 겁니다.