Gmail + Google Sheets — 이메일 자동화의 기본
Part 3의 시작이다. 이제부터 실제 서비스를 연동한다. Gmail과 Google Sheets — 가장 많이 사용되는 두 서비스를 n8n에 연결하고, 이메일 업무를 자동화한다.
Google OAuth2 Credential 설정
Gmail과 Google Sheets를 사용하려면 먼저 Google OAuth2 인증을 설정해야 한다. 처음 한 번만 하면 이후 모든 Google 서비스에서 재사용할 수 있다.
Step 1: Google Cloud Console에서 프로젝트 생성
- Google Cloud Console 접속
- 상단 프로젝트 선택 → "새 프로젝트" 클릭
- 프로젝트 이름: "n8n Automation" → 만들기
Step 2: API 활성화
- 좌측 메뉴 → API 및 서비스 → 라이브러리
- Gmail API 검색 → 사용 설정
- Google Sheets API 검색 → 사용 설정
- Google Drive API 검색 → 사용 설정
Step 3: OAuth 동의 화면 구성
- API 및 서비스 → OAuth 동의 화면
- User Type: 외부 선택 (테스트 용도)
- 앱 이름: "n8n Automation"
- 사용자 지원 이메일: 본인 이메일
- 범위(Scopes) 추가:
https://www.googleapis.com/auth/gmail.modifyhttps://www.googleapis.com/auth/spreadsheetshttps://www.googleapis.com/auth/drive- 테스트 사용자에 본인 Gmail 주소 추가
Step 4: OAuth 클라이언트 ID 생성
- API 및 서비스 → 사용자 인증 정보 → 사용자 인증 정보 만들기
- OAuth 클라이언트 ID 선택
- 애플리케이션 유형: 웹 애플리케이션
- 이름: "n8n"
- 승인된 리디렉션 URI:
http://localhost:5678/rest/oauth2-credential/callback - 만들기 → 클라이언트 ID와 클라이언트 보안 비밀번호 복사
Step 5: n8n에서 Credential 등록
- n8n → Credentials → Add Credential
- Google OAuth2 API 선택
- Client ID와 Client Secret 입력
- Connect 클릭 → Google 로그인 → 권한 승인
✅ 완료! 이제 Gmail, Google Sheets, Google Drive 노드에서 이 Credential을 사용할 수 있다.
Gmail 노드 활용
Gmail Trigger — 새 이메일 감지
새 이메일이 도착하면 워크플로우를 시작하는 트리거.
| 설정 | 설명 |
|---|---|
| Poll Times | 확인 주기 (최소 1분) |
| Label | 특정 라벨의 이메일만 감지 |
| Search Query | Gmail 검색 필터 (고급) |
검색 필터 예시:
| 필터 | 의미 |
|---|---|
from:[email protected] | 특정 발신자 |
subject:견적 | 제목에 "견적" 포함 |
has:attachment | 첨부파일 있음 |
is:unread | 읽지 않은 메일 |
after:2026/04/01 | 특정 날짜 이후 |
from:@company.com subject:주문 | 조합 |
Gmail 노드 — 이메일 전송
| 동작 | 설명 |
|---|---|
| Send | 새 이메일 전송 |
| Reply | 기존 이메일에 답장 |
| Add Label | 라벨 추가 |
| Remove Label | 라벨 제거 |
| Mark as Read | 읽음 처리 |
| Get | 특정 이메일 가져오기 |
| Get Many | 조건에 맞는 이메일 목록 |
Google Sheets 노드 활용
기본 동작
| 동작 | 설명 |
|---|---|
| Append Row | 시트 마지막에 행 추가 |
| Read Rows | 행 조회 (전체 또는 필터) |
| Update Row | 특정 행 수정 |
| Delete Row | 특정 행 삭제 |
| Clear | 시트 데이터 전체 삭제 |
Append Row 설정
Document: (스프레드시트 선택 또는 URL 입력)
Sheet: Sheet1
Mapping Mode: Map Automatically (필드명 = 열 헤더)
열 헤더 매핑:
스프레드시트의 첫 행이 헤더라면, n8n의 데이터 필드명과 헤더명이 일치해야 자동 매핑된다.
스프레드시트 헤더: | 이름 | 이메일 | 날짜 |
n8n 데이터: { "이름": "홍길동", "이메일": "hong@...", "날짜": "2026-04-20" }
→ 자동 매핑 성공!
Read Rows 필터
Filters:
Column: 상태
Value: 미처리
이렇게 설정하면 "상태" 열이 "미처리"인 행만 가져온다.
실전 워크플로우: 문의 이메일 자동 분류
고객 문의 이메일을 자동으로 분류하고 기록하는 워크플로우를 만든다.
전체 구조
[Gmail Trigger] → [Edit Fields] → [IF: 제목 분류] → [Google Sheets] → [Slack 알림]
Step 1: Gmail Trigger
Credential: Google OAuth2 (앞서 설정한 것)
Poll Times: Every 5 Minutes
Search Query: label:inbox is:unread subject:(문의 OR 견적 OR 불만)
Step 2: Edit Fields — 데이터 정제
발신자: {{ $json.from.split('<')[0].trim() }}
이메일: {{ $json.from.match(/<(.+)>/)?.[1] || $json.from }}
제목: {{ $json.subject }}
수신일: {{ DateTime.fromISO($json.date).toFormat('yyyy-MM-dd HH:mm') }}
본문요약: {{ $json.text?.substring(0, 200) || '(본문 없음)' }}
Step 3: IF 노드 — 유형 분류
IF: $json.제목 contains "견적"
true → 카테고리 = "견적 문의"
false → IF: $json.제목 contains "불만"
true → 카테고리 = "불만 접수"
false → 카테고리 = "일반 문의"
💡 팁: 이런 다중 분기는 Switch 노드가 더 깔끔하다.
Step 4: Google Sheets — 기록
Document: "고객 문의 관리"
Sheet: "문의 목록"
Operation: Append Row
Fields:
발신자, 이메일, 제목, 카테고리, 수신일, 본문요약, 상태="미처리"
Step 5: Slack 알림
Channel: #customer-support
Message:
📬 새 {{ $json.카테고리 }}
발신: {{ $json.발신자 }} ({{ $json.이메일 }})
제목: {{ $json.제목 }}
고급 패턴
패턴 1: 이메일 첨부파일 → Google Drive 저장
[Gmail Trigger] → [IF: 첨부파일?] → [Google Drive: 파일 업로드]
→ [Google Sheets: 파일 목록 기록]
Gmail 노드에서 첨부파일은 바이너리 데이터로 제공된다. Google Drive 노드의 Input Binary Field에 바이너리 필드명을 지정하면 된다.
패턴 2: 스프레드시트 → 일괄 이메일 발송
[Schedule: 매일 오전 10시]
→ [Google Sheets: Read Rows (상태=미발송)]
→ [Split In Batches: 10개씩]
→ [Gmail: Send (개인화된 이메일)]
→ [Google Sheets: Update Row (상태=발송완료)]
→ [Wait: 2초]
→ [Loop]
패턴 3: 자동 답장 + 라벨링
[Gmail Trigger: 특정 키워드]
→ [Gmail: Reply (자동 답장 텍스트)]
→ [Gmail: Add Label (자동처리)]
→ [Gmail: Mark as Read]
트러블슈팅
"Insufficient Permission" 에러
OAuth 스코프가 부족하다. Google Cloud Console에서 필요한 스코프를 추가하고 Credential을 재연결하자.
스프레드시트에 빈 행이 생김
Append Row 전에 데이터가 빈 아이템일 수 있다. Filter 노드로 필수 필드가 비어있는 아이템을 제거하자.
Gmail Trigger가 느림
Gmail Trigger는 폴링 방식이다. 최소 1분 간격으로 확인하므로, 실시간이 필요하면 Google Pub/Sub + Webhook 방식을 고려하자.
📝 정리
- [x] Google OAuth2: Cloud Console에서 프로젝트 생성 → API 활성화 → OAuth 설정
- [x] Gmail Trigger: 검색 필터로 특정 이메일만 감지 (from, subject, label 등)
- [x] Gmail 노드: Send, Reply, Add Label, Mark as Read 등 이메일 조작
- [x] Google Sheets: Append Row(추가), Read Rows(조회), Update Row(수정)
- [x] 실전: 문의 이메일 → 자동 분류 → 스프레드시트 기록 → 팀 알림
다음 편 예고
14편: Slack 노드 — 팀 알림 자동화의 핵심
팀 커뮤니케이션의 중심 Slack을 n8n에 연결한다. 메시지 전송, Block Kit 서식, 인터랙티브 버튼, 슬래시 커맨드까지.