Best-Agent
베타커뮤니티·핫딜 트렌드를 6시간마다 모아 분석하는 상품 트렌드 서비스 — 수익화는 외부 키를 기다리는 중
- 기간
- 2026-08 ~ 현재
- 커밋
- 35
- 수집 주기
- 6시간
- 가동 소스
- 3 / 9곳
- LLM 티어
- 3단
기술 스택
- Alembic
- Cloudflare Workers
- Drizzle
- FastAPI
- Hono
- Next.js
- Playwright
- Pydantic
- Python
- React
- SQLAlchemy
- Tailwind CSS
- TypeScript
- Zod
- httpx
실제 화면 운영 중인 서비스를 그대로 캡처했습니다
2026-10-06 기준

개요
무엇이고 누구를 위한 것인가국내외 커뮤니티와 핫딜 게시판에서 지금 반응이 오는 상품을 자동으로 모아 분석하고, 매주 트렌드 리포트를 만드는 서비스다. 같은 데이터를 제휴 마케팅·리포트 구독·광고·B2B 데이터 판매 네 갈래로 수익화하도록 설계했다.
수집·분석·리포트·사이트는 동작하지만, 결제와 제휴는 외부 키·정책 문제로 아직 열리지 않았다. 이 페이지는 그 상태까지 그대로 적는다.
문제
무엇이 문제였나"지금 잘 팔리는 것"이라는 정보는 쇼핑몰 베스트 목록과 커뮤니티 반응에 흩어져 있다. 사람이 매일 돌아보며 정리하면 오래 못 가고, 한 곳에서만 긁으면 그 채널의 편향을 그대로 물려받는다.
수익화에도 함정이 있다. 제휴 마케팅 하나에만 기대면 제휴사 정책이 바뀌는 순간 통째로 흔들린다.
그리고 LLM으로 분석하면 비용이 수집량에 비례해 늘어난다. 6시간마다 수집하는 서비스에서 모든 분석을 비싼 모델로 돌리면 남는 게 없다.
접근
어떻게 풀었나- 수집을 엣지 크론으로 자동화했다. Cloudflare Cron Triggers가 6시간마다 전체 소스를 수집하고, 매주 월요일 아침 트렌드 리포트를 만든다. 서버를 따로 띄우지 않는다.
- 출구를 넷으로 나눴다. 같은 데이터에서 제휴 마케팅, 트렌드 리포트 구독, 광고·스폰서십, B2B API·데이터 판매로 수익 경로를 냈다. 한 채널이 막혀도 나머지가 남는다.
- 분석 비용을 티어로 나눴다. 무료 휴리스틱이 프롬프트 복잡도를 평가해 FAST·BALANCED·DEEP 세 티어 중 하나를 고른다. 단순 분류는 가장 싼 모델이 한다.
- 처음부터 검색·AI 인용 색인을 깔았다. 정보성 서비스는 발견되지 않으면 존재하지 않는 것과 같다. 프리렌더 데이터에 JSON-LD·robots·sitemap·
llms.txt를 붙였다.
주요 기능
사용자가 실제로 쓰는 것- 트렌드 수집 — 커뮤니티 알뜰구매 게시판, 해외 핫딜 RSS, 네이버 블로그·뉴스
- 트렌드 분석 — 수집한 게시물을 상품 단위로 묶어 분석
- 주간 트렌드 리포트 — 매주 월요일 09:00(KST) 자동 생성
- 딜 페이지 — 프리렌더된 상품·딜 정보, 정기 재빌드로 신선도 유지
- 요금제 — 구독 플랜 화면(결제 연동은 보류)
- B2B API — 트렌드 데이터 API
아키텍처
어떻게 구성돼 있나 Cloudflare Cron Triggers
0 */6 * * * → 전체 소스 수집
0 0 * * 1 → 주간 리포트 (월 09:00 KST)
│ scheduled
Cloudflare Workers (Hono, TypeScript) ── api.bestshop.azclab.com
├─ collectors (스크래핑·RSS·API)
├─ LLM 라우터 — 복잡도 6차원 평가 → FAST / BALANCED / DEEP
│ └ JSON 파싱 실패 시 상위 티어로 최대 2회 에스컬레이션
├─ payments (Stripe — 보류)
└─ API (CORS)
│
Neon Postgres (직접 연결, Drizzle ORM)
Next.js 정적 export ── Cloudflare Pages ── bestshop.azclab.com
GitHub Actions: 프리렌더 데이터 갱신용 정기 재빌드
관측: Sentry + Grafana Cloud기술적 의사결정
무엇을 고르고 무엇을 버렸나- 스케줄러를 엣지로 옮겼다. 수집은 Cloudflare Cron Triggers가 Workers를 직접 깨운다. GitHub Actions 워크플로는 수동 트리거 폴백으로만 남겼다 — 스케줄러가 두 곳에 있으면 같은 수집이 두 번 돈다.
- 복잡도 평가는 공짜로 한다. 길이·추론 필요성·기술 밀도·다단계 여부·도메인 깊이·데이터량 여섯 신호로 프롬프트를 평가해 티어를 고른다. 평가에 LLM을 쓰면 평가 비용이 절감액을 먹는다. 결과가 JSON으로 파싱되지 않으면 그때만 상위 티어로 올린다.
- 긴 시스템 프롬프트는 캐싱한다. Anthropic 모델을 쓸 때 시스템 프롬프트가 1,024자를 넘으면 프롬프트 캐싱을 켠다. 반복 분석에서 입력 비용이 크게 줄어든다.
- 비활성 소스를 지우지 않고 사유와 함께 둔다. 소스마다
isActive플래그와 비활성 사유를 남겼다. 키가 오거나 정책이 풀리면 플래그 하나로 다시 켠다. - 상품이 아닌 소스는 랭킹에서 뺐다. 해커뉴스·깃허브 트렌딩은 데이터는 잘 나오지만 상품이 아니라 랭킹을 오염시켜 껐다.
- 자체 모니터링을 걷어냈다. 처음엔 자체 SDK(
infra-agent-sdk)로 계측했지만 Sentry + Grafana Cloud로 전환했다. 직접 유지하는 비용이 기성 서비스보다 컸다.
결과
무엇이 달라졌나트렌드 사이트(bestshop.azclab.com)와 API가 운영 중이며, 6시간 주기 수집과 주간 리포트가 자동으로 돈다.
- 소스 9곳 중 3곳이 가동 중이다 — 커뮤니티 알뜰구매 게시판(스크래핑), 해외 핫딜 RSS(OzBargain), 네이버 블로그·뉴스(API).
- 나머지 6곳은 사유가 기록된 채 꺼져 있다 — 쿠팡 파트너스·아마존(키 미발급), 네이버 쇼핑(구 API 종료), 레딧(비OAuth 트래픽 차단), 디시인사이드(피드 폐지), 해커뉴스·깃허브(상품 아님).
- 수익 모델 4종 중 결제(Stripe)는 보류, 제휴(쿠팡 파트너스)는 키 대기로 아직 수익이 발생하지 않는다.
배운 점
다시 한다면설계는 네 갈래 수익화와 아홉 개 소스로 앞서 나갔지만, 실제 진도는 외부 의존성이 정했다. 쿠팡 파트너스 키, 레딧 앱 승인 정책, 네이버의 API 종료 — 코드로는 풀 수 없는 것들이다. 레딧은 앱 생성이 정책 확인 단계에서 계속 거부돼 보류했고, 대신 해외 트렌드 신호는 정식 RSS가 있는 OzBargain으로 확보했다. 외부 키·정책에 묶인 기능은 작게 먼저 열 수 있는 대체 경로를 같이 준비해 두는 게 맞다 — 막힌 것을 기다리는 동안 서비스는 돌아가야 한다.