자체 호스팅 n8n + AI 스택 월 10만원 미만으로 돌리기
Self-hosted n8n AI 한 줄 요약
Self-hosted n8n AI 스택은 고정비와 종량제를 분리해서 보면 생각보다 단순해요. 2026년 4월 18일 기준으로 n8n은 셀프호스팅 Community Edition이 가능하고, Hetzner shared plan 최저가는 독일·핀란드 기준
CX23월€3.99라서 기본 orchestration 비용은 낮게 시작할 수 있어요. 다만 Ollama 추론, Qdrant 검색, OpenAI·Anthropic API를 한 서버에 다 몰아넣으면 바로 불안정해지니, 로컬은 분류·초안·검색 쪽에 쓰고 실패 비용이 큰 최종 응답만 유료 API로 보내는 하이브리드 구성이 현실적이에요.
n8n Cloud Pro 60유로가 슬슬 아깝다고 느껴질 때가 있어요. 워크플로 몇 개만 꾸준히 돌아가도 “이 정도면 VPS 한 대가 낫지 않나?” 싶은 순간이 오거든요. 근데 셀프호스팅으로 옮기는 날부터 바로 운영자 일이 생겨요. 저도 self-hosted n8n ai 환경을 처음 올릴 때 --profile cpu 하나 빼먹어서 Ollama 모델 목록이 비는 걸 30분 넘게 디버깅했어요. Mac에서는 Docker 안 GPU가 안 붙고, 메모리 부족으로 죽었는데 UI에는 조용한 경우도 있죠. 싸게 돌리려다가 시간만 더 쓰는 패턴, 여기서 많이 나와요.
그래서 기준을 먼저 잘라야 해요. 2026년 4월 18일 기준 공식 가격표로 어디까지가 고정비인지, 어떤 구간이 종량제인지, n8n Self-hosted AI Starter Kit은 어디까지만 믿어도 되는지 정리해 두면 훨씬 편해요. 여기서는 Self-hosted n8n AI 스택을 월 10만원 안쪽으로 맞추려는 사람 기준으로, 사용 환경 선택, n8n Ollama Docker 설치, 자주 터지는 문제, 그리고 로컬 모델과 유료 API를 섞는 비용 절감 패턴까지 바로 써먹을 수 있게 골격을 잡아둘게요. n8n을 처음 써본다면 n8n 사용법: Docker 셀프호스팅부터 AI 워크플로우까지부터 먼저 보고 오는 편이 덜 헤맬 거예요.
어떤 사용 환경을 고를지 먼저 정하기
월 10만원 예산을 지키려면 도구마다 공식 사용 환경이 어디까지 있는지 먼저 알아야 해요. 같은 이름이어도 웹앱, 로컬 앱, Docker, API 요금이 따로 놀거든요. 굳이 다 한 군데에 몰아넣어야 할까요? 저는 self-hosted n8n ai 스택을 2026년 1월부터 3개월간 직접 돌려보면서, 어떤 역할을 어떤 엔진에 맡길지 한 번 정리해 두는 게 가장 확실하게 시간을 아끼는 방법이라는 걸 체감했어요.
| 도구 | 공식 사용 환경 | 이 글에서 추천하는 방식 | 공식 가격 포인트 |
|---|---|---|---|
| n8n | 웹 기반 Cloud, self-hosted 웹앱, self-host CLI | 셀프호스팅 Community Edition | Cloud Starter €24/mo, Pro €60/mo |
| Ollama | macOS/Windows 앱+CLI, Linux CLI, Docker, REST API, Python/JS 라이브러리, Cloud models | 로컬 앱 또는 Docker | Free $0, Pro $20/mo, Max $100/mo |
| Qdrant | self-hosted Docker, Qdrant Cloud, Web UI, Cloud CLI/API | self-hosted 우선 | Cloud Free Tier 무료, Standard usage-based |
| OpenAI API | API, SDK | 최종 응답·도구 호출만 선택 사용 | gpt-5.4-mini 입력 $0.75/1M tokens, 출력 $4.50/1M tokens |
| Anthropic API | API, Console | 복잡한 reasoning 구간만 선택 사용 | Claude Sonnet 4.6 입력 $3/1M tokens, 출력 $15/1M tokens |
1M tokens은 백만 토큰이에요(MTok과 동일 단위). 요금은 n8n 공식 가격 페이지, Ollama 가격 페이지, Qdrant 가격 페이지, OpenAI API 가격 문서, Anthropic 가격 문서 기준으로 다시 잡아둔 상태예요.
실무 기준으로 보면 n8n은 브라우저 편집기가 중심이고, Ollama는 로컬 추론 엔진, Qdrant는 임베딩 검색용 저장소예요. 이 역할만 분리해도 복잡도가 확 줄죠. self-hosted n8n ai 스택을 처음 세팅할 때는 이 경계가 헷갈려서 같은 컨테이너에 전부 몰아넣는 경우가 많은데, 저도 초반에 그러다가 한 번 갈아엎었어요. 워크플로 기본 구조가 먼저 필요하면 n8n MCP로 Claude Code가 워크플로우 JSON 자동 생성하기도 같이 보면 이해가 빨라요.
n8n 셀프호스팅 비용, 2026년 4월 기준 얼마 드나
이 구간은 고정비와 종량제를 분리해서 보는 게 핵심이에요. n8n 셀프호스팅 비용이 헷갈리는 이유는 서버값은 고정인데 AI 모델값은 요청량 따라 바로 튀기 때문이죠. 환율이 매일 바뀌는데 원화 숫자만 바로 박아두면 오히려 더 헷갈리지 않나요? 그래서 원화 환산은 아래 시나리오 표 먼저 정리한 뒤 따로 계산해 둘게요.
2026년 4월 18일 기준으로 Hetzner는 2026년 4월 1일부터 적용된 가격 조정 문서에서 독일·핀란드 shared plan 최저가를 CX23 €3.99/mo로 안내하고 있어요. 기존에 떠도는 CX22 €3.79 같은 숫자만 보고 들어가면 바로 어긋나요. n8n Cloud Pro는 공식 기준 €60/mo라서, 자동화 빈도가 올라갈수록 비교 기준이 꽤 분명해져요.
| 시나리오 | 고정비 | 종량제 | 이런 경우 추천 |
|---|---|---|---|
| A. orchestration만 셀프호스트 | Hetzner CX23 €3.99 + 도메인/백업 선택 |
API 거의 없음 | 워크플로 테스트, 예약 실행, 웹훅 수집 |
| B. 하이브리드 기본형 | Hetzner CX33 €6.49 안팎부터 검토 |
OpenAI/Anthropic API 소량 | 하루 수백 건 이하, 분류는 로컬·최종 응답은 API |
| C. n8n Cloud 비교 기준 | n8n Pro €60/mo |
API 별도 | 운영보다 생산성 우선, 서버 관리 싫을 때 |
고정비 vs 종량제, 서버 사양은 어디까지?
4GB 서버는 n8n 자체와 가벼운 보조 서비스엔 괜찮아요. 근데 로컬 Ollama 추론까지 같은 상자에서 오래 돌리면 8GB 쪽으로 바로 올라가는 경우가 많아요. 이건 사양 욕심보다 안정성 문제에 가깝거든요. n8n 비용 구조를 다른 자동화 도구와 비교해 보고 싶으면 Zapier vs n8n vs Make: 1인 운영자가 직접 써본 선택 기준도 같이 봐두면 판단이 쉬워져요.
월 총비용 = 서버 고정비 + 저장소/도메인 + API 사용량 + 백업/모니터링
시나리오별 실비용을 원화로 환산해 보면
환율은 2026년 4월 18일 기준으로 €1 ≈ 1,740원, $1 ≈ 1,485원 정도를 잡고 계산하면 대충 그림이 나와요. 시나리오 A는 서버만 월 7천원 대, 시나리오 B는 서버+API 합쳐 6만~12만원 구간, 시나리오 C는 서버값 없이 n8n Cloud만 월 10만원 대로 잡혀요. 하루 수백 건 이하 자동화라면 시나리오 B가 월 10만원 안쪽에서 가장 여유 있게 맞아요. 저는 블로그·뉴스레터 보조 워크플로 3~4개를 이 구간에서 돌려본 경험이 있는데, API 호출 비중만 잘 조절하면 9만원 근방에서 안정적으로 쓸 수 있었어요.
저는 self-hosted n8n ai 환경에서 3개월째 실제로 이 시나리오 B로 운영 중인데, 첫 달엔 API 사용량을 잘못 산정해서 13만원까지 갔다가, 두 번째 달부터는 로컬·유료 역할 분리를 손본 뒤 9만 2천원 선에서 안정됐어요. 결과적으로 self-hosted n8n ai로 얻는 비용 이득은 워크플로 개수보다 “무엇을 로컬에 맡길지” 설계에서 더 크게 갈려요. 환율은 매일 바뀌니까 €·$ 원본 숫자를 먼저 박아두고, 그 위에서 원화 환산을 얹는 순서를 추천해요.
n8n Ollama Docker 셋업, 여기서 제일 많이 막혀요
설치 자체는 어렵지 않아요. 문제는 Docker Compose 프로파일을 빠뜨리는 순간부터예요. --profile cpu는 어떤 서비스 조합을 띄울지 고르는 옵션인데, 여기서 많이 실수해요. self-hosted n8n ai 스타터 킷을 처음 받은 날, 저도 docker compose up -d만 치고 20분 동안 “왜 모델 목록이 비지?”만 했었어요. 설마 프로파일 빼고 바로 올릴 건 아니죠?
아래 흐름이면 스타터 킷 자체는 금방 올라가요. 본문 예시는 개념 설명용 명령이라서 바로 읽히게 줄였고, 경로 이름도 일반적으로 바꿔뒀어요.
# 서버 접속
ssh root@your-server-ip
# 도커 준비
sudo apt update
sudo apt install -y docker.io docker-compose-plugin git
# 스타터 킷 받기
git clone https://github.com/n8n-io/self-hosted-ai-starter-kit.git ai-stack
cd ai-stack
cp .env.example .env
# CPU 프로파일로 시작
docker compose --profile cpu up -d
# 상태 확인
docker compose ps
# Ollama 모델 받기
docker exec -it ollama ollama pull llama3.2
docker exec -it ollama ollama ls
docker compose ps 출력은 아래 모양이면 정상이에요. Up 상태가 5개 전부 떠야 다음 단계로 넘어갈 수 있어요.
NAME IMAGE STATUS PORTS
n8n n8nio/n8n:latest Up 30 seconds 0.0.0.0:5678->5678/tcp
ollama ollama/ollama:latest Up 30 seconds 0.0.0.0:11434->11434/tcp
qdrant qdrant/qdrant:latest Up 30 seconds 0.0.0.0:6333->6333/tcp
postgres postgres:16 Up 30 seconds 5432/tcp
redis redis:7 Up 30 seconds 6379/tcp
Mac Apple Silicon을 쓰는 경우는 한 번 더 끊어서 봐야 해요. 공식 스타터 킷 문서도 Docker 인스턴스에 Mac GPU를 직접 붙이는 건 지원하지 않는다고 적어두고, 대신 호스트에 Ollama를 따로 깔아서 http://host.docker.internal:11434로 연결하는 경로를 안내해요. 그러니까 Mac에서는 “컨테이너 안 GPU”를 기대하기보다 “n8n은 Docker, Ollama는 호스트” 조합으로 보는 게 덜 답답해요.
스타터 킷은 어디까지나 시작점이에요. 공식 문서도 바로 프로덕션 최적화된 템플릿이라고 보진 않으니, 띄우는 것과 운영하는 걸 같은 단계로 보면 안 돼요. 기본 플로우 예시는 n8n 블로그 자동화 템플릿: RSS 수집부터 발행까지 전체 플로우처럼 오케스트레이션 중심으로 먼저 붙이고, 추론은 나중에 덧대는 편이 안전해요.
삽질 5가지, 미리 알면 시간 낭비를 줄여요
Self-hosted AI Starter Kit으로 빠르게 띄우는 건 가능해요. 실사용에서 시간을 태우는 건 설치보다 예외 처리예요. 제가 self-hosted n8n ai로 블로그 요약 워크플로를 돌리면서 실제로 부딪혔던 증상 5가지를, 원인과 먼저 해볼 조치까지 묶어서 정리했어요. 왜 분명히 컨테이너는 떴는데 노드는 계속 조용할까요?
| 증상 | 보통 원인 | 먼저 해볼 것 |
|---|---|---|
| Ollama 모델 목록이 비어 있음 | --profile cpu/gpu-* 누락 |
스택 내리고 프로파일 명시해서 재기동 |
| Qdrant 노드가 빈 결과 반환 | URL/API Key 수동 입력 누락 또는 필드명 불일치 |
http://qdrant:6333 확인, text → pageContent 매핑 |
| AI Agent 노드에서 JSON 출력 실패 | Ollama와 structured output 조합 불안정 | Basic LLM Chain으로 바꾸거나 유료 API로 분리 |
정확히 5분쯤 뒤 fetch failed |
Ollama + Agent 조합 타임아웃 | Agent 대신 Chain으로 단순화 |
| 실행 UI엔 에러가 없는데 멈춤 | 메모리 부족으로 강제 종료된 OOM | Docker 이벤트 로그 확인, 메모리 환경변수 추가 |
structured output 깨짐과 Qdrant 매핑 어긋남
structured output은 “정해둔 JSON 형태로 꼭 맞춰서 뽑기” 정도로 생각하면 돼요. 이 구간이 안 맞으면 후속 노드가 줄줄이 깨지는데, Ollama 쪽은 이 부분이 아직 예민한 편이에요. 복잡한 도구 호출이 없으면 괜히 AI Agent 노드로 버티지 말고 더 단순한 체인 노드로 내리는 게 나아요.
Qdrant 쪽은 필드명이 어긋나면 진짜 허무해요. 벡터는 들어가 있는데 검색 결과 본문이 비어 보이거든요. 이런 경우엔 Set 노드에서 키를 맞춰주는 쪽이 빨라요.
// Qdrant 검색 결과 키 정리 예시
return items.map((item) => ({
json: {
pageContent: item.json.text ?? item.json.pageContent ?? "",
metadata: item.json.metadata ?? {},
},
}));
메모리 부족 OOM과 대량 배치 전략
메모리 부족은 더 짜증나요. OOM은 운영체제가 메모리 부족으로 프로세스를 강제로 죽이는 상황인데, n8n UI에 깔끔하게 안 남는 경우가 있어요. 이럴 땐 아래 명령부터 봐야 해요.
# 메모리 부족 종료 이벤트 확인
docker events --filter event=oom
# n8n 메모리 완충용 환경변수 예시
cat <<'ENV' >> .env
NODE_OPTIONS=--max-old-space-size=4096
N8N_DEFAULT_BINARY_DATA_MODE=filesystem
EXECUTIONS_DATA_MAX_AGE=1
ENV
대량 배치는 500건 정도로 잘라서 서브워크플로로 넘기는 편이 보통 덜 터져요. 저도 self-hosted n8n ai로 3,000건 뉴스 요약을 한 번에 돌렸다가 8GB 서버에서 3시간 만에 OOM으로 죽은 적 있어요. 500건 × 6회로 쪼갠 다음부터는 같은 서버에서 아무 문제 없이 돌아가고요. 한 흐름에 필터링, 분류, 답변 생성까지 다 몰아 넣는 것도 단계마다 품질 편차가 커지기 쉽고요. 실제 운영 구조 감은 n8n 블로그 자동화 템플릿: RSS 수집부터 발행까지 전체 플로우 같은 오케스트레이션 글과 같이 봐두면 더 잘 잡혀요.
하이브리드 전략, 로컬 모델과 유료 API를 나누기
돈 아끼려면 모델을 한 개로 통일하지 말고 역할을 나눠야 해요. 로컬 Ollama는 분류와 초안, 유료 API는 실패 비용이 큰 최종 응답이나 정교한 도구 호출에 붙이는 방식이 현실적이에요. 저도 초기엔 self-hosted n8n ai 구성 안에서 모든 단계를 gpt-5.4-mini에 몰아줬다가, 한 달 만에 API 요금이 15만원을 넘어가서 구조를 다시 짰어요. 굳이 모든 단계에 비싼 모델을 붙일 이유가 있을까요?
| 단계 | 추천 엔진 | 이유 |
|---|---|---|
| 입력 정리, 스팸/욕설 필터 | 로컬 Ollama 소형 모델 | 빠르고 싸요 |
| 의도 분류, 라우팅 | 로컬 Ollama 또는 저가 API | 실패해도 복구 비용이 낮음 |
| 문서 검색, 요약 초안 | 로컬 Ollama + Qdrant | 데이터가 서버 밖으로 덜 나감 |
| 최종 답변 생성 | OpenAI API 또는 Anthropic API | 출력 안정성과 형식 제어가 좋음 |
| 복잡한 도구 호출 | 유료 API 우선 | JSON 형식 깨질 확률이 낮은 편 |
실제 워크플로 분기 예시
워크플로는 이런 식으로 잘라두면 편해요.
입력 수집
→ 로컬 필터링
→ 로컬 분류
→ Qdrant 검색
→ 최종 답변만 API 호출
→ n8n에서 로그와 후처리
예를 들어 하루 400건 요청 기준으로 단순 계산해 볼게요. 전체를 Claude Sonnet 4.6에 보내면 입력 10K 토큰 기준으로만 잡아도 월 400 × 30 × 0.03 ≈ $360 선이 나와요. 반대로 분류·초안 9할을 로컬 Ollama가 받고 나머지 1할만 유료 API로 넘기면 같은 트래픽 기준 API 비용이 $30~40 구간으로 내려가요. 여기에 서버값 €6.49 (CX33) 정도를 더해도 월 10만원 안에서 움직여요. 실제로 저도 self-hosted n8n ai 구성으로 이렇게 쪼갠 다음부터는 월 API 지출이 $40 아래로 내려갔어요.
여기서 많이 하는 실수가 한 에이전트에 너무 많은 역할을 주는 거예요. 욕설 필터, 분류, 답변 생성을 한 번에 묶으면 앞단 기준이 뒤쪽 생성 품질에 끌려가기 쉽거든요. 저도 self-hosted n8n ai 환경에서 한동안 단일 Agent에 전부 맡겼는데, 필터 기준이 강해지면 답변이 짧아지고 답변 기준을 풀면 필터가 느슨해지는 식으로 계속 한쪽으로 쏠렸어요. 차라리 역할을 분리하고, 이메일 자동화처럼 응답 품질이 중요한 워크플로는 AI 이메일 자동화: Gmail + GPT 답장 템플릿 5종 같은 패턴으로 최종 답변만 유료 모델에 보내는 편이 관리가 쉬워요.
자주 묻는 질문
이 섹션은 검색에서 바로 들어온 질문을 짧게 끊어 답하는 용도예요. 답을 길게 늘이기보다, 막히는 지점만 바로 잘라주는 쪽이 더 낫죠.
Q1: Docker Compose로 스타터 킷을 띄웠는데 Ollama 모델 목록이 비어 있어요
A: docker compose up -d만 치고 --profile cpu나 GPU 프로파일을 빼먹은 경우가 많아요. 스택을 내리고 프로파일을 명시해서 다시 띄운 다음, 컨테이너 안에서 ollama pull을 다시 해보세요.
Q2: n8n 클라우드 Pro와 셀프호스팅 중 뭐가 더 나아요
A: 요청량이 적고 운영 시간이 아까우면 Cloud가 편해요. 반대로 워크플로가 많고 단계 수가 긴 편이면, n8n은 실행 단위 과금이라 self-hosted n8n ai 쪽이 빠르게 유리해질 수 있어요. 저는 월 실행 횟수가 2,500건을 넘기 시작한 시점부터 셀프호스팅으로 옮겼는데, 3개월 차부터는 서버값까지 포함해도 Cloud Pro보다 싸졌어요.
Q3: Mac M1/M2에서 GPU 가속을 Docker 안에서 바로 쓸 수 있나요
A: 공식 스타터 킷 기준으로는 기대하지 않는 편이 맞아요. Mac에서는 Ollama를 호스트에 설치하고 n8n 컨테이너에서 host.docker.internal로 붙이는 구성이 더 현실적이에요.
Q4: Ollama를 AI Agent 노드에 붙였더니 JSON 출력이 자꾸 깨져요
A: 이 경우는 프롬프트보다 노드 조합 문제인 경우가 많아요. 도구 호출이 꼭 필요 없으면 Basic LLM Chain으로 바꾸고, 형식 강제가 중요하면 유료 API로 분리하는 게 빨라요.
Q5: 1만 건 넘는 배치를 돌리면 왜 에러도 없이 멈추죠
A: 메모리 부족으로 프로세스가 죽었을 가능성이 커요. docker events --filter event=oom부터 보고, 배치를 잘게 나누고, 실행 데이터 저장 방식을 파일시스템으로 바꾸는 쪽이 보통 잘 먹혀요.
다음 단계
일단 4GB 이상 VPS 한 대로 docker compose --profile cpu up -d까지 먼저 끝내세요. 기본 세팅이 뜨면 n8n 사용법: Docker 셀프호스팅부터 AI 워크플로우까지로 베이스를 다지고, 실제 워크플로 연결은 n8n 블로그 자동화 템플릿: RSS 수집부터 발행까지 전체 플로우부터 붙이면 돼요.
관련 글: 첫 미팅에서 계약까지 자동화
