업데이트: 2026년 8월 31일. 초판의 Gemini 2.5 Flash와 고정 무료 처리량 표현은 오래됐습니다. 새 구축에는 Gemini 3.1 Flash-Lite 등 현재 모델을 검토하고 무료 티어·데이터 사용 조건은 공식 가격표를 확인하세요.
매일 쏟아지는 이메일을 수동으로 분류하느라 시간을 쓰고 있다면, n8n과 Gemini 2.5 Flash로 자동 분류 시스템을 만들어 보세요. 무료 도구만으로 구축할 수 있고, 실제로 제가 뉴스레터/문의/알림 메일을 자동 분류하는 데 쓰고 있는 워크플로우예요. 삽질했던 부분까지 솔직하게 공유할게요.

완성된 워크플로우 구조 한눈에 보기
# n8n 워크플로우 흐름 (7노드)
[Schedule Trigger] → [Gmail: 읽지 않은 메일 가져오기]
→ [Gemini 2.5 Flash: 카테고리 분류]
→ [Switch: 카테고리별 분기]
→ [Gmail: 라벨 추가] → [Slack: 중요 메일 알림]
→ [Google Sheets: 분류 로그 기록]
# 분류 카테고리 예시
- urgent: 긴급 대응 필요 (고객 문의, 장애 알림)
- newsletter: 뉴스레터/구독 콘텐츠
- notification: 서비스 알림 (결제, 배포 등)
- spam: 스팸/프로모션
- other: 기타
핵심은 Gemini 2.5 Flash가 이메일 제목과 본문 앞부분을 읽고 카테고리를 판단하는 거예요. 무료 API 티어로 하루 수백 건은 거뜬해요.
Step 1: n8n 워크플로우 세팅 — 노드별 설정법
n8n이 처음이라면 n8n 입문 가이드에서 설치와 기본 사용법을 먼저 익혀보세요. 이미 n8n을 쓰고 있다면 바로 따라해도 돼요.
Schedule Trigger 노드: 15분 간격으로 실행하도록 설정해요. 실시간이 필요하면 5분으로 줄여도 되지만, Gemini 무료 티어 한도를 고려하면 15분이 적당해요.
Gmail 노드: “Get Many” 동작으로 읽지 않은 메일을 최대 10개씩 가져와요. OAuth2 인증이 필요하고, n8n의 Google 인증 설정 가이드를 따라하면 돼요.
| var subject = items[i].json.subject | “(제목 없음)”; | |
|---|---|---|
| var body = (items[i].json.text | “”).substring(0, 500); |
Step 2: Gemini 2.5 Flash 연결 — 무료 API로 충분한 이유
Gemini 2.5 Flash는 무료 티어에서 분당 15회, 하루 1,500회 요청이 가능해요. 이메일 분류처럼 짧은 텍스트를 처리하는 작업에는 넉넉한 양이에요. Gemini 2.5 Flash API 활용법에서 API 키 발급 방법을 확인할 수 있어요.
n8n에서 Gemini 연결하는 방법: HTTP Request 노드를 사용해요. n8n에 Gemini 전용 노드가 있지만, HTTP Request로 직접 호출하는 게 프롬프트 커스터마이징에 더 유연해요.
// HTTP Request 노드 설정
// Method: POST
// URL: https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent?key={{API_KEY}}
// Body (JSON):
{
"contents": [{
"parts": [{
"text": "{{$json.prompt}}"
}]
}],
"generationConfig": {
"temperature": 0.1,
"maxOutputTokens": 100
}
}
temperature를 0.1로 낮게 설정하는 게 포인트예요. 분류 작업은 창의성이 필요 없으니 일관된 결과가 중요해요.
삽질 기록 — 처음부터 잘 되진 않았어요
삽질 1: JSON 파싱 실패. Gemini가 가끔 마크다운 코드 블록으로 감싸서 응답해요. 정규식으로 코드 블록을 벗겨내는 후처리가 필요했어요.
삽질 2: 한국어 이메일 분류 정확도. 영어 이메일은 95% 이상 정확한데, 한국어 마케팅 메일을 newsletter로 분류 못 하는 경우가 있었어요. 프롬프트에 한국어 예시를 3~4개 추가하니 정확도가 확 올라갔어요.
삽질 3: n8n Code 노드 문법 제한. ES6 문법(optional chaining, arrow function, 백틱)을 쓰면 에러가 나요. 반드시 ES5 스타일로 작성해야 해요. 이건 Fortune이 지적한 AI 코딩 신뢰 문제와도 연결돼요 — AI가 생성한 코드를 그대로 쓰면 환경별 호환성 이슈가 생길 수 있어요.
확장 아이디어 — 여기서 더 발전시키려면
기본 분류 시스템이 안정되면 이런 확장도 가능해요:
1. 자동 답장 초안: urgent 카테고리 메일에 Gemini로 답장 초안을 생성해서 Gmail 임시보관함에 저장
2. 주간 리포트: Google Sheets 로그를 기반으로 “이번 주 받은 메일 분류 통계” 자동 생성
3. MCP 연동: Claude Code에서 MCP 서버로 이메일 분류 결과를 조회하는 에이전트 도구 구축
AI + RSS 뉴스 자동화 시스템이나 n8n 블로그 자동화와 조합하면, 정보 수집부터 분류까지 전체 워크플로우를 자동화할 수 있어요.
Q. Gemini 무료 티어로 하루 몇 건까지 처리할 수 있나요?
분당 15회, 하루 1,500회까지 가능해요. 15분 간격으로 10건씩 처리하면 하루 약 960건이라 무료 범위 안에서 충분히 운영할 수 있어요.
Q. Gmail 외에 Outlook이나 네이버 메일도 연동 가능한가요?
n8n에 Microsoft Outlook 노드와 IMAP 노드가 있어서 대부분의 메일 서비스에 연결할 수 있어요. IMAP을 사용하면 네이버, 다음 메일도 가능해요.
Q. 분류 정확도를 높이려면 어떻게 해야 하나요?
프롬프트에 실제 이메일 예시를 3~5개 포함하는 few-shot 방식이 가장 효과적이에요. 특히 한국어 메일은 예시를 추가하면 정확도가 크게 올라가요.
Q. n8n은 무료인가요?
셀프 호스팅(npm 설치)은 완전 무료예요. 클라우드 버전(n8n.cloud)은 유료 플랜이 있지만, 로컬에서 직접 운영하면 비용 없이 쓸 수 있어요.
관련 코드 및 저장소
이 글에서 다룬 자동화 스크립트와 워크플로우는 GitHub: github.com/therearenorules에서 확인할 수 있어요. 이 블로그를 운영하는 데 사용한 WordPress REST API 발행 스크립트, n8n 워크플로우 JSON, Claude Code 기반 자동화 도구 등을 모두 공개하고 있어요.