3단계 콘텐츠 품질 사다리를 구축한 방법

프로그래매틱(programmatic) 웹사이트를 확장하는 것은 어렵습니다. 콘텐츠 작성을 AI에만 의존한다면, API가 중단되었을 때 사이트가 망가질 수 있습니다.

저는 Top AI Tools, Find Games Like, Open Alternative To라는 세 개의 디렉토리 사이트를 출시했습니다. 저는 AI 연결이 활성화되지 않은 상태에서도 항상 정보를 표시할 수 있도록 3단계 콘텐츠 사다리를 사용합니다.

이 시스템은 데이터베이스의 model_used라는 단일 컬럼을 사용합니다. 이는 세 가지 품질 수준을 추적합니다:

  • seeded-from-json: 파일에서 가져온 기본 데이터입니다. 구조화되어 있지만 내용이 빈약합니다.
  • fallback-template: AI가 실패하거나 API 키가 누락된 경우 사용하는 표준 템플릿입니다. 기술적으로는 정확하지만 개성이 부족합니다.
  • claude-haiku-4-5: 목표 상태입니다. 고품질의 편집 요약과 미묘한 디테일을 제공합니다.

저는 업그레이드를 관리하기 위해 특정 SQL 쿼리를 사용합니다. 스크립트는 다음 두 가지를 찾습니다:

  1. 아직 콘텐츠가 없는 새로운 항목.
  2. 저품질의 seeded 또는 fallback 콘텐츠만 있는 기존 항목.

스크립트는 이를 인기순으로 정렬합니다. 방문 횟수가 가장 많은 페이지를 먼저 업그레이드합니다. 이를 통해 트래픽이 가장 높은 페이지에 즉시 최상의 콘텐츠를 제공할 수 있습니다.

이 프로세스는 완전히 자동화되어 있으며 멱등성(idempotent)을 보장합니다. 저는 upsert 패턴을 사용합니다. 업그레이드에 성공하면 데이터베이스는 기존의 fallback 콘텐츠를 새로운 AI 콘텐츠로 덮어씁니다. model_used 컬럼도 자동으로 업데이트됩니다.

또한 Anthropic의 prompt caching을 사용합니다. 이는 비용과 토큰을 크게 절약해 줍니다. 모든 항목에 대해 시스템 프롬프트가 동일하기 때문에, 첫 번째 호출이 캐시를 준비(prime)합니다. 이후 배치 내의 나머지 99번의 호출은 해당 캐시를 읽어와 더 낮은 비용으로 처리됩니다.

주요 아키텍처 선택 사항:

  • 에러 핸들링: Claude가 실패하더라도 시스템은 중단되지 않습니다. 단순히 fallback 템플릿을 작성하고 다음 항목으로 넘어갑니다.
  • SEO 안전성: 페이지에 유용한 콘텐츠가 전혀 없는 경우 noindex 태그를 사용합니다. 이를 통해 Google이 빈 페이지를 인덱싱하는 것을 방지합니다.
  • 정적 빌드: 데이터베이스를 Astro용 JSON 파일로 내보냅니다. 이는 데이터베이스나 AI API에 장애가 발생하더라도 사이트가 계속 온라인 상태를 유지할 수 있음을 의미합니다.

이 설정을 통해 사이트 안정성을 해치지 않으면서 빠르게 구축할 수 있습니다.

Source: https://dev.to/morinaga/how-i-built-a-three-tier-content-quality-ladder-for-programmatic-directory-etl-483