n8n은 Zapier, Make(구 Integromat)처럼 업무 자동화를 가능하게 하는 오픈소스 워크플로우 자동화 플랫폼입니다. 하지만 결정적인 차이가 있습니다. 로컬 서버에 설치해서 완벽하게 자신의 것으로 만들 수 있다는 점입니다. 클라우드 의존성 없이, 민감한 데이터는 내 서버에서 처리하면서도 강력한 AI 자동화 워크플로우를 구축할 수 있습니다.
이 가이드에서는 Docker를 이용해 n8n을 로컬에 설치하고, OpenAI API를 연동해서 Gmail 수신 이메일을 GPT로 요약한 뒤 Slack으로 전송하는 실전 워크플로우를 구축하는 전 과정을 단계별로 설명합니다.
n8n이란? Zapier·Make와 뭐가 다를까
n8n은 No-Code 워크플로우 자동화 플랫폼입니다. 코드를 짜지 않고도 마우스 클릭으로 여러 앱을 연결해 자동화 흐름을 만들 수 있습니다.
| 항목 | n8n | Zapier | Make |
|---|---|---|---|
| 가격 모델 | 오픈소스 (무료) | 월 29~299달러 | 월 9~299달러 |
| 로컬 설치 | 완전 지원 | 불가능 | 불가능 |
| 데이터 보안 | 내 서버 100% 제어 | 클라우드 의존 | 클라우드 의존 |
| 통합 수 | 400+ | 5,000+ | 1,000+ |
| 커스텀 코드 | JavaScript/Python 지원 | 제한적 | 지원 (프로)됨 |
특히 개인 개발자나 소규모 팀에게 n8n은 최고의 선택입니다. 로컬에 설치하면 월 비용이 0원이고, API 호출 횟수 제한도 없기 때문입니다. 또한 GitHub에 전체 소스코드가 공개되어 있어서, 필요하면 직접 수정할 수도 있습니다.
사전 준비: Docker, OpenAI API 키 확보
1단계: Docker 설치 확인
n8n을 Docker 컨테이너로 실행하는 것이 가장 간단합니다. 먼저 Docker가 설치되어 있는지 확인하세요.
docker --version
Docker가 없다면 Docker Desktop을 설치하세요. Windows, macOS, Linux 모두 지원합니다.
2단계: OpenAI API 키 발급
이 워크플로우에서는 OpenAI의 GPT-4 API를 사용합니다. OpenAI 웹사이트에서 API 키를 발급받아야 합니다.
- OpenAI API 키 페이지 방문
- "Create new secret key" 클릭
- 생성된 키를 복사해 안전한 곳에 저장
주의: API 키는 절대 깃허브나 공개 장소에 노출되면 안 됩니다. n8n의 환경 변수로 안전하게 관리합니다.
Docker로 n8n 로컬 설치하기
docker-compose.yml 작성
프로젝트 디렉토리를 만들고, 아래 내용의 docker-compose.yml 파일을 생성하세요.
version: '3'
services:
n8n:
image: n8nio/n8n:latest
ports:
- "5678:5678"
environment:
- N8N_HOST=localhost
- N8N_PORT=5678
- N8N_PROTOCOL=http
- NODE_ENV=production
- WEBHOOK_URL=http://localhost:5678/
- GENERIC_TIMEZONE=Asia/Seoul
volumes:
- n8n_data:/home/node/.n8n
restart: always
networks:
- n8n_network
postgres:
image: postgres:16-alpine
environment:
- POSTGRES_USER=n8n
- POSTGRES_PASSWORD=secure_password_here
- POSTGRES_DB=n8n
volumes:
- postgres_data:/var/lib/postgresql/data
restart: always
networks:
- n8n_network
volumes:
n8n_data:
postgres_data:
networks:
n8n_network:
driver: bridge
이 설정의 주요 항목:
- ports: 5678 — n8n 웹 인터페이스가 실행될 포트
- volumes — 데이터 지속성을 위해 로컬 볼륨에 저장
- postgres — n8n 데이터를 저장할 데이터베이스
- GENERIC_TIMEZONE — 한국 시간대 설정
n8n 실행
docker-compose.yml이 있는 디렉토리에서 다음 명령을 실행합니다.
docker-compose up -d
컨테이너가 시작되는 동안 몇 초 정도 기다리세요. 그 다음 로그를 확인해서 정상 실행 여부를 확인합니다.
docker-compose logs -f n8n
로그에 "Server started" 메시지가 나타나면 성공입니다. 이제 브라우저에서 http://localhost:5678을 열면 n8n 대시보드에 접속할 수 있습니다.
n8n 기본 인터페이스 이해하기
핵심 개념: Trigger와 Action 노드
n8n의 워크플로우는 크게 두 가지 타입의 노드로 구성됩니다.
1. Trigger 노드 (시작점)
- 워크플로우를 시작하는 신호를 받는 노드
- 예: "Gmail에 새 메일 도착", "특정 시간마다 실행", "웹훅 수신" 등
- 각 워크플로우마다 반드시 하나 이상 필요
2. Action 노드 (작업 수행)
- Trigger 노드로부터 신호를 받아 실제 작업 수행
- 예: "데이터 변환", "API 호출", "메시지 전송" 등
- 여러 개를 연쇄적으로 연결 가능
3. 워크플로우 흐름
Gmail (Trigger) → 데이터 추출 (Action) → OpenAI 호출 (Action) → Slack 전송 (Action)
대시보드 레이아웃
n8n에 접속하면 맨 처음 보이는 화면:
- 좌측 탭 — 사이드바에 "Workflows", "Credentials", "Templates" 등
- 중앙 캔버스 — 노드를 드래그 앤 드롭으로 배치
- 우측 패널 — 선택된 노드의 설정 옵션
- 상단 버튼 — "Save", "Test", "Execute Workflow" 등
OpenAI API 연동 설정
Credentials 생성
n8n에서 외부 서비스를 안전하게 연동하려면 먼저 Credentials(자격증명)을 등록해야 합니다.
- 좌측 사이드바 → Credentials 클릭
- "+ New" 버튼 클릭
- "OpenAI" 선택
- 다음 정보 입력:
- Credential Name — "OpenAI API" (자유롭게 설정)
- API Key — 앞서 발급받은 OpenAI API 키 붙여넣기
- "Create" 클릭
이제 워크플로우에서 OpenAI를 사용할 때마다 이 Credentials를 선택하면 됩니다. 키는 n8n 데이터베이스에 암호화되어 저장됩니다.
실전 워크플로우: Gmail → GPT → Slack
워크플로우 개요
이제 실제 자동화 워크플로우를 구축해봅시다. 흐름은 다음과 같습니다:
- Gmail에 새 메일 도착 (Trigger)
- 메일 제목과 본문 추출 (Action)
- OpenAI API로 요약 생성 (Action)
- 요약을 Slack으로 전송 (Action)
Step 1: Gmail Trigger 노드 추가
왼쪽 사이드바의 "+" 아이콘을 클릭해 노드 추가 메뉴를 엽니다. "Gmail"을 검색하고 "Gmail" 노드를 선택합니다.
Gmail 노드 설정:
- 노드를 클릭해서 우측 패널에서 설정 열기
- Trigger Event → "New Email" 선택
- Credentials → 없으면 "+Create New" 클릭해서 Gmail 계정 연동
- Mailbox → "INBOX" 선택
- Save
Gmail 인증 시 OAuth 팝업이 나타나면, 로그인해서 n8n에 접근 권한을 부여해야 합니다.
Step 2: 데이터 추출 노드
Gmail 노드에서 나온 데이터를 정리합니다. "+" 버튼을 클릭해서 "Function" 노드를 추가합니다.
return {
subject: $input.first().json.subject,
body: $input.first().json.text_plain || $input.first().json.text,
from: $input.first().json.from,
timestamp: $input.first().json.date
};
이 노드는 이메일의 제목, 본문, 발신자, 날짜만 추출해서 다음 노드에 전달합니다.
Step 3: OpenAI 호출 노드
"+" 버튼 → "OpenAI" 검색 → "OpenAI" 노드 선택
OpenAI 노드 설정:
- Credentials — 앞서 만든 "OpenAI API" 선택
- Resource → "Chat" 선택
- Messages 섹션:
- "Add Messages" → "User Message" 클릭
- Message 필드에 다음 프롬프트 입력:
다음 이메일을 핵심만 요약해줘. 3-5줄로 간단히.
발신자: {{ $('Function').item.json.from }}
제목: {{ $('Function').item.json.subject }}
본문: {{ $('Function').item.json.body }}
요약:
이 프롬프트에서 {{ }} 문법은 이전 노드의 데이터를 참조합니다. "Function" 노드에서 추출한 값을 자동으로 대입합니다.
- Model → "gpt-4" 또는 "gpt-3.5-turbo" 선택
- Temperature → 0.5 (창의성 수준)
- Save
Step 4: Slack 전송 노드
"+" 버튼 → "Slack" 검색 → "Slack" 노드 선택
Slack 노드 설정:
- Credentials → Slack 계정 연동 (OAuth)
- Resource → "Message" 선택
- Channel → "#automation" (자동화 결과 수신할 채널 선택)
- Message Text 필드:
📧 새 이메일 요약
발신자: {{ $('Function').item.json.from }}
제목: {{ $('Function').item.json.subject }}
요약:
{{ $('OpenAI').item.json.choices[0].message.content }}
시간: {{ $('Function').item.json.timestamp }}
OpenAI 노드의 응답은 choices[0].message.content에 담겨 있습니다.
- Save
워크플로우 테스트
오른쪽 상단의 "Test" 버튼을 클릭해서 워크플로우를 테스트합니다. Gmail에 새 메일을 보내면, 자동으로 요약이 Slack으로 전송되는지 확인할 수 있습니다.
워크플로우 배포 및 자동 실행
워크플로우 활성화
테스트가 완료되면 워크플로우를 실제로 배포합니다.
- 오른쪽 상단의 토글 버튼을 "ON" 상태로 변경
- 워크플로우가 활성화되면, Gmail에 새 메일이 도착할 때마다 자동으로 실행됩니다.
실행 이력 확인
워크플로우가 정상 실행되는지 확인하려면:
- 워크플로우 페이지의 "Executions" 탭 클릭
- 각 실행 항목을 클릭하면 상세 로그(입력/출력 데이터) 확인 가능
- 에러 발생 시 여기서 디버깅
고급: 조건부 분기와 에러 처리
조건부 분기 (IF 노드)
특정 조건에 따라 다른 작업을 수행하려면 "IF" 노드를 사용합니다.
예: 메일 제목에 "urgent"가 포함되면 다른 채널로 전송
- "+" → "IF" 노드 추가
- Condition 섹션:
- 필드:
$('Function').item.json.subject - 연산자: "contains"
- 값: "urgent"
- 필드:
- TRUE일 때 분기에 Slack 채널 변경 가능
에러 처리
API 호출 실패 시 알림을 받으려면:
- OpenAI 노드 선택 → 우측 "Settings" 탭 → "Error Handling" 섹션
- "Error Handling" 활성화
- 에러 발생 시 실행할 노드 지정 (예: "알림 메일 전송")
트러블슈팅: 자주 나오는 오류와 해결법
오류 1: "ECONNREFUSED" — 데이터베이스 연결 실패
원인: PostgreSQL 컨테이너가 시작되지 않았거나 n8n이 접속하지 못함
해결법:
docker-compose restart postgres
그 다음 몇 초 대기 후:
docker-compose restart n8n
오류 2: "401 Unauthorized" — API 키 인증 실패
원인: OpenAI API 키가 잘못되었거나 만료됨
해결법:
- OpenAI 대시보드에서 API 키 재확인
- n8n의 Credentials 섹션에서 해당 키 업데이트
- 워크플로우 다시 테스트
오류 3: "Webhook timeout" — 응답이 너무 오래 걸림
원인: OpenAI API 응답 시간이 30초 이상 소요
해결법:
- OpenAI 노드의 Temperature를 낮춤 (창의성 감소 = 속도 증가)
- 프롬프트 길이를 짧게 수정
- docker-compose.yml에서 웹훅 타임아웃 시간 증가:
environment: - WEBHOOK_TIMEOUT=120
오류 4: "PERMISSION_DENIED" — Gmail 접근 권한 없음
원인: OAuth 인증 실패 또는 권한 만료
해결법:
- Gmail Credentials 삭제 → 다시 인증 진행
- Google 계정에서 n8n 앱 권한 재승인
- Gmail 보안 설정에서 "덜 안전한 앱" 허용 (필요시)
프로덕션 배포: 클라우드 서버에서 실행
AWS EC2에 배포 (예시)
로컬 테스트가 완료되면 클라우드 서버에 배포할 수 있습니다. 예를 들어 AWS EC2 인스턴스 (t2.micro, Ubuntu 22.04)에 배포하려면:
#!/bin/bash # Docker 설치 sudo apt update && sudo apt install -y docker.io docker-compose # n8n 디렉토리 생성 mkdir n8n && cd n8n # docker-compose.yml 다운로드 또는 직접 생성 # (위에서 제공한 docker-compose.yml 파일 복사) # 실행 sudo docker-compose up -d # 포트 5678 방화벽 열기 sudo ufw allow 5678 sudo ufw enable
배포 후 http://서버-퍼블릭-IP:5678으로 접속 가능합니다.
HTTPS 설정 (Let's Encrypt)
프로덕션 환경에서는 반드시 HTTPS를 설정해야 합니다. docker-compose.yml 수정:
environment: - N8N_PROTOCOL=https - N8N_SSL_KEY=/path/to/privkey.pem - N8N_SSL_CERT=/path/to/cert.pem volumes: - /etc/letsencrypt/live/mydomain.com/privkey.pem:/path/to/privkey.pem:ro - /etc/letsencrypt/live/mydomain.com/fullchain.pem:/path/to/cert.pem:ro
추가 팁: n8n 활용도 높이기
1. 외부 API와 연동 (HTTP Request 노드)
n8n은 400개 이상의 내장 통합을 제공하지만, 그 외에도 "HTTP Request" 노드를 사용해 어떤 API든 연동 가능합니다.
예: 날씨 API 호출
HTTP Request 노드 설정:
- Method: GET
- URL: https://api.openweathermap.org/data/2.5/weather?q=Seoul&appid={{$env.WEATHER_API_KEY}}
- Headers: Authorization, Accept 등 필요시 추가
2. 커스텀 JavaScript 코드 (Function 노드)
복잡한 데이터 변환이 필요할 때는 JavaScript를 직접 작성할 수 있습니다.
// 여러 값을 합치기
const summaries = $input.getDataAsArray();
return summaries.map(item => ({
title: item.json.subject,
summary: item.json.summary,
priority: item.json.subject.includes('URGENT') ? 'high' : 'normal'
}));
3. 스케줄링 (Cron)
특정 시간에 자동으로 워크플로우 실행:
- "+" → "Cron" 노드 추가
- Trigger Times → "0 9 * * 1-5" (평일 9시마다)
- 이후 노드 연결
4. 변수 저장 및 재사용
워크플로우 간에 데이터를 공유하려면 변수 노드 사용:
// 변수에 값 저장
await $workflowData.setWorkflowVariable('lastEmailDate', new Date());
// 다른 워크플로우에서 참조
const lastDate = await $workflowData.getWorkflowVariable('lastEmailDate');
결론
n8n은 완전히 자신의 통제 하에서 AI 자동화를 구축할 수 있는 강력한 도구입니다. Docker 한 줄로 설치 가능하고, OpenAI 같은 최신 AI 모델과 쉽게 연동할 수 있으며, 필요하면 직접 코드도 작성할 수 있습니다.
로컬 테스트 후 클라우드에 배포하면, 24/7 무중단으로 작동하는 자동화 시스템을 운영할 수 있습니다. 더 이상 반복적인 일에 시간을 낭비할 필요 없습니다. n8n으로 시작하세요.
다음 단계: 당신의 업무에 맞게 Trigger와 Action 노드를 조합해봅시다. Gmail, Slack, Google Sheets, GitHub 등 주요 서비스는 모두 이미 n8n과 통합되어 있습니다.
'AI 개발 활용' 카테고리의 다른 글
| Cursor Agent 모드 완전 정복 — 자율 코딩 에이전트로 복잡한 작업 자동화하기 (0) | 2026.04.11 |
|---|---|
| LangChain으로 RAG 파이프라인 구축하기 — 문서 검색 AI 앱 만드는 완전 가이드 (0) | 2026.04.11 |
| MCP 서버 직접 만들어보기 — TypeScript로 Claude 전용 도구 개발 완전 가이드 (1) | 2026.04.09 |
| Claude Code Max 플랜 완벽 가이드 — Ultraplan 설정·토큰 최적화·실전 활용법 (0) | 2026.04.09 |
| Perplexity API 연동해서 실시간 AI 검색 앱 만들기 (0) | 2026.04.09 |