업데이트: 2026년 8월 31일. 초판의 Gemini 2.5 Flash 예시는 역사적 구성입니다. 새 워크플로우는 Gemini 3.1 Flash-Lite 등 현재 모델과 공식 가격표를 기준으로 검증하세요.
이 블로그 자체가 자동화의 결과물이에요. therearenorules.co.kr에 올라오는 글의 상당 부분은 n8n 워크플로우가 Gemini 2.5 Flash한테 시켜서 작성하고, 품질 검사를 거치고, WordPress에 발행하고, Facebook/Instagram/Threads까지 배포하는 과정을 거쳐요. 사람이 개입하는 건 프롬프트를 다듬거나 Quality Gate에서 떨어진 글을 확인할 때 정도예요.

여기까지 오는 데 25번 넘게 실패했어요. 이 글은 그 삽질의 기록이자, 지금 돌아가고 있는 시스템의 구조 설명서예요.
왜 n8n이었나
블로그 자동화 도구를 고를 때 Zapier, Make(구 Integromat), n8n을 비교했어요. Zapier는 월 $20부터 시작하는데, 제가 필요한 수준의 워크플로우를 돌리려면 월 $50은 들어갈 것 같았어요. Make는 가격은 괜찮은데 Code 노드의 자유도가 아쉬웠고요.
n8n은 셀프호스팅하면 무료예요. 제 Windows PC에서 npm 글로벌로 설치해서 쓰고 있어요. Docker가 아니에요 — npm install -g n8n 하고 n8n start 치면 끝이에요. 이 방식의 장점은 Windows 작업 스케줄러랑 연동이 쉽다는 거고, 단점은 PC를 꺼두면 워크플로우가 안 돌아간다는 거예요.
결정적인 이유는 Code 노드예요. JavaScript를 직접 실행할 수 있어서 AI 응답 후처리가 자유로워요. Quality Gate 로직을 n8n 안에서 돌릴 수 있다는 게 핵심이었어요.
전체 구조: 워크플로우 3개 + 크론 1개
지금 운영 중인 자동화 시스템의 전체 그림이에요.
워크플로우 1 — 콘텐츠 생성기 (01-content-generator.json, 10노드)
월/수/금 09:00 → 주제 선정 → Gemini 2.5 Flash API 호출 → Quality Gate → WordPress 발행 → Rank Math SEO 설정
워크플로우 2 — 뉴스 수집기 (05-news-aggregator.json, 14노드)
화/목/토 10:00 → RSS 피드 3개 수집 → Gemini로 뉴스 글 작성 → Quality Gate → WordPress 발행
워크플로우 3 — SNS 배포기 (03-sns-distributor.json, 15노드)
매일 11:00 → WordPress 최신 글 감지 → Facebook Page + Instagram + Threads 자동 포스팅
별도 크론 — 인포그래픽 생성기 (infographic_cron.py)
월/수/금 09:30, 화/목/토 10:30 → 대표 이미지 없는 글 자동 감지 → NotebookLM으로 인포그래픽 생성 → WordPress 업로드
인포그래픽을 왜 n8n에서 안 돌리냐면, n8n에 executeCommand 노드 타입이 없어요. Python 스크립트를 직접 실행할 방법이 없어서, Windows 작업 스케줄러로 분리했어요. 이 부분을 해결하려고 이틀을 쓰다가 포기하고 크론으로 뺐어요.
핵심 워크플로우 뜯어보기
콘텐츠 생성기의 노드 구성을 자세히 보여드릴게요. n8n을 써본 적 있는 분은 이 구조를 보고 비슷하게 만들 수 있을 거예요.
// 노드 흐름 (10개 노드)
[Schedule Trigger] → 월/수/금 09:00
↓
[HTTP Request - Gemini API]
POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent
Body: { "contents": [{ "parts": [{"text": "프롬프트 내용..."}] }] }
↓
[Code Node - Quality Gate]
// n8n Code 노드에서는 arrow function, optional chaining, 백틱을 쓸 수 없어요
var vocabScore = checkVocabulary(content); // 금칙어 검사
var toneScore = checkTone(content); // 톤 검사
var structScore = checkStructure(content); // 구조 검사
var score = vocabScore * 0.3 + toneScore * 0.3 + structScore * 0.4;
if (score < 85) {
return [{json: {pass: false, score: score}}];
}
↓
[IF Node] → score >= 85 통과 시
↓
[HTTP Request - WordPress REST API]
POST /wp-json/wp/v2/posts
Body: {title, content, status: "publish", categories: [카테고리ID]}
↓
[HTTP Request - Rank Math API]
POST /wp-json/rankmath/v1/updateMeta
Body: {focus_keyword, title, description}
Quality Gate의 기준 점수가 85점인데, 이게 너무 높으면 글이 계속 재생성되고 너무 낮으면 품질이 떨어져요. 처음에는 80점으로 했다가 어색한 글이 올라가는 걸 보고 85로 올렸어요. 최대 2회까지 재생성을 시도하고, 그래도 안 되면 그 주제는 건너뛰어요.
삽질 4가지 — 이걸 미리 알았으면 일주일은 아꼈어요
n8n Code 노드 문법 제한. 이게 제일 황당했어요. n8n Code 노드에서 =>(화살표 함수), ?.(optional chaining), 백틱(템플릿 리터럴)을 쓸 수 없어요. 처음에 ES6 문법으로 작성했다가 “Syntax Error”만 세 시간 봤어요. 해결은 간단한데 — 그냥 function 키워드로 바꾸고, 문자열은 +로 결합하면 돼요. 근데 이게 문서에 제대로 안 나와 있어서 삽질한 거예요.
Instagram API 엔드포인트 혼동. Instagram Content Publishing API는 graph.instagram.com이 아니라 graph.facebook.com을 써야 해요. 이것 때문에 이틀을 날렸어요. Meta 공식 문서에서도 이 부분이 헷갈리게 되어 있어요. 그리고 Threads는 또 graph.threads.net이라는 완전히 다른 엔드포인트에요. Meta가 왜 이렇게 해놨는지 모르겠어요.
Gemini 무료 티어 Rate Limit. Gemini 2.5 Flash 무료 티어는 분당 요청 수 제한이 있어요. 워크플로우에서 글 생성 요청을 연속으로 보내면 429 에러가 떠요. n8n에 Wait 노드를 넣어서 요청 사이에 60초 간격을 줬더니 해결됐어요.
WordPress 퍼마링크 설정. REST API가 동작하려면 퍼마링크 구조가 “글 이름”(/%postname%/)이어야 해요. 기본값인 “일반”으로 되어 있으면 API 엔드포인트 자체가 안 잡혀요. 이건 WordPress 초기 설정에서 한 번만 바꿔주면 되는데, 모르면 왜 안 되는지 한참 헤매요.
실제 비용
이 시스템의 월간 운영비를 정리하면 이래요. n8n은 무료(셀프호스팅), Gemini 2.5 Flash는 무료 티어, WordPress 호스팅비 포함해서 한 달에 약 2만 원 정도 들어요. 바이브코딩 트렌드 글에서도 언급했지만, 이 정도 비용으로 주 6회 자동 발행 시스템을 돌릴 수 있다는 건 솔직히 놀라운 거예요.
한 가지 주의할 점은 Meta 토큰 관리예요. Facebook Page Token은 무기한이지만, User Token과 Threads Token은 60일마다 갱신해야 해요. 이걸 깜빡하면 SNS 배포가 조용히 멈춰버려요. 캘린더에 알림을 걸어두는 게 좋아요.
Q. n8n을 Docker 대신 npm으로 쓰는 이유가 있나요?
제 환경이 Windows 11 로컬 PC라서요. Docker Desktop을 깔면 리소스를 꽤 먹는데, npm 글로벌 설치는 가벼워요. 단점은 있어요 — PC를 끄면 워크플로우가 안 돌아가고, 환경 격리가 안 돼요. 서버를 따로 운영한다면 Docker가 맞지만, 개인 블로그 자동화 수준에서는 npm으로 충분했어요.
Q. Claude Code로 쓴 글과 Gemini로 자동 생성한 글의 차이가 큰가요?
커요. Claude Code(Opus)로 /write-blog 스킬을 써서 쓴 글은 확실히 품질이 높아요. Gemini 자동 글은 Quality Gate를 통과해도 가끔 어색한 표현이 섞여요. 그래서 저는 주요 글은 Claude Code로 수동 작성하고, n8n 자동화는 뉴스 요약이나 도구 리뷰 같은 정형화된 콘텐츠에 활용하고 있어요.
관련 코드 및 저장소
이 글에서 다룬 자동화 스크립트와 워크플로우는 GitHub: github.com/therearenorules에서 확인할 수 있어요. 이 블로그를 운영하는 데 사용한 WordPress REST API 발행 스크립트, n8n 워크플로우 JSON, Claude Code 기반 자동화 도구 등을 모두 공개하고 있어요.