DAY 03AI 에이전트 · 외부 서비스 연결 실습
Google Sheets와 이메일 연결하기
오늘부터 n8n 밖의 실제 서비스와 데이터를 주고받습니다. 고객 정보를 Google Sheets에 저장하고, 이름이 자동으로 바뀌는 확인 이메일을 Gmail로 보내 봅니다.
1.수업 구성
DAY 02에서는 n8n 안에서만 데이터를 옮겼습니다. 오늘은 n8n이 Google Sheets와 Gmail을 연결하는 중심 역할을 합니다. 새로 배우는 것은 "서비스를 연결하는 방법(Credential)"이고, 데이터를 연결하는 방법(Mapping)은 DAY 02와 똑같습니다.
초급
따라하기 실습
n8n · Google Sheets · Gmail
Google 계정
고객 정보를 Google Sheets에 저장하고, 그 정보로 이름이 자동으로 바뀌는 확인 이메일을 보내는 Workflow를 완성한다.
2.오늘 배우는 내용 & 전체 흐름
오늘 집중할 내용
오늘은 다음 순서로 진행합니다
3.지난 시간 복습 & 달라지는 점
1교시 · Google Sheets와 n8n 연결하기
Manual Trigger → Edit Fields → Edit Fields → 결과 확인
n8n → Google Sheets → Gmail
외부 서비스를 연결한다는 것
"고객이 신청하면 고객 정보를 Google Sheets에 적고 확인 이메일을 보낸다"는 업무가 있다고 해 봅시다.
신청 내용 확인 → Sheets 열기 → 이름 입력 → 이메일 입력 → 신청 내용 입력 → Gmail 열기 → 이메일 작성 → 발송
신청 데이터 → Google Sheets 저장 → Gmail 발송
사람이 프로그램을 하나씩 여는 대신 n8n이 각 서비스를 연결해 데이터를 전달합니다.
4.Credential — 서비스 연결 허락
Credential (연결 정보)
"이 Workflow가 내 Google 서비스에 들어가도 된다고 허락한 연결 정보"입니다. Google Sheets Node를 추가했다고 바로 내 시트를 쓸 수 있는 것이 아니라, 먼저 n8n과 내 Google 계정을 연결해야 합니다.
비유하자면: 집 비밀번호를 알려주는 것이 아니라, 택배 기사님에게 현관 출입 카드를 발급해 주는 것과 같습니다. 필요한 곳에만 들어갈 수 있고, 필요 없어지면 카드만 회수하면 됩니다.
Credential과 비밀번호는 다르다
n8n Node에 Google 비밀번호를 직접 입력하지 않습니다. n8n Cloud에서는 Google Sheets·Gmail을 Google 로그인 버튼(Sign in with Google)으로 연결할 수 있습니다. 이런 방식을 OAuth(오어스)라고 합니다.
서비스 → 아이디 / 비밀번호 입력 → 로그인
n8n → Google에 연결 요청 → Google에서 로그인 → 내가 권한 허용 → n8n에 접근 권한 부여
다른 서비스에 비밀번호를 알려주는 것이 아니라 Google을 통해 접근 권한을 허락하는 구조입니다. 기술적인 원리는 외울 필요 없습니다.
Credential이 만들어지는 순서
5.Google Sheet 준비하기
Google Sheets는 표 형태로 데이터를 쌓을 수 있어서 자동화 실습에 많이 씁니다. 고객 문의, 신청자 관리, 콘텐츠 관리처럼 쓰임새가 다양합니다.
Google Sheets의 구조
| name | request | status | |
|---|---|---|---|
| 김민지 | example@email.com | 강의 문의 | 신규 |
↑ 색칠된 가로 한 줄 전체가 Row 하나입니다. 새 고객이 들어오면 새 Row가 추가됩니다.
따라하기 — 실습용 시트 만들기
AI_AGENT_DAY03으로 바꾸기customer로 바꾸기4번은 아래 내용을 복사해 A1 칸을 누른 뒤 붙여넣으면 네 칸에 한 번에 들어갑니다.
6.실습: Sheets에 데이터 저장
오늘 처음 만들 Workflow입니다. 테스트용 고객 정보를 만들어 실제 스프레드시트에 저장합니다.
Workflow 시작
테스트용 고객 정보 만들기
고객 정보를 실제 시트에 저장
STEP 1. Workflow 만들고 고객 정보 준비하기
새 Workflow 이름을 DAY03_Google_Sheets로 정하고, Manual Trigger → Edit Fields를 연결합니다. Edit Fields에 아래 데이터를 만드세요. email에는 자신의 이메일 주소를 넣습니다.
| Field | Value |
|---|---|
| name | 김민지 |
| 자신의 이메일 주소 | |
| request | AI Agent 과정에 대해 문의드립니다. |
| status | 신규 |
* Field 이름은 시트 1행의 제목과 글자까지 똑같이 맞춰 두면 다음 단계가 쉬워집니다.
STEP 2. Google Sheets Node 추가하고 계정 연결하기
Append Row (행 추가)
시트의 맨 아래에 새 줄을 하나 붙이는 작업입니다. 기존 데이터는 그대로 두고 새 고객이 아래로 계속 쌓입니다.
STEP 3. 저장할 위치 고르기
어느 파일의 어느 탭에 저장할지 목록(From list)에서 고릅니다.
AI_AGENT_DAY03customer7.Mapping — 열과 데이터 연결
이제 가장 중요한 단계입니다. 시트의 열(name, email, request, status)과 n8n의 데이터를 짝지어 연결합니다. DAY 02에서 배운 Data Mapping과 같은 원리입니다.
연결하는 방법
Google Sheets Node의 Mapping Column Mode에서 Map Each Column Manually(열마다 직접 연결)를 고르면 시트의 열 이름이 칸으로 나타납니다. 각 칸에 왼쪽 INPUT의 같은 이름 값을 끌어다 놓습니다.
Map Automatically(자동 연결)를 고르면 이름이 똑같은 것끼리 알아서 연결됩니다. 편하지만 오늘은 원리를 눈으로 보기 위해 직접 연결합니다.
실습: 첫 번째 고객 정보 저장하기
Workflow 전체를 실행한 뒤 Google Sheets를 직접 열어 확인합니다.
| name | request | status | |
|---|---|---|---|
| 김민지 | 자신의 이메일 | AI Agent 과정에 대해 문의드립니다. | 신규 |
n8n에서 만든 데이터가 실제 외부 서비스까지 전달되었습니다.
데이터만 바꿔서 다시 실행하기
Edit Fields의 name을 박하늘, request를 수업 일정이 궁금합니다.로 바꾸고 다시 실행합니다.
| name | request | status | |
|---|---|---|---|
| 김민지 | 자신의 이메일 | AI Agent 과정에 대해 문의드립니다. | 신규 |
| 박하늘 | 자신의 이메일 | 수업 일정이 궁금합니다. | 신규 |
핵심 — Workflow는 그대로 반복해서 쓰고, 데이터만 계속 바뀝니다. 이것이 자동화의 힘입니다.
8.실습: Sheets 데이터 읽어오기
Google Sheets는 저장만 하는 곳이 아닙니다. 저장된 데이터를 다시 n8n으로 가져올 수도 있습니다. 방향이 반대가 됩니다.
n8n → Google Sheets
Google Sheets → n8n
OUTPUT에 시트의 줄들이 나타납니다. 시트에 있던 데이터가 이제 다음 Node가 쓸 수 있는 Output이 되었습니다. Credential은 한 번 만들면 다른 Node에서도 다시 고르기만 하면 됩니다.
확인 문제
Q1시트에 데이터를 넣을 때 n8n은 데이터를 보내는가, 받는가?답 보기
보냅니다. 조회할 때는 반대로 받습니다.
Q2시트의 열과 n8n 데이터를 연결하는 과정은?답 보기
Mapping입니다.
Q3새 고객이 들어올 때마다 Workflow를 새로 만들어야 하는가?답 보기
아닙니다. 같은 Workflow에 데이터만 바뀌어 들어오면 됩니다.
9.Gmail 연결하고 첫 이메일
2교시 · Gmail 연결과 실제 업무 자동화 만들기
목표를 하나 더합니다. "고객 정보를 시트에 저장한 뒤 고객에게 확인 이메일을 보낸다." 두 개의 외부 서비스가 하나의 Workflow에 연결됩니다.
Gmail Node — 오늘은 "이메일 보내기"만
Gmail Node로 Gmail의 여러 기능을 쓸 수 있습니다. 오늘은 Send a message(메시지 보내기)를 씁니다. 기본으로 채우는 칸은 네 가지입니다.
* 필요하면 참조(CC)·숨은 참조(BCC)·첨부파일 옵션도 쓸 수 있습니다.
따라하기 — 고정값으로 첫 이메일 보내기
새 Workflow에 Manual Trigger → Gmail(Send a message)을 연결합니다. Credential은 Google Sheets 때처럼 Sign in with Google로 연결합니다. 처음에는 연결 없이 고정값으로만 테스트합니다.
| To | 자신의 이메일 주소 |
| Subject | n8n 이메일 테스트 |
| Message | n8n에서 보낸 첫 번째 자동 이메일입니다. |
실행한 뒤 내 메일함에 실제로 이메일이 왔는지 확인합니다.
받은 메일 맨 아래에 "This email was sent automatically with n8n" 같은 문구가 붙을 수 있습니다. Gmail Node의 Options → Append n8n Attribution을 끄면 사라집니다.
10.실습: 이름이 바뀌는 이메일
지금 이메일은 항상 같은 내용을 보냅니다. 하지만 실제 업무에서는 받는 사람마다 내용이 달라져야 합니다.
고정 문장 + 변하는 데이터
자동화에서 가장 많이 쓰는 방식입니다. 바뀌지 않는 문장은 직접 쓰고, 바뀌는 부분만 앞 Node에서 가져옵니다.
"님, 안녕하세요. 문의가 정상적으로 접수되었습니다. … 확인 후 안내드리겠습니다."
따라하기
방금 만든 Gmail Node 앞에 Edit Fields(고객 정보)를 끼워 넣고, 이번에는 To와 Message에 앞 Node의 값을 끌어다 놓습니다. 김민지와 문의 내용은 직접 입력하지 않습니다.
email을 끌어다 놓기문의가 정상적으로 접수되었습니다. (고정)Message는 끌어다 놓기로 직접 만들어 보고, 막히면 아래를 붙여넣으세요 (Expression 선택).
실행 후 메일함에서 이름과 문의 내용이 Edit Fields의 값으로 채워졌는지 확인하세요.
11.실습: 고객 문의 접수 자동화
지금까지 만든 것을 하나로 연결합니다. 이제 하나의 데이터를 여러 서비스가 함께 씁니다.
테스트 데이터
| name | 자신의 이름 |
| 자신의 이메일 주소 | |
| request | AI Agent 수업 신청 방법이 궁금합니다. |
| status | 신규 |
실행 후 ① 시트에 새 줄이 생겼는지, ② 메일함에 "문의 접수가 완료되었습니다." 이메일이 왔는지 둘 다 확인합니다.
데이터는 어떻게 이동했을까?
데이터 생성name · email · request · status
name → name 열
email → email 열
request → request 열
status → status 열
email → 받는 사람
name → 이메일 본문
request → 이메일 본문
하나의 데이터가 여러 Node에서 서로 다른 용도로 쓰이고 있습니다.
12.필요한 데이터를 찾는 습관
Google Sheets Node를 지나면 데이터가 사라질까요? 아닙니다. 다만 Node마다 내보내는 데이터의 모양이 다를 수 있어서, 각 Node의 실제 OUTPUT을 확인하는 습관이 중요합니다.
바로 앞이 아닌 Node에서 데이터 가져오기
Edit Fields → Google Sheets → Gmail 구조에서, Gmail에 필요한 값이 바로 앞 Sheets가 아니라 처음 Edit Fields에 있는 경우도 있습니다. 데이터는 꼭 바로 앞 Node에서만 가져와야 하는 것이 아닙니다.
Gmail Node 왼쪽 INPUT 위쪽의 Node 선택 목록에서 Edit Fields를 고르면 그 Node의 데이터가 보이고, 거기서 끌어다 놓을 수 있습니다. 그러면 아래처럼 Node 이름이 들어간 연결식이 만들어집니다.
바로 앞 Node의 값
{{ $json.email }}
이름을 지정한 Node의 값 (예: Edit Fields)
{{ $('Edit Fields').item.json.email }}
* 연결식을 외울 필요는 없습니다. 끌어다 놓으면 n8n이 알아서 만들어 줍니다.
필요한 값이 안 보일 때 — 바로 직접 입력하지 않기
실습: 데이터가 바뀌어도 동작하는지 확인하기
Edit Fields의 값만 바꿔 두 번 실행하고, 매번 시트와 메일함을 확인합니다.
테스트 1
name : 박민수
request : 환불 규정이 궁금합니다.
테스트 2
name : 이하늘
request : 수업 시간을 변경하고 싶습니다.
Workflow는 고치지 않았는데 결과 내용만 바뀐다면 변하는 데이터가 제대로 연결된 것입니다.
13.문제 해결: 세 가지로 나누기
실습: 일부러 잘못 연결해 보기
Edit Fields의 이름표 email을 customer_email로 바꾸고, Gmail Node는 그대로 둔 채 실행해 봅니다. 받는 사람이 비어 오류가 날 것입니다. 아래 순서로 원인을 찾아 고쳐 보세요.
오류는 크게 세 종류
외부 서비스를 연결하면 오류 종류도 많아집니다. 먼저 어떤 종류의 문제인지 나누면 찾아볼 범위가 확 줄어듭니다.
연결 문제
Google 계정 · Credential 관련
- · 서비스에 접근할 수 없음
- · 인증 필요
- · 권한 부족
데이터 문제
Node 사이로 전달되는 값 관련
- · email 값이 없음
- · 잘못된 열에 연결함
- · 필요한 Field를 찾을 수 없음
설정 문제
Node의 작업 설정 관련
- · 다른 스프레드시트를 고름
- · 다른 탭(Sheet)을 고름
- · 원하지 않는 작업(Operation)을 고름
GPT에 묻기 전에 확인할 다섯 가지
그래도 해결되지 않으면 화면을 캡처해 GPT에게 묻습니다. "구글시트 연결이 안 돼요."처럼 물으면 원인을 알 수 없으니, 아래처럼 구조와 의심되는 원인까지 함께 전합니다.
문제 해결 루틴
Google 연결이 안 될 때도 같은 루틴으로 해결합니다. ① 단계에서 Credential 화면까지는 정상인지, Node 실행에서 막히는지부터 나눠 보세요.
14.테스트 데이터와 Node 이름
연습할 때는 실제 고객 정보를 쓰지 않기
자동화 실습에서는 실제 고객의 개인정보를 쓰지 않습니다. 잘못 연결하면 엉뚱한 사람에게 이메일이 실제로 발송될 수 있기 때문입니다.
충분히 테스트해서 제대로 동작하는 것을 확인한 뒤에 실제 업무에 적용합니다.
Workflow가 길어지면 읽는 법
Manual Trigger → Edit Fields → Google Sheets → Gmail(고객) → Gmail(담당자)처럼 길어지면 세 가지 기준으로 읽습니다.
Node 이름을 역할로 바꾸기
같은 종류의 Node가 여러 개면 n8n은 뒤에 숫자를 붙입니다. 나중에 보면 무엇이 무엇인지 알 수 없습니다. Node를 선택하고 F2를 누르거나 이름을 눌러 바꿉니다.
Edit Fields · Edit Fields1
Google Sheets · Google Sheets1
Gmail · Gmail1
고객 정보 생성 · 문의 내역 저장
고객 확인 메일 · 담당자 알림 메일
Workflow는 만드는 것뿐 아니라 나중에 다시 읽을 수 있어야 합니다. 이름을 바꾸면 12번의 $('Edit Fields') 같은 연결식 안의 이름도 n8n이 함께 바꿔 줍니다.
15.도전 과제
오늘 만든 Workflow를 복제(Duplicate)하거나 새로 만들어 도전해 보세요. 시트에 필요한 열을 먼저 만들어 두는 것을 잊지 마세요.
강의 신청 자동화
신청 정보(name · email · course · date) → Google Sheets 저장 → 신청 완료 이메일
[이름]님의 [과정명] 신청이 완료되었습니다.
신청일:
[날짜]
예약 접수 자동화
예약 정보(name · email · service · reservation_date · reservation_time) → Google Sheets → Gmail
[이름]님의 예약이 접수되었습니다.
서비스: [서비스명]
예약일: [예약 날짜]
시간: [예약 시간]
담당자에게 알림 보내기
고객 문의 → Google Sheets 저장 → 담당자에게 이메일 (제목: 새로운 고객 문의가 등록되었습니다.)
새로운 문의가 등록되었습니다.
고객명: [이름]
이메일: [이메일]
문의 내용: [문의 내용]
이번에는 고객의 이메일이 받는 사람이 아니라 본문의 데이터로 쓰입니다. 같은 데이터도 Workflow의 목적에 따라 쓰이는 위치가 달라집니다.
이메일 두 통 보내기
고객 정보 → Google Sheets → 고객 확인 이메일 → 담당자 알림 이메일
고객에게는 "문의가 정상적으로 접수되었습니다.", 담당자에게는 "새로운 문의가 들어왔습니다."를 보냅니다. 하나의 Trigger로 여러 작업을 이어서 실행할 수 있습니다. 두 번째 Gmail에서는 12번에서 배운 대로 Edit Fields의 데이터를 골라 쓰세요.
16.최종 실습: 혼자 만들어 보기
아래 요구사항을 보고 Workflow를 직접 구성합니다. n8n을 바로 열지 말고 Flow부터 적어 보세요.
- · 교육 신청자가 있다.
- · 신청자의 이름, 이메일, 과정명, 신청 목적을 기록해야 한다.
- · 데이터는 Google Sheets에 저장한다.
- · 저장이 끝나면 신청자에게 접수 완료 이메일을 보낸다.
Flow를 다 적었으면 그대로 n8n에서 Node를 고르고 연결해 완성합니다. 이메일 본문에 이름과 과정명이 자동으로 들어가게 만드는 것까지가 목표입니다.
17.오늘 내용 정리 & 다음 수업
오늘의 핵심 개념
내 일에 떠올려 보기
오늘 배운 시트에 한 줄씩 쌓기와 정해진 사람에게 메일 보내기를 내 일에 쓴다면 어디일까요? 한 줄로 떠올려 보세요.
예: 상담 신청을 시트에 모으고 확인 메일 보내기 · 매일 쓰는 업무 기록을 시트에 쌓기 · 모임 참가 신청 받고 안내 메일 보내기
오늘 배운 용어
| 용어 | 뜻 |
|---|---|
| Credential | 외부 서비스를 쓰도록 허락한 연결 정보 |
| OAuth | 비밀번호를 알려주지 않고 로그인으로 접근 권한만 허락하는 방식 |
| Spreadsheet / Sheet | Google Sheets 문서 파일 하나 / 그 안의 탭 하나 |
| Column / Row | 세로 방향 항목(열) / 가로 한 줄 데이터 한 건(행) |
| Append Row | 시트 맨 아래에 새 행 추가 |
| Get Row(s) | 시트에 저장된 행 가져오기 |
| Mapping | 한 Node의 데이터를 다른 입력 칸과 연결하는 것 |
| 고정값 / 변하는 값 | 직접 입력한 값 / 실행할 때마다 데이터에 따라 달라지는 값 |
스스로 확인하기
먼저 답을 떠올린 뒤 눌러서 확인하세요.
Q1Credential은 어떤 역할을 하는가?답 보기
n8n이 내 Google Sheets·Gmail 같은 외부 서비스에 접근해도 된다고 허락한 연결 정보입니다. 한 번 만들면 여러 Node에서 골라 쓸 수 있습니다.
Q2Gmail의 받는 사람을 매번 직접 입력하지 않으려면?답 보기
To 칸에 앞 Node의 email 값을 끌어다 연결(Mapping)합니다.
Q3Credential 오류와 Mapping 오류는 어떻게 다른가?답 보기
Credential 오류는 서비스에 접근 자체를 못 하는 연결 문제(인증 필요, 권한 부족)이고, Mapping 오류는 접근은 되지만 필요한 값이 없거나 잘못된 칸에 연결된 데이터 문제입니다.
Q4Google Sheets에서 가져온 데이터를 다음 Node에서 다시 쓸 수 있는가?답 보기
쓸 수 있습니다. Get row(s)로 가져온 데이터는 다른 Node의 Output과 똑같이 다음 Node의 Input이 됩니다.
오늘까지 배운 내용으로 데이터를 받고 → 저장하고 → 전달하기까지 할 수 있습니다. 다음은 그 가운데에 AI가 생각하고 처리하는 단계를 넣을 차례입니다.
오늘 만든 입력 → Google Sheets → Gmail 사이에 Gemini를 넣습니다. AI가 문의 내용을 읽고 요약·분류·정보 추출·답변 작성까지 하는 AI Workflow로 발전시킵니다. 이를 위해 API와 API Key가 무엇인지도 함께 배웁니다.