매일 기술 블로그에 글을 올리는 건 생각보다 큰 부담입니다. 어느 날 문득 “이거 AI한테 시키면 되지 않나?” 싶어서, 홈랩에 기술 블로그를 자동으로 기획·작성·발행하는 봇을 만들어 몇 달을 돌려봤습니다.
결론부터 솔직히 말하면 — 기술적으로는 돌아가는데, 정작 광고 수익화(애드센스)에서 “가치 낮은 콘텐츠”로 거절당했습니다. 성공담이 아니라, 만들면서 겪은 구조와 삽질, 그리고 그 벽까지 그대로 남깁니다. 비슷한 걸 만들려는 분께는 이 실패 기록이 더 쓸모 있을 겁니다.
1. 전체 그림
봇은 홈랩 Proxmox LXC 안의 Docker 컨테이너로 24/7 돌아갑니다. 텔레그램 봇으로 조종하고, 스케줄에 맞춰 자동 발행합니다. 발행처는 둘입니다.
- 티스토리 — REST API가 없어서 Playwright(헤드리스 Chromium)로 에디터를 직접 조작합니다. 로그인 세션을 저장해두고, 글쓰기 화면에 HTML을 밀어 넣는 방식.
- 워드프레스 — 이쪽은 REST API로 깔끔하게 발행합니다.
# docker-compose.yml (핵심만)
services:
blog-bot:
build: .
container_name: blog-bot-telegram
init: true # Playwright chromium 좀비 프로세스 회수(tini)
restart: unless-stopped
env_file: .env
environment: [ "TZ=Asia/Seoul" ]
volumes:
- ./data:/app/data # 발행 이력·주제 큐
- ./output:/app/output # 초안·이미지
- ./auth:/app/auth # 로그인 세션·토큰
2. 글 한 편이 나오기까지 — 파이프라인
글 하나가 발행되기까지 이런 단계를 거칩니다.
- 주제 선정 — 카테고리·키워드 시드 + 실제 검색 데이터(Search Console)로 후보 생성 → 중복 제거
- 초안 생성 — LLM으로 본문 초안 작성
- 심화 재작성 — 시니어 에디터 관점으로 깊이·구체성 강화(명령어·표·결론)
- 품질 게이트 — 코드블록·표·분량·상투어 자동 검사 후 미달이면 1회 보강
- 팩트체크·SEO — 없는 제품/버전 걸러내고 메타·키워드 정리
- 이미지 생성 — 썸네일·본문 이미지 자동 생성(무료 이미지 API 폴백 체인)
- 발행 → 색인 요청 — 티스토리+워드프레스 발행 후 Google Indexing + IndexNow로 색인 알림
3. 뇌: 어떤 LLM을 쓰나 (그리고 비용 이야기)
가장 자주 받는 질문이 “API 비용 많이 나오지 않냐”인데, 건당 과금은 0원입니다. 비결은 정액 구독 CLI를 subprocess로 호출하는 것입니다.
- 1순위: Codex CLI(ChatGPT 구독) → 2순위: Claude Code CLI(Max 구독) → 최종 폴백: Gemini 무료 티어
- 즉 per-token API가 아니라 이미 있는 구독 한도를 쓰므로, 글을 아무리 써도 추가 요금이 안 붙습니다.
물론 삽질도 있었습니다. Claude Code CLI는 3,000자짜리 한국어 글 생성에서 자주 멈춰(타임아웃) 결국 Codex를 주력으로 돌렸고, 또 Codex가 ChatGPT 계정에서 쓸 수 있는 모델이 몇 주 단위로 바뀝니다(gpt-5.4 → gpt-5.5로 교체되며 옛 모델이 “not supported”로 죽음). 그래서 모델명은 환경변수로 빼두고 주기적으로 갈아줘야 했습니다.
4. 진짜 어려웠던 것들 — 삽질 모음
인프라를 올리는 것보다, 운영하며 튀어나온 자잘한 문제들이 훨씬 오래 걸렸습니다.
| 증상 | 원인 | 해결 |
|---|---|---|
| 주제가 매일 비슷 | 같은 카테고리·포맷 반복 | 제목·slug 핵심 토큰의 ‘개념 시그니처’로 다층 중복 제거 + 주제 백로그 큐 |
| LLM 응답 JSON 파싱 실패 | 본문 문자열에 이스케이프 안 된 줄바꿈(제어문자) | json.loads(strict=False)로 허용 |
| 티스토리 코드블록 색이 엉뚱 | 에디터가 언어를 오탐(bash→fortran) | 삽입 전 티스토리 형식 <pre class="bash">으로 변환 |
| 빌드 실패 | LXC 디스크 꽉 참(Chromium 이미지 큼) | rootfs 확장 + 빌드 캐시 정리 |
| 좀비 프로세스 누적 | Playwright Chromium 잔여 프로세스 | docker init: true(tini)로 회수 |
| 텔레그램 알림 폭주 | 글마다 진행 알림 | 하루 1회 요약 + 문제 발생 시에만 알림 |
5. 가장 큰 교훈 — 애드센스가 거절했다
여기가 이 글을 쓰는 진짜 이유입니다. 파이프라인을 아무리 다듬어도(코드블록·표·심화 재작성·품질 게이트까지), 애드센스는 “가치가 별로 없는 콘텐츠”로 두 번 거절했습니다.
깨달은 건 명확합니다. 2026년의 Google은 AI 콘텐츠 자체를 금지하지 않습니다. 다만 “규모로 대량생산된, 어디서나 볼 수 있는, 저자를 검증할 수 없는” 콘텐츠를 저가치로 봅니다. 제 봇이 만든 글은 문법·구조는 멀쩡해도, 결국 “이 사이트에만 있는 고유한 경험”이 없었습니다. 웹에 있는 정보를 잘 정리한 것뿐이지, 제가 직접 겪은 무언가가 아니었으니까요.
우회하려 발행량을 줄이고 품질 기준을 높여봤지만, 근본은 형태가 아니라 “누가 실제로 겪은 이야기냐”였습니다. 그래서 방향을 틀었습니다 — 지금 읽고 계신 이 글처럼, 봇이 아니라 제가 직접 겪은 것을 쓰는 쪽으로요.
6. 만들려는 분께 — 솔직한 조언
- 자동화 자체는 주말 프로젝트 수준입니다. LXC + Docker + 구독 CLI면 per-token 비용 0으로 돌아갑니다. 진짜 어려운 건 코드가 아니라 “가치”입니다.
- AI 자동 블로그로 광고 수익을 노린다면, 2026년 기준 매우 어렵습니다. 완전 자동 합성 콘텐츠는 애드센스 심사의 정면 대상입니다.
- 대신 AI를 “초안 도우미”로 쓰고, 본인의 실제 경험·데이터·스크린샷을 얹으세요. 그게 사람에게도 검색엔진에도 유일하게 통하는 차별점입니다.
완전 자동화의 꿈은 절반만 이뤘습니다. 파이프라인은 잘 돌지만, 그 위에 “사람”이 없으면 결국 벽에 부딪히더라고요. 이 글이 같은 길을 걷는 분께 시간을 아껴주면 좋겠습니다.