본문으로 건너뛰기

© 2026 Molayo

Dev.to헤드라인2026. 05. 27. 13:56

주당 100페이지 규모의 산업적 SEO: 나의 n8n + Claude Code + RAG 스택

요약

SEO 콘텐츠 대량 생산을 위해 n8n, Claude Code, RAG를 결합한 3계층 파이프라인 구축 사례를 소개합니다. 단순 생성을 넘어 클러스터 전체의 일관성을 유지하고 환각을 방지하는 자동화 전략을 다룹니다.

핵심 포인트

  • RAG를 활용한 고객별 지식 베이스 구축으로 브랜드 보이스 유지
  • 클러스터 드리프트 방지를 위한 토픽 그래프 기반 검색 전략
  • n8n과 Claude Code를 결합한 콘텐츠 생산 라인 자동화
  • 단순 프롬프팅의 한계를 극복하는 3계층 구조 설계

저는 캄보디아 씨엠립에서 프랑스 SEO 에이전시를 운영하고 있습니다. 저희는 650개 이상의 브랜드에 대해 1,300개 이상의 시맨틱 콘텐츠 클러스터 (semantic content clusters)를 배포해 왔으며, 일반적으로 프로젝트당 주당 50~100페이지를 제작합니다.

이러한 속도는 전통적인 콘텐츠 팀으로는 불가능합니다. 또한 가공되지 않은 LLM (Large Language Model) 생성 방식으로도 불가능합니다. 결과물은 개별적으로 볼 때는 괜찮아 보이지만, 세 페이지를 연속해서 읽으면 품질이 급격히 떨어지기 때문입니다.

효과적인 방법은 콘텐츠를 창의적인 과정이 아닌 생산 라인처럼 취급하는 3계층 파이프라인입니다. 실제 사용 중인 스택은 다음과 같습니다.

사람들이 흔히 하는 "AI 콘텐츠"의 문제점

대부분의 "산업적 AI 콘텐츠" 구현 방식은 다음과 같습니다:

키워드 리스트 → ChatGPT 프롬프트 → 발행

이 방식은 한 시간 만에 50페이지를 만들어냅니다. 하지만 동시에 다음과 같은 문제를 가진 50페이지를 만들어내기도 합니다:

  • 클러스터 전체에서 동일한 다섯 가지 서론을 반복함
  • 아무도 검증할 수 없는 통계 수치를 환각 (Hallucinate) 함
  • 30페이지쯤 가면 실제 클러스터 주제에서 벗어남
  • 내부 링크 (internal linking) 전략을 전혀 사용하지 않음
  • LinkedIn의 상투적인 문구처럼 읽힘

2024년 5월 Google 유출 정보는 숙련된 SEO 전문가들이 이미 알고 있던 사실을 확인해 주었습니다. 알고리즘은 개별 페이지가 아니라 클러스터 전체를 평가합니다. siteFocusScore, siteAuthority, 그리고 압축된 품질 신호들은 1페이지부터 22페이지까지가 서로 다른 키워드만 바꾼 동일한 프롬프트처럼 읽힌다면, 23페이지가 아무리 잘 쓰였다 하더라도 개의치 않습니다.

따라서 질문은 "어떻게 콘텐츠를 빠르게 생성할 것인가?"가 아니라, "어떻게 콘텐츠를 빠르게 생성하면서도 클러스터 전체의 일관성을 유지할 것인가?"가 되어야 합니다.

3계층 구조

┌────────────────────────────────────────────────────┐
│  Layer 1 — RAG 지식 베이스 (고객별)                │
│  - 고객 브리프, 브랜드 보이스, 제품 코퍼스          │
...

핵심은 Layer 1이 Layer 2의 결과물이 지루하지 않게 만드는 역할을 하고, Layer 3가 사람이 읽기 전에 Layer 2의 실수를 잡아내는 역할을 한다는 점입니다.

Layer 1: RAG 지식 베이스

고객당 하나씩 구축합니다. 모든 브리프 업데이트 시 인덱싱 (Indexed) 및 재인덱싱을 수행합니다. 세 가지 컬렉션 (collections)을 가진 로컬 벡터 DB (Vector DB)로 저장합니다 (운영 환경에서는 qdrant를 사용하고, 프로토타이핑에는 chromadb를 사용합니다).

의사 구조 (Pseudo-structure) (운영 환경에서 정제됨)

collections = {
"client_brief": {
...


생성 시점의 검색 (Retrieval) 단계에서는 각 컬렉션(Collection)에서 클러스터별로 조정된 가중치를 적용하여 top-k를 가져옵니다. 페이지 하나를 위한 전형적인 추출 방식은 다음과 같습니다:

- `client_brief`에서 3개의 청크 (Voice + Positioning)
- `existing_pages`에서 5개의 청크 (이미 언급된 내용을 반복하지 않기 위함)
- `topic_graph`에서 1개의 청크 (다른 페이지가 다루지 않으면서 '이' 페이지가 반드시 다뤄야 하는 내용)

마지막 항목이 클러스터 드리프트 (Cluster drift)를 방지하는 핵심입니다. 이것이 없다면, 30번째 페이지가 실수로 4번째 페이지의 내용을 다시 쓰게 될 것입니다.

## 레이어 2: n8n 워크플로우 (n8n workflow)

n8n은 루프(Loop) 과정에서 발생하는 부수 효과 (Side effects)가 너무 많기 때문에 Python 스크립트로 유지하기에는 적합하지 않은 도구입니다. Google Sheets 읽기/쓰기, 재시도 로직 (Retry logic)이 포함된 LLM API 호출, 티어(Tier)에 따른 조건부 분기 (Conditional branching), 레이어 3으로부터의 웹훅 콜백 (Webhook callbacks), 프로세스가 중단되었을 때의 Slack 알림 등이 필요하기 때문입니다.

단순화된 핵심 루프는 다음과 같습니다:

[트리거: 10분마다 실행되는 cron]


...


티어별로 구분된 스위치 노드 (Switch node)가 유닛 이코노믹스 (Unit economics)를 가능하게 합니다. 프리미엄 페이지는 API 비용이 약 $0.40 정도 들고, 롱테일 (Long-tail) 페이지는 약 $0.02 정도 듭니다. 모든 페이지에 프리미엄 가격을 적용해서는 주당 100페이지를 발행할 수 없습니다.

n8n의 또 다른 숨겨진 강력한 기능은 에러 워크플로우 (Error workflows)입니다. 운영 그래프의 모든 노드에는 에러 메시지와 스택 (Stack)을

- Voice (음성/톤): `client_brief/tone_of_voice.md`에 정의된 톤과 일치할 것
- Repetition (반복): 이 클러스터(Cluster) 내의 다른 페이지를 모방하는 도입부 문단 금지
- Internal links (내부 링크): 클러스터 내 형제 페이지(Sibling pages)로 향하는 3~5개의 문맥적 링크
...

에이전트(Agent)가 구조화된 피드백을 작성하면, n8n은 웹훅 (Webhook)을 통해 이를 수집하고, 피드백이 다음 프롬프트 (Prompt)에 주입된 상태로 초안을 Layer 2로 다시 라우팅 (Routing)합니다. 세 번의 라운드를 거친 후, 인간의 검토 (Human review)가 이루어집니다.

경제성: 초안의 약 70%는 1라운드에서 통과하고, 약 25%는 2라운드에서, 나머지 5%만이 인간의 눈을 필요로 합니다. 그 마지막 5%가 바로 진정한 주의를 기울여야 할 부분입니다.

## 처음부터 다시 시작한다면 다르게 할 점

우리가 배우는 데 몇 달이 걸렸던 몇 가지 사항들입니다:

**1. 첫날부터 클라이언트 사이트 전체를 RAG 저장소에 인덱싱 (Indexing)하지 마세요.** 우선 브리프 (Brief)와 엄선된 10개의 페이지를 먼저 인덱싱하세요. 생성 과정에서 "톤 드리프트 (Voice drift)"가 발생하기 시작할 때 더 많은 페이지를 추가하세요. 너무 일찍 인덱싱하는 것은 검색 (Retrieval) 과정에서 오래된 콘텐츠를 "톤 (Voice)"으로 가져오게 된다는 것을 의미합니다.

**2. 클러스터 테마 탐지 (Cluster theme detection)를 LLM에 맡기지 마세요.** 이를 토픽 그래프 (Topic graph)에 구조화된 메타데이터 (Metadata)로 인코딩 (Encode)하세요. LLM은 50번의 턴 (Turn)이 넘어가는 동안 "이 페이지는 Y가 아니라 X에 관한 것이다"라는 것을 기억하는 데 서툽니다. 하지만 토픽 그래프는 절대 잊지 않습니다.

**3. 도입부에 지문 확인 (Fingerprint check) 단계를 추가하세요.** 저렴한 방법입니다: 클러스터 내에 게시된 모든 페이지의 첫 50단어를 해시 (Hash) 처리하세요. 새로운 초안이 생성되면 이를 비교합니다. 만약 해밍 거리 (Hamming distance)가 임계값 미만이라면, 도입부를 다시 생성하세요. 이 단 한 번의 체크로 오후 한나절 만에 반복 문제(Repetition problem)를 해결했습니다.

**4. 동일한 호출 (Call) 내에서 LLM의 자기 평가 (Self-evaluation)를 신뢰하지 마세요.** 두 번의 호출 평가 (생성 후, 새로운 모델 인스턴스가 평가)는 단일 호출이 놓치는 것들을 잡아냅니다. 동일한 모델이라도 새로운 컨텍스트 (Context)를 사용하면 앵커링 편향 (Anchoring bias)이 발생하지 않습니다.

**5. 모든 워크플로우 (Workflow)에 킬 스위치 (Kill switch)를 유지하세요.** `pipeline.enabled`라는 이름의 구글 시트 (Sheet) 셀 하나만 있으면 됩니다. 이 값이 `FALSE`라면, 모든 n8n 트리거 (Trigger)가 단락 (Short-circuit)됩니다. 반드시 필요하게 될 것입니다.

## 솔직한 트레이드오프 (Trade-offs)

이 파이프라인은 "AI가 콘텐츠를 작성하는 것"이 아닙니다. 이것은 다음과 같은 콘텐츠 생산 라인입니다:

- 브리프 (Brief)는 사람이 작성합니다 (실제 SEO 전략가의 작업)
- 클러스터 맵 (Cluster map)은 사람이 작성합니다 (각 페이지가 무엇을 다룰지 누군가 결정함)
- 보이스 코퍼스 (Voice corpus)는 사람이 제공합니다 (실제 클라이언트의 브랜드 보이스)
- QA 계약 (QA contract)은 사람이 정의합니다 (우리가 준수해야 할 규칙)
- LLM은 타이핑(작성)만 수행합니다

이 네 가지 인간의 입력(Human inputs)을 건너뛰면서 이 시스템이 작동하기를 기대할 수는 없습니다. 이 파이프라인이 주당 100페이지를 생산할 수 있는 이유는 상류(Upstream) 작업이 완료되었기 때문입니다. 그것이 없다면, 당신은 100페이지의 쓰레기(Slop)를 생산하게 될 것입니다.

또 다른 트레이드오프 (Trade-off): 이것은 도구가 아니라 시스템입니다. 유지보수가 필요합니다. 클라이언트의 카탈로그가 진화함에 따른 RAG 재색인 (Re-indexing), Claude/DeepSeek 버전이 변경됨에 따른 프롬프트 튜닝 (Prompt tuning), 킬 스위치 (Kill switch) 모니터링 등이 필요합니다. 활성 프로젝트당 대략 주당 시니어 엔지니어 1일 치의 예산을 책정하십시오.

## 다음 단계

토픽 그래프 스키마 (Topic graph schema), QA 규칙 템플릿, 그리고 정제된 버전의 n8n 워크플로우 (Workflow)를 별도의 리포지토리 (Repo)로 공개할 예정입니다. 이것이 유용할 것 같다면 댓글을 남겨주세요.

클러스터 일관성 (Cluster coherence) 대신 LLM의 인용 가능성 (Citability)을 확인하는 다른 QA 레이어를 적용한 동일한 파이프라인이 우리가 GEO (Generative Engine Optimization, 생성 엔진 최적화)를 위해 사용하는 방식입니다. 그것이 이 시리즈의 다음 포스트입니다.

_Stéphane Jambu — 대규모 토픽 권위 (Topical authority)를 구축하는 SEO 엔지니어. 650개 이상의 브랜드에 대해 1,300개 이상의 시맨틱 클러스터 (Semantic clusters) 구축. [stephane-jambu.com](https://stephane-jambu.com)에서 산업적 SEO에 대해 강연 중._

AI 자동 생성 콘텐츠

본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
1

댓글

0