Gmail + Google Sheets — 이메일 자동화의 기본

Gmail + Google Sheets — 이메일 자동화의 기본

Part 3의 시작이다. 이제부터 실제 서비스를 연동한다. Gmail과 Google Sheets — 가장 많이 사용되는 두 서비스를 n8n에 연결하고, 이메일 업무를 자동화한다.

Google OAuth2 Credential 설정

Gmail과 Google Sheets를 사용하려면 먼저 Google OAuth2 인증을 설정해야 한다. 처음 한 번만 하면 이후 모든 Google 서비스에서 재사용할 수 있다.

Step 1: Google Cloud Console에서 프로젝트 생성

  1. Google Cloud Console 접속
  2. 상단 프로젝트 선택 → "새 프로젝트" 클릭
  3. 프로젝트 이름: "n8n Automation" → 만들기

Step 2: API 활성화

  1. 좌측 메뉴 → API 및 서비스 → 라이브러리
  2. Gmail API 검색 → 사용 설정
  3. Google Sheets API 검색 → 사용 설정
  4. Google Drive API 검색 → 사용 설정

Step 3: OAuth 동의 화면 구성

  1. API 및 서비스 → OAuth 동의 화면
  2. User Type: 외부 선택 (테스트 용도)
  3. 앱 이름: "n8n Automation"
  4. 사용자 지원 이메일: 본인 이메일
  5. 범위(Scopes) 추가:
  6. https://www.googleapis.com/auth/gmail.modify
  7. https://www.googleapis.com/auth/spreadsheets
  8. https://www.googleapis.com/auth/drive
  9. 테스트 사용자에 본인 Gmail 주소 추가

Step 4: OAuth 클라이언트 ID 생성

  1. API 및 서비스 → 사용자 인증 정보 → 사용자 인증 정보 만들기
  2. OAuth 클라이언트 ID 선택
  3. 애플리케이션 유형: 웹 애플리케이션
  4. 이름: "n8n"
  5. 승인된 리디렉션 URI: http://localhost:5678/rest/oauth2-credential/callback
  6. 만들기 → 클라이언트 ID클라이언트 보안 비밀번호 복사

Step 5: n8n에서 Credential 등록

  1. n8n → Credentials → Add Credential
  2. Google OAuth2 API 선택
  3. Client ID와 Client Secret 입력
  4. 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 서식, 인터랙티브 버튼, 슬래시 커맨드까지.