n8n으로 Gmail 이메일 자동 라벨링하기 — OpenAI로 받은편지함 정리
이 글과 연결된 글 보기
드래그로 이동 · 휠/두 손가락으로 확대 · 방향키로 글 선택 · 0으로 맞춤. 실선: 본문 링크, 점선: 시리즈·주제의 대표 연결.표시된 글 7편 목록
n8n.io 공식 템플릿 마켓플레이스에 공개된 워크플로우를 가져오면, Gmail 받은편지함에 새 메일이 도착했는지 5분마다 확인해 OpenAI가 내용을 읽고 기존 라벨 중 맞는 걸 찾아 붙이거나, 맞는 라벨이 없으면 새 라벨을 만들어 자동으로 정리하는 이메일 라벨링 자동화를 만들 수 있습니다.
이 템플릿 하나로 보여줄 수 있는 것
면접에서 "이메일 정리를 자동화해본 경험이 있나요?"라는 질문에 이 템플릿은 구체적인 사례로 답할 수 있게 해줍니다. "Gmail 받은편지함을 5분마다 확인해서, OpenAI가 메일 내용을 읽고 기존 라벨 중 맞는 걸 찾아 붙이거나, 맞는 라벨이 없으면 새로 만들어서 자동으로 라벨링하는 워크플로우를 만들어봤습니다"라고 말할 수 있습니다.
짧은 문장 안에 들어간 역량은 세 가지입니다.
- Gmail API 오퍼레이션 조합 — 라벨 목록 조회, 메일 본문 조회, 라벨 생성, 라벨 부착까지 서로 다른 Gmail API 오퍼레이션 네 가지를 하나의 흐름으로 연결해본 경험
- AI 기반 텍스트 분류 — 정해진 규칙이 아니라 OpenAI가 메일 본문을 읽고 문맥으로 카테고리를 판단하게 설계한 경험
- 폴링 기반 자동화 운영 — 사람이 실행 버튼을 누르지 않아도 5분마다 스스로 도는 워크플로우를 Active 상태로 계속 돌려본 경험
이 세 가지는 이메일 라벨링뿐 아니라 고객 문의 티켓 분류, 리뷰 감성 분석, 신규 리드 우선순위 매기기처럼 "들어오는 텍스트를 읽고 카테고리로 나누는" 유형의 자동화 전부에 그대로 쓰입니다.
이 템플릿은 무엇인가
이 워크플로우는 데이터팝콘이 만든 게 아닙니다. n8n 공식 템플릿 마켓플레이스(n8n.io/workflows)에 Basic automatic Gmail email labelling with OpenAI and Gmail API라는 이름으로 공개된 템플릿이고, 제작자는 Martijn Kerver입니다. 카테고리는 Personal Productivity와 AI Summarization으로 등록돼 있습니다.
공식 설명에 따르면 이 템플릿은 Gmail API와 OpenAI의 언어 모델을 이용해 이메일 분류를 자동화합니다. 주기적으로 새 이메일을 확인하고 내용을 읽어, 이미 있는 Gmail 라벨을 기준으로 분류합니다. 맞는 라벨이 없으면 새 라벨을 만들어 그 이메일에 붙입니다. 이메일을 대량으로 받는 프리랜서나 담당자가 받은편지함을 정리하고 커뮤니케이션을 단순화하려는 목적으로 만들어졌다고 설명돼 있습니다.
이 시리즈에는 비슷한 발상의 템플릿이 이미 한 번 있었습니다. 아웃룩 받은편지함을 로컬 LLM(Ollama)으로 분류해 폴더까지 옮기는 템플릿이었는데, 그 편은 트리거가 새 메일 도착 즉시 도는지 일정 간격으로 폴링하는지가 공식 문서에 나와 있지 않았습니다. 이번 템플릿은 반대로 Gmail Trigger가 5분마다 새 메일을 확인한다고 명확히 밝혀져 있고, 로컬 모델 대신 사용량만큼 비용이 발생하는 OpenAI API를 씁니다. 같은 "메일을 읽고 분류한다"는 목표를 로컬 무료 모델과 유료 클라우드 API라는 서로 다른 조합으로 풀어낸 셈입니다. n8n 설치나 기본 노드 조작법은 n8n으로 반복업무 자동화 포트폴리오 만들기에 정리돼 있습니다.
구조 — Trigger / Task / Target
공식 설명과 노드 목록을 데이터팝콘 방식인 Trigger/Task/Target 세 칸으로 정리하면 이렇습니다. 노드 사이의 정확한 연결선이 다이어그램으로 공개돼 있진 않아, 아래 흐름은 공식 설명 문단이 서술하는 순서(확인 → 조회 → 판단 → 생성 → 부착)를 그대로 따라 재구성했습니다.
- Trigger — Gmail Trigger 노드가 5분마다 새 이메일이 있는지 폴링합니다.
- Task — 메일 본문을 가져오고 계정에 이미 있는 라벨 목록을 조회한 다음, OpenAI Chat Model이 본문과 기존 라벨을 비교해 어느 카테고리에 맞는지 판단합니다. 이 판단 노드에는 Memory Buffer 노드가 함께 붙어 있어 여러 이메일을 연달아 처리하는 동안 문맥을 유지하고, 처리 사이사이에는 완충 시간을 두는 Wait 노드가 끼어 있습니다.
- Target — 맞는 라벨이 없으면 새 라벨을 만들고, 판단된 라벨을 메일에 부착합니다. 공식 설명에는 광고성 메일처럼 우선순위가 낮은 메일을 받은편지함에서 제거하는 동작도 포함된다고 나와 있는데, 보관함으로 옮기는지 완전히 삭제하는지는 명시돼 있지 않습니다.
만들기
공식 Setup 단계는 총 4개입니다. 그 앞에 준비해두면 좋은 항목 하나를 더해 순서대로 풀어씁니다.
0. 준비 — 라벨 체계 미리 정리해두기
공식 페이지는 사전 준비물로 "일관된 Gmail 라벨 구조 유지"를 꼽습니다. 이 템플릿은 맞는 라벨이 없으면 AI가 알아서 새 라벨을 만드는 구조라, 시작 전에 받은편지함 라벨을 한 번 정리해두지 않으면 나중에 비슷한 이름의 라벨이 여러 개 생겨 오히려 어질러질 수 있습니다.
1. Gmail API 크리덴셜 연결
n8n에 Gmail OAuth2 크리덴셜을 등록하고, 메일 본문 조회·라벨 조회·라벨 생성·라벨 부착을 담당하는 네 개의 Gmail 노드에 각각 연결합니다. 네 노드가 크리덴셜 하나를 공유하기 때문에 등록은 한 번만 하면 됩니다.
2. OpenAI API 키 연결
OpenAI Chat Model 노드에 API 키를 연결합니다. 이 노드가 이메일 본문을 실제로 읽고 카테고리를 판단하는 자리입니다.
3. 워크플로우 Active로 전환
캔버스 상단의 Inactive 토글을 Active로 바꾸면 그때부터 Gmail Trigger가 5분 간격으로 새 메일을 폴링하기 시작합니다.
4. 분류 결과를 보며 프롬프트 다듬기
공식 페이지는 마지막 단계로 "분류 로직을 관찰하고 필요하면 다듬으라"고 안내합니다. 제작자가 남긴 팁은 이렇습니다. "에이전트에게 개인적인 분류 규칙을 더 많이 알려줄수록 프롬프트를 개선해 더 나은 결과를 얻을 수 있습니다." 처음 며칠은 라벨이 이상하게 붙는 메일이 나올 수 있는데, 그때마다 프롬프트에 "이런 메일은 이 라벨로 분류해줘" 같은 규칙을 한 줄씩 추가하는 식으로 다듬는 과정입니다.
주의할 점 · 제약
공식 페이지에 명시된 내용과, 명시돼 있지 않아 직접 확인해야 하는 부분을 함께 정리하면 이렇습니다.
- OpenAI API는 사용량만큼 비용이 발생합니다 — 로컬 LLM과 달리 무료가 아니고, 5분마다 폴링하며 메일이 올 때마다 호출이 발생하므로 이메일량이 많은 계정일수록 비용이 늘어납니다. 정확한 단가는 OpenAI 요금 정책에 따라 바뀌므로 이 글에서는 숫자를 적지 않습니다.
- 라벨이 계속 늘어날 수 있습니다 — 맞는 라벨이 없으면 AI가 계속 새 라벨을 만드는 구조라, 준비 단계에서 라벨 체계를 정리해두지 않으면 시간이 지날수록 라벨 개수가 늘어나 오히려 찾기 어려워질 수 있습니다.
- 우선순위 낮은 메일 제거 동작의 목적지가 불명확합니다 — 광고성 메일 등을 받은편지함에서 제거한다고만 나와 있고, 보관함으로 옮기는지 완전히 삭제하는지는 공식 텍스트에 없습니다. 실제로 쓰기 전에 이 부분이 어느 노드에서 어떻게 동작하는지 캔버스에서 직접 확인해야 합니다.
- Memory Buffer와 Wait 노드의 세부 설정은 공개돼 있지 않습니다 — 버퍼가 몇 개의 이메일까지 기억하는지, 대기 시간이 몇 초인지는 명시되지 않아 임포트 후 직접 열어봐야 합니다.
- 5분 간격 폴링이라 완전한 실시간은 아닙니다 — 메일이 도착한 순간이 아니라 다음 폴링 주기에 처리되므로, 최대 5분의 지연이 생길 수 있습니다.
포트폴리오·면접 포인트
포트폴리오에는 라벨링 전 받은편지함과, 라벨이 자동으로 붙은 뒤의 받은편지함 화면 두 장이면 충분합니다. 여기에 "라벨을 처음부터 다 정해두지 않고 AI가 필요할 때 새로 만들게 한 이유"를 한 문단 붙이면 설계 의도를 이해했다는 인상을 줄 수 있습니다. 카테고리를 전부 미리 예측해서 하드코딩하기보다 실제로 받는 메일 종류에 맞춰 라벨 체계가 자연스럽게 늘어나게 한 대신, 그만큼 주기적으로 라벨을 정리해줘야 한다는 트레이드오프가 있습니다.
면접에서는 "왜 Gmail 필터 기능이 아니라 굳이 AI로 분류했나요?" 같은 질문이 나올 수 있습니다. Gmail 필터는 발신자나 제목의 키워드 규칙에만 반응하지만, 이 템플릿은 본문 내용을 읽고 맥락으로 판단하기 때문에 "다음 주 회의 일정 확인 부탁드립니다"처럼 특정 키워드 없이도 업무 메일인지 광고인지 구분할 수 있습니다. 같은 문제를 이 시리즈의 다른 편(아웃룩과 로컬 LLM을 쓴 이메일 분류 템플릿)과 비교해서 설명하면, 클라우드 API와 로컬 모델이라는 두 가지 다른 방식으로 풀 수 있다는 점까지 답변에 담을 수 있습니다.
다음 액션
이 템플릿을 그대로 따라 만들었다면, 다음은 본인 Gmail 계정에 실제로 쌓여 있는 메일 종류에 맞춰 프롬프트를 손보는 일입니다. 제작자의 팁대로 "이런 메일은 이 라벨로" 같은 개인 규칙을 몇 줄 추가해보고, 일주일 정도 운영하면서 라벨이 얼마나 정확하게 붙는지, 새로 생긴 라벨이 너무 잘게 쪼개지진 않는지 확인해보면 포트폴리오에 쓸 개선 사례가 자연스럽게 쌓입니다. 이 시리즈에서 다룬 이메일 트리아지 패턴들 — 로컬 LLM으로 처리하는 방식과 클라우드 API로 처리하는 방식 — 을 나란히 비교해보는 것도 자동화 설계를 배우는 좋은 방법입니다.
