로컬 LLM을 활용해 스스로 콘텐츠를 작성하는 제품 순위 사이트 구축기 — The Stack
요약
로컬 LLM과 Astro를 활용하여 클라우드 비용 없이 자동으로 콘텐츠를 생성하고 업데이트하는 제품 순위 사이트 구축 사례를 소개합니다. vLLM 기반의 파이프라인과 systemd 타이머를 이용한 자동화 아키텍처, 그리고 시스템 안정성을 위한 모니터링 전략을 다룹니다.
핵심 포인트
- vLLM을 활용한 로컬 LLM 기반의 콘텐츠 생성 파이프라인 구축
- Astro(SSG)를 사용한 고성능 및 저비용 정적 웹사이트 구현
- Google 자동 완성을 활용한 데이터 기반 주제 발견 프로세스
- 의존성 체크 및 자가 치유를 통한 자동화 시스템의 안정성 확보
대부분의 "최고의 X 도구" 사이트들은 콘텐츠 트레드밀(content treadmill)과 같습니다. 누군가는 수십 개의 정리글을 계속해서 조사하고, 작성하고, 최신 상태로 업데이트해야 합니다. 저는 이 과정 중 얼마나 많은 부분을 제가 이미 보유한 하드웨어에서 클라우드 AI 비용 없이(zero cloud-AI cost) 스스로 실행할 수 있을지 확인하고 싶었습니다. 그 결과물이 topratingshub.com에 공개되었습니다. 소프트웨어, 앱, AI 도구, 기기 및 금융 상품에 대한 독립적이고 데이터 중심적인 순위를 제공합니다. 여기 그 아키텍처와 교훈을 소개합니다.
스택 (The stack)
- Astro (SSG) — 모든 페이지는 정적 HTML이며, 전송되는 JS는 0 KB입니다. 빠르고, 호스팅 비용이 저렴하며, Core Web Vitals 성능이 뛰어납니다.
- 작성자로서의 로컬 LLM (A local LLM) — ARM64 장비에서 vLLM으로 서빙됩니다. 파이프라인은
근거 확보(ground) → 사실 추출(extract facts) → 작성(write) → 품질 검증(quality-gate) → 수정(revise)순으로 진행됩니다. 품질 검증(quality gate) 단계에서는 또 다른 로컬 모델 호출을 통해 초안의 점수를 매기며, 임계값 미달인 항목은 한 번의 수정 과정을 거치거나 제외됩니다. - 실제 근거 확보 (Real grounding): 작성 전, 기본 출처에서 최신 가격 및 사양을 가져와 추출한 뒤, 상위 출처들을 작성자에게 전달합니다(큰 컨텍스트 예산 활용). 이를 통해 결과물이 단순한 느낌(vibes)이 아닌 실제 수치를 포함하도록 합니다.
- systemd 타이머 (systemd timers), 관리자 대신 사용: 매일 밤 실행되는 콘텐츠 생성 작업, 매월 실행되는 주제 발견(topic-discovery) 작업, 15분마다 수행되는 상태 점검(health checks), 일일 백업, 주간 요약(weekly digest) 등이 포함됩니다.
- IndexNow + JSON-LD (Article, ItemList, Breadcrumb, FAQ)를 사용하여 검색 엔진이 변경 사항을 빠르게 감지하도록 합니다.
무료로 진행하는 주제 발견 (Topic discovery for free)
무엇을 쓸지 추측하는 대신, 매월 실행되는 작업이 카테고리별 시드 용어에 대한 Google 자동 완성(Google Autocomplete) 제안을 가져옵니다. 이는 실제 인기 순으로 정렬된 쿼리(
공유된 LLM이 부하를 견디지 못하고 몇 차례 충돌했습니다. 야간 작업(nightly job)의 첫 번째 버전은 그럼에도 불구하고 계속 실행되었고, 약 200개의 주제를 영구적인 error 상태로 표시했습니다(모델이 다운된 동안 재시도 횟수 제한에 도달함). 일시적인 인프라 오류가 실제 작업 결과물을 조용히 날려버린 것입니다.
해결책은 원칙에 기반한 두 줄의 조치였습니다:
- 의존성(dependency)에 대한 게이트 설치. 이제 야간 작업은 모델의 상태를 먼저 확인합니다. 만약 모델이 다운되어 있다면, 전체 실행을 건너뛰어 아무런 자원도 낭비하지 않습니다.
- 자가 치유(Self-heal) + 알림. 감시자(watcher)가 지속적인 다운타임 이후 모델 컨테이너를 재시작하고 저에게 알림을 보냅니다. 며칠 동안 소리 없이 실패하는 대신 말이죠.
# 야간 콘텐츠 작업, 단순화 버전
if ! curl -sf http://localhost:8000/v1/models >/dev/null; then
echo "writer down — skipping run, no topics burned"; exit 0
...
만약 자율적인 시스템을 구축하고 있다면: 자신의 웹 엔드포인트뿐만 아니라 핵심 의존성(linchpin dependency)을 모니터링하세요. 그리고 장애가 발생했을 때 파괴적인 결과가 아닌 무해한 결과가 되도록 만드세요.
핵심 요약 (Takeaways)
- 전기료와 도메인 비용만으로 로컬 하드웨어에서 진정으로 유용하고 스스로 업데이트되는 콘텐츠 사이트를 운영할 수 있습니다.
- 그라운딩(Grounding)과 품질 게이트(quality gate)의 유무가 "AI 슬롭(AI slop)"과 읽을 가치가 있는 콘텐츠를 가르는 차이점입니다.
- 어려운 부분은 생성(generation)이 아니라, 그 주변을 둘러싼 운영상의 안전망(operational safety net)을 구축하는 것입니다.
실제 결과물은 topratingshub.com입니다. 만약 해당 카테고리 중 하나에서 제품을 운영 중이며 명확하게 표시된 위치를 원하신다면, 광고 페이지를 확인해 주세요. 편집 순위 자체는 절대 판매 대상이 아니며, 이것이 바로 신뢰성을 유지하는 핵심입니다.
댓글을 통해 기술 스택(stack) 관련 질문에 기꺼이 답변해 드리겠습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기