발행일: 2026-08-04(화) 03:14
도서하루 30분 n8n ①DAY 24
챕터 4 — 미니 프로젝트 : AI 이메일 비서난이도 ★★★
DAY 24

프로젝트 구현 1단계 : 이메일 수신 & 분류

📥 DAY 24 워크플로우 JSON 다운로드
이론5
실습20
미션5

"소통에서 가장 중요한 것은 말하지 않은 것을 듣는 것이다."

피터 드러커 (Peter Drucker, 경영학의 아버지)
🎯 오늘의 학습 목표
  • Gmail Trigger → Get Message → Edit Fields → OpenAI → Switch 구간을 완성할 수 있다
  • OpenAI 분류 결과 JSON을 파싱해 Switch 노드로 4개 경로 분기를 만들 수 있다
  • 본문 길이 제한 표현식으로 API 비용을 절약할 수 있다
노드 1~6 설정 완료 목표
text
노드 1: Gmail Trigger (새 메일 감지)
  ↓
노드 2: Gmail Get Message (본문 로드)
  ↓
노드 3: Edit Fields (AI 분석용 필드 정리)
  ↓
노드 4: OpenAI (요약·분류)
  ↓
노드 5: Edit Fields (JSON 파싱)
  ↓
노드 6: Switch (4개 경로 분기)
  ↓
[임시] 긴급·일반·광고·스팸 대기 노드
Edit Fields 매핑 (Expression 모드)
text
발신자:      {{ $json.From }}
수신자:      {{ $json.To }}
제목:        {{ $json.Subject }}
본문(제한):  {{ ($json.text || $json.snippet || "(본문 없음)").slice(0, 2000) }}
메일ID:      {{ $json.id }}
스레드ID:    {{ $json.threadId }}
수신시각:    {{ $now.toFormat("yyyy-MM-dd HH:mm:ss") }}
고정 텍스트로 입력 (Expression 모드 아님)
text
당신은 이메일 분류 전문가입니다. 입력된 이메일을 분석하고
반드시 아래 JSON 형식으로만 응답하세요.
다른 텍스트는 절대 포함하지 마세요.

분류 기준:
- 긴급: 즉각적인 조치가 필요한 업무 메일 (계약, 마감, 장애, 결재 등)
- 일반: 일반적인 업무 메일, 미팅 요청, 보고서 등
- 광고: 마케팅, 프로모션, 뉴스레터, 구독 메일
- 스팸: 불법 광고, 피싱, 무의미한 메일

응답 JSON 형식:
{
  "분류": "긴급 또는 일반 또는 광고 또는 스팸",
  "긴급도점수": 1에서 10 사이의 숫자,
  "요약": "이메일 핵심 내용을 2문장 이내로 요약",
  "분류근거": "이렇게 분류한 이유를 1문장으로 설명",
  "답장필요여부": true 또는 false
}
Expression 모드로 입력
text
발신자: {{ $json.발신자 }}
제목: {{ $json.제목 }}
본문: {{ $json["본문(제한)"] }}

위 이메일을 분석하고 지정된 JSON 형식으로 분류 결과를 반환하세요.
Edit Fields (Expression 모드)
text
분류결과:    {{ $json.message.content.분류 }}
긴급도점수:  {{ $json.message.content.긴급도점수 }}
요약:        {{ $json.message.content.요약 }}
분류근거:    {{ $json.message.content.분류근거 }}
답장필요여부: {{ $json.message.content.답장필요여부 }}
분류결과 값으로 4개 경로 분기
text
Mode: Rules
Routing Rule 1: {{ $json.분류결과 }} is equal to 긴급  → Output: 긴급
Routing Rule 2: {{ $json.분류결과 }} is equal to 일반  → Output: 일반
Routing Rule 3: {{ $json.분류결과 }} is equal to 광고  → Output: 광고
Routing Rule 4: {{ $json.분류결과 }} is equal to 스팸  → Output: 스팸
Options → Fallback Output: Extra Output
Options → Ignore Case: ON
⚠️ Output Content as JSON: ON 상태에서 JSON 파싱 경로는 $json.message.content.분류 예요. OFF 상태라면 Code 노드에서 JSON.parse($json.message.content)로 먼저 파싱해야 해요.
🛠️ 실습
1노드 1~2 설정
  1. DAY23 워크플로우 열기
  2. Gmail Trigger: Credential 연결 / Poll 5분 / Simplify ON / Unread Only
  3. Fetch Test Event로 테스트 메일 수신 확인
  4. Gmail Get Message: Message ID: {{ $json.id }} / Simplify: OFF
2노드 3~4 설정
  1. Edit Fields: 7개 필드 매핑 입력
  2. OpenAI 노드: Model gpt-4o-mini / Temperature 0.1 / Max Tokens 500 / Output as JSON ON
  3. System Prompt·User Prompt 입력
  4. 실행 후 JSON 형식 응답 확인
3노드 5~6 설정 및 임시 노드 연결
  1. Edit Fields: JSON 파싱 5개 필드 매핑
  2. Switch: 4개 Routing Rule 설정
  3. Switch 4개 포트에 임시 Edit Fields 노드 각각 연결
  4. 전체 실행 후 Switch 분기 결과 확인
  5. 캡처 저장: n8n_day24_classify_result.png
🚀 오늘의 미션
  1. 서로 다른 유형의 테스트 이메일 10개를 발송하고 AI 분류 정확도를 확인해보세요
  2. 아래 유형으로 각 1~2통씩 발송해요: 긴급(계약·마감·장애) 2통 / 일반(미팅·보고서) 2통 / 광고(프로모션·뉴스레터) 2통 / 스팸(피싱·당첨) 2통 / 경계 케이스 2통
  3. 예상 분류와 AI 분류 결과를 비교해 정확도를 계산해보세요 (예: 8/10 = 80%)
  4. 오분류된 케이스가 있다면 System Prompt를 어떻게 수정할지 메모해두세요
📋 워크플로우 임포트 방법
  1. 위 버튼으로 JSON 파일을 다운로드합니다.
  2. n8n 캔버스 오른쪽 상단 Import from file 클릭
  3. 다운로드한 JSON 파일을 선택하면 워크플로우가 즉시 열립니다.
  4. 빨간 느낌표(!)가 보이면 Credentials을 본인 계정으로 재연결하세요.
💡 먼저 직접 만들어보고, 막혔을 때 정답지로만 활용하세요!
n8n 계정이 없으신가요?n8n 무료 시작하기 ↗
← DAY 23
미니 프로젝트 설계 : AI 이메일 비서
목차로DAY 25
프로젝트 구현 2단계 : 요약 & Sheets 기록