"n8n 실전 2026 — Discord · Notion · Gmail 연동 워크플로 만들기"

OAuth 설정부터 첫 워크플로 발행까지 — 실제 동작하는 3개 플로우 단계별


핵심 요약

  • 대상 독자: n8n 입문편을 읽고 실제로 만들어 보려는 사용자. OAuth 설정에서 막혔던 사람.
  • 얻을 것: 1) Discord·Notion·Gmail OAuth 설정 단계별 2) 실제 동작하는 3 플로우 — Discord 봇 명령 처리 / Gmail → Notion 자동 정리 / Notion 페이지 → Discord 공지 3) 흔히 막히는 7가지 + 해결 4) 운영 팁 (모니터링·에러·복구).
  • 전제: n8n cloud 14일 무료 또는 셀프호스트 설치 완료. 각 서비스 계정 보유.

1. 시작 전 — OAuth 설정 3가지

n8n 연동에서 가장 막히는 곳이 OAuth credential 설정이다. 한 번씩만 해두면 다시 안 만져도 된다.

1.1 Discord — Webhook + Bot Token

Discord는 두 방식이 있다. 단순 메시지 발송은 Webhook, 양방향(트리거 + 응답)은 Bot Token 필요.

Webhook 방식 (간단) 1. Discord 채널 설정 → Integrations → Webhooks → New Webhook 2. URL 복사 3. n8n: Discord 노드 → Credential: Webhook URL 입력 → 저장

Bot Token 방식 (양방향) 1. Discord Developer Portal → New Application → Bot 생성 → Token 복사 2. OAuth2 → URL Generator → scopes: bot, applications.commands → 권한: 메시지 읽기·쓰기 등 → 생성된 URL로 봇을 자기 서버에 초대 3. n8n: Discord Bot API → Bot Token 입력 → 저장

가장 흔한 실수: 봇을 서버에 초대 안 하고 Token만 입력 → 메시지 수신 안 됨.

1.2 Notion — Internal Integration Token

Notion은 OAuth보다 Internal Integration이 훨씬 간단.

  1. Notion Integrations → New Integration
  2. 이름·워크스페이스 지정 → 생성
  3. Internal Integration Secret 복사
  4. 자동화할 페이지/데이터베이스에서 ⋯ → Connections → 방금 만든 integration 추가 ← 이 단계 자주 빼먹음
  5. n8n: Notion API → API Key에 secret 붙여넣기

가장 흔한 실수: 4번 단계 누락 → "Object not found" 에러. integration이 페이지에 명시적으로 연결되어야만 접근 가능.

1.3 Gmail — OAuth2

가장 까다롭다. 두 옵션:

옵션 A: n8n Cloud에서 Managed OAuth2 (가장 쉬움) - n8n Cloud 사용자 한정. Credential 추가 시 "Sign in with Google" 클릭만 하면 끝.

옵션 B: 셀프호스팅 — Google Cloud Console에서 직접 설정 1. Google Cloud Console → 프로젝트 생성 2. APIs & Services → Library → Gmail API enable 3. OAuth consent screen → External → 본인 이메일 등록 4. Credentials → Create OAuth 2.0 Client ID → Web application 5. Redirect URI에 https://your-n8n-domain/rest/oauth2-credential/callback 추가 6. Client ID / Secret 복사 7. n8n: Gmail OAuth2 → Client ID·Secret 붙여넣기 → "Connect my account" 클릭

가장 흔한 실수: 셀프호스팅 시 Webhook URL이 HTTP면 OAuth 실패. HTTPS 필수 → Cloudflare Tunnel 또는 ngrok.


2. 플로우 1 — Discord 봇 명령 처리 + AI 응답

시나리오

Discord에서 /ask 질문 명령으로 봇에 질문하면 Claude/GPT가 답변.

단계

1. Discord Trigger 노드
   - Bot Token credential
   - Trigger on: Message Created
   - Channel: 특정 채널 ID

2. IF 노드
   - 조건: message text starts with "/ask "

3. Code 노드 (또는 Set 노드)
   - 입력 메시지에서 "/ask " 제거 → question 변수

4. Anthropic Chat 노드
   - Model: Claude Sonnet 4.6
   - System: "당신은 친절한 Discord 봇입니다. 한국어로 간결하게 답하세요."
   - User: {{ $json.question }}

5. Discord 노드 (응답 발송)
   - Operation: Send Message
   - Channel: 같은 채널
   - Reply To: 원본 메시지 ID
   - Content: {{ $json.choices[0].message.content }}

비용 산정

  • 하루 50건 → 월 1,500 실행 → Cloud Starter (€24, 2,500/월) 안에 들어감
  • Claude Sonnet 4.6 평균 입력·출력 500토큰 × 1,500건 → 입력 $2.25 + 출력 $11.25 = 약 $13.50/월
  • 합계 ≒ €24 + $13.50 ≒ €36/월

비용 줄이기: 분류용 Haiku로 1차 필터 → 복잡한 질문만 Sonnet.


3. 플로우 2 — Gmail → Notion 자동 정리

시나리오

특정 라벨이 붙은 이메일을 자동으로 Notion 데이터베이스에 정리. 제목·발신자·요약·링크 저장.

단계

1. Gmail Trigger
   - Credential: Gmail OAuth2
   - Watch labels: "Important" 또는 inbox
   - Polling: every 5 minutes (또는 webhook)

2. Claude Haiku Chat 노드
   - System: "이메일을 한 줄로 요약하라. 100자 이내."
   - User: {{ $json.snippet }}

3. Notion 노드
   - Operation: Create Database Page
   - Database: "Email Triage"
   - Properties:
     - Title: {{ $json.subject }}
     - From: {{ $json.from }}
     - Summary: {{ $('Claude Haiku').item.json.choices[0].message.content }}
     - URL: {{ $json.threadUrl }}
     - Date: {{ $json.date }}
     - Source: "Auto"

옵션 — 분류까지 추가

2번 노드를 Claude Haiku 분류 + 요약으로 확장:

시스템: "이메일을 [업무/개인/구독/스팸] 중 하나로 분류하고 한 줄 요약을 추가하라.
JSON 형식: {category, summary}"

3번 노드 Notion property에 category 추가, 4번에 Switch 노드를 더해 카테고리별 다른 데이터베이스로 라우팅 가능.

비용

  • 일 100건 메일 × 30일 = 3,000 실행 → Cloud Pro €60/월
  • Haiku 토큰 ~$1.50/월
  • 합계 ≒ €61.50/월

대안: 셀프호스팅 + Haiku → ~$1.50/월


4. 플로우 3 — Notion 페이지 발행 → Discord 공지

시나리오

Notion 데이터베이스에 "Status: Published"로 변경된 페이지가 있으면 Discord 공지 채널에 자동 게시.

단계

1. Schedule Trigger
   - Every 5 minutes

2. Notion 노드
   - Operation: Database Get Many
   - Database: "Blog Posts"
   - Filter: Status = "Published" AND Last Edited > {{ now - 5min }}

3. Loop Over Items 노드 (각 페이지 개별 처리)

4. AI Agent 노드 (선택)
   - Model: Claude Sonnet 4.6
   - System: "다음 블로그 글 정보를 받아 Discord 공지 메시지 200자 이내로 작성하라.
            이모지 1개 포함. 마지막에 링크 표기."
   - User: 제목·요약·URL

5. Discord 노드
   - Operation: Send Message
   - Channel: #announcements
   - Content: {{ $('AI Agent').item.json.message }}
   - Embed: title=제목, url=링크, image=썸네일

6. Notion 노드 (다시)
   - Operation: Update Page
   - Property: "Discord Announced" = true
   (중복 게시 방지)

핵심 트릭

  • 6번 단계가 중복 방지의 핵심. 안 하면 5분마다 같은 페이지 반복 게시.
  • 또는 2번 필터에 AND Discord Announced = false 추가.

5. 흔히 막히는 7가지 + 해결

증상 원인 해결
Notion "Object not found" Integration이 해당 페이지에 연결 안 됨 페이지 ⋯ → Connections에서 추가
Discord Bot 메시지 못 받음 Bot이 서버에 초대 안 됐음 OAuth2 URL Generator로 초대 링크 만들고 서버에 추가
Gmail OAuth "Access blocked" OAuth consent screen에 본인 이메일 등록 안 됨 Test users 섹션에 본인 추가
셀프호스팅 OAuth Redirect 실패 HTTPS가 아니거나 도메인 일치 안 함 Cloudflare Tunnel/ngrok로 HTTPS 노출, redirect URI 정확히 일치시킴
같은 항목 여러 번 처리 중복 방지 플래그 없음 DB에 "Processed" 컬럼 추가하고 필터에 AND Processed=false
Webhook 안 와요 무료 트라이얼은 polling 권장 트라이얼은 polling, 운영은 webhook
LLM 응답 파싱 실패 자유 형식 출력 "JSON 형식만 출력" 시스템 프롬프트 + JSON Parse 노드

6. 운영 팁

6.1 모니터링

  • Executions 탭: 실패한 실행 빨간색 표시 → 클릭하면 어느 노드에서 실패했는지 확인
  • Email Notifications: Settings → Personal → Send error notifications 활성화

6.2 에러 워크플로

실패 시 별도 알림용 에러 워크플로를 만들어 모든 워크플로의 "Workflow Settings → Error Workflow"에 연결.

6.3 백업

  • Cloud: 자동 백업
  • Self-host: PostgreSQL pg_dump 또는 SQLite 파일 daily 복사. 워크플로 export(JSON)도 Git에.

6.4 비밀 관리

  • API 키는 항상 Credentials에만. 노드 파라미터에 직접 입력 금지.
  • 셀프호스트는 N8N_ENCRYPTION_KEY 환경변수 설정 필수.

개발자 팁

  1. Workflow as Code: n8n 워크플로 JSON을 Git에 commit → PR 리뷰 → 배포 시 import. CI/CD 가능.
  2. Custom Nodes: 특이한 SaaS·내부 시스템 통합은 Custom node 개발 — TypeScript로 작성.
  3. Webhook secret 검증: 외부 웹훅 노드는 query token 또는 HMAC signature 검증. 노출된 webhook은 누구나 호출 가능.
  4. Rate limit 핸들링: Wait 노드와 Loop 조합으로 토큰 버킷 패턴. 또는 외부 큐(Redis) + Schedule.
  5. Postgres 백엔드 + 멀티 인스턴스: 운영 단계는 SQLite 대신 PostgreSQL + Worker 모드 분리로 처리량 확장.
  6. Tracing: 큰 워크플로 디버깅 시 각 노드에 Set 노드로 메타데이터 추가 (timestamp, step name) → 실행 로그에서 흐름 추적 쉬움.

참고


이 글은 AI 입문 시리즈의 7-2/11 편입니다. 다음 편: 로컬 LLM 입문 — Ollama / LM Studio.

댓글

이 블로그의 인기 게시물

"LLM 핵심 학습 (1/6) — 기본: 토큰화·임베딩·어텐션·위치 인코딩"

AI 코딩 도구 설치·레퍼런스 (5/7) — Codex CLI 고급 설정: config.toml로 approval·sandbox 제어

"LLM 핵심 학습 (2/6) — 파인튜닝: LoRA·QLoRA·증류·Adapter"