
0. 시작하기 전에
'n8n이 다 해줌' 책을 따라 만드는 챌린지를 하고 있다.
CHAPTER 04 미션은 장바구니 도우미 AI 만들기.
지난 챕터에서는 Schedule Trigger로 자동 실행하고, Merge로 두 흐름을 합치고, Discord로 보내는 구조를 만들었다. 솔직히 그때까지만 해도 "n8n은 자동화 툴이구나" 정도의 느낌이었는데, 이번 챕터부터 분위기가 달라졌다.
AI Agent가 등장했다.
그냥 데이터 흘려보내는 게 아니라, AI가 직접 판단하고 도구를 호출하는 구조를 만드는 챕터라서 시작 전부터 살짝 긴장됐다. 거기에 Google Sheets에서 데이터를 읽어오고, 외부 API까지 붙이는 구조니까 변수가 많았다.
이번 챕터에서 만들 것
채팅으로 물어보면 AI가 알아서 장바구니 도우미 역할을 해주는 봇이다.
- 사용자가 채팅으로 "딸기 지금 비싸요?" 같은 걸 물어보면
- AI Agent가 Google Sheets에서 장바구니 품목 정보를 읽어오거나
- 농산물 시세 API를 직접 호출해서 현재 가격을 확인하고
- 맥락을 기억하면서 대화를 이어가는 구조
| 순서 | 노드 | 역할 |
| 1 | When chat message received | 채팅 메시지 수신 |
| 2 | AI Agent | 대화 흐름 제어 및 도구 호출 판단 |
| 3 | Google Gemini Chat Model | AI 언어 모델 (Gemini 연결) |
| 4 | Simple Memory | 대화 맥락 기억 |
| 5 | Get row(s) in sheet (Google Sheets) | 장바구니 품목 데이터 읽기 |
| 6 | Call '장바구니도우미AI만들기' (Sub-workflow) | 농산물 시세 조회용 하위 워크플로우 호출 |
별도 워크플로우로 분리된 시세 조회 흐름도 있었다.
| 순서 | 노드 | 역할 |
| 1 | When Executed by Another Workflow | 상위 워크플로우에서 호출 수신 |
| 2 | HTTP Request | 농산물 유통정보 API (kamis.or.kr) 호출 |
전체 흐름은 이렇다. 채팅 메시지가 들어오면 AI Agent가 뭘 해야 할지 판단한다. 장바구니 품목 확인이 필요하면 Google Sheets를 읽고, 시세가 필요하면 Sub-workflow를 호출해서 외부 API 결과를 받아온다. Simple Memory 덕분에 이전 대화 내용을 기억해서 맥락 있는 대화가 된다.
구조만 봐도 이전 챕터들이랑 차원이 다르다는 게 느껴졌다.
1. When chat message received + AI Agent — 대화형 진입점 만들기
이전 챕터들은 Schedule Trigger로 시작했는데, 이번엔 `When chat message received` 노드로 시작한다. 사용자가 채팅창에 메시지를 보내면 워크플로우가 실행되는 구조다.

AI Agent 노드 설정에서 핵심은 세 가지 연결이었다.
- Chat Model: Google Gemini Chat Model 연결
- Memory: Simple Memory 연결
- Tool: Google Sheets 노드와 Sub-workflow 노드 연결
AI Agent가 "두뇌" 역할을 하고, 나머지 노드들은 AI가 필요할 때 꺼내 쓰는 "도구"가 되는 구조다. 이 개념 자체가 처음엔 좀 낯설었는데, 직접 연결해보니까 확실히 이해됐다.
노드 하단에 점선으로 연결된 게 Tool 연결이고, 실선이 일반 데이터 흐름이라는 것도 이번에 처음 제대로 인지했다.
2. Google Gemini Chat Model + Simple Memory — AI의 머리와 기억
AI Agent에 연결하는 언어 모델로 Google Gemini를 사용했다. 원래 강의는 OpenAI 기준인데, OpenAI API 키에 문제가 있어서 Gemini로 갈아탔다. Google AI Studio에서 키 발급하고 Credentials에 붙여넣으면 바로 연결된다.

Simple Memory 노드는 AI Agent에 연결만 하면 되는데, Context Window Length를 10으로 늘렸다. 기본값이 5인데 강의에서 짧으니까 10으로 올리라고 해서 그대로 따랐다. 이름 그대로 대화 맥락을 기억해주는 노드다.

3. Google Sheets + Sub-workflow — AI가 꺼내 쓰는 도구들
AI Agent에 Tool로 연결되는 노드가 두 개였다.
Google Sheets — 장바구니 데이터 읽기
Get row(s) in sheet 노드로 미리 작성해둔 장바구니 품목 시트를 연결했다. AI가 "이 사람 장바구니에 뭐가 있지?" 판단이 필요할 때 자동으로 이 노드를 호출하는 구조다.

설정은 Document에 kamis-품목코드 시트를 연결하고, Sheet는 품목코드로 지정하는 게 전부였다. 실행하면 쌀, 찹쌀, 혼합곡, 감자, 배추, 시금치... 농산물 품목 코드가 130개 항목으로 쭉 나왔다.
Call Sub-workflow — 농산물 시세 조회

이게 이번 챕터에서 제일 흥미로웠던 부분인데... 동시에 제일 힘들었던 부분이기도 하다.
시세 조회 기능을 별도 워크플로우로 분리해서, AI가 필요할 때 그 워크플로우를 호출하는 구조였다. 하위 워크플로우는 구조 자체는 단순했다.
- When Executed by Another Workflow — 호출 수신
- HTTP Request — 농산물유통정보(kamis.or.kr) API 호출
근데 kamis API 연결이 계속 안 됐다. https로 해도 안 되고, 연결 설정 이리저리 건드려봐도 계속 실패. 눙물 대환장 파티였다.
강의에서 들은 내용으로는, n8n은 클라우드 서버에서 돌아가고 kamis API는 특정 고정 서버에서만 접근을 허용하는 구조라서 연결이 막히는 거라고 했다. 정확한 용어는 기억이 잘 안 나는데... 암튼 그런 이유로 그냥 안 된다는 걸 이해하고 넘어갔다.
최종 결과

워크플로우를 활성화하고 채팅창에 "딸기 지금 비싸요?" 라고 입력했다.
AI 이름도 스스로 '팜데이터'라고 붙이고, 날짜 기준으로 딸기 시세 분석을 시작하더니... 출하량 감소, 품질 변동, 평년 대비 비교까지 줄줄 나왔다. 거기다 "알이 크고 비싼 특품보다 중과나 소과로 잼이나 주스 만들어 드세요"라는 실용적인 팁까지. 참외랑 토마토 대안 추천도 알아서 해줬다.
솔직히 이 정도로 나올 줄은 몰랐다. 그냥 가격 숫자 뱉어주는 봇 만드는 줄 알았는데, 진짜 분석가처럼 말하는 걸 보고 살짝 당황했다.
Logs 패널을 보면 대화 한 번에 Google Gemini Chat Model → Sub-workflow 호출 → Simple Memory 저장이 반복적으로 실행되는 걸 볼 수 있다. 근데 Logs 보다가 토큰 수를 봤는데... 25,716 Tokens. 실시간으로 올라가는 거 보고 이렇게 쓰고 있는 줄 몰랐다.
느낀 점
이번 챕터는 지금까지 배운 것 중 체감 난이도가 제일 높았다. 근데 그만큼 결과물도 달랐다.
배운 점은 AI Agent 구조가 생각보다 직관적이라는 것. "AI가 알아서 판단하고 도구를 꺼내 쓴다"는 개념이 막연했는데, 직접 Tool 연결하고 결과 보고 나니까 확 잡혔다. 워크플로우를 분리해서 Sub-workflow로 관리하는 패턴도 처음 써봤는데, 기능이 복잡해질수록 이렇게 나눠두는 게 훨씬 낫겠다 싶었다.
어려웠던 점은 두 가지였다. 하나는 Gemini API 키 연결. 강의는 GPT 기준인데 한도가 꽉 차서 Gemini로 넘어가야 했고, 어떻게 연결해야 하는지 한참 고민했다. 다른 하나는 kamis API 연결 문제. n8n 클라우드 서버랑 kamis API 서버 사이에 접근 제한이 있어서 아무리 해도 연결이 안 됐다. 이건 내 설정 문제가 아니라 구조적인 문제라는 걸 강의 듣고 나서야 이해했다.
다음 챕터가 뭔지 아직 안 봤는데, 솔직히 무섭다. 챕터마다 난이도가 올라가는 게 느껴져서... 다음엔 또 뭐가 날 기다리고 있을지....