실전 가이드 · 3분 · 06.26

18년치 HN 댓글 48GB를 인덱싱해 첫 글로 1면 — Google Trends for HN 레시피 분해

loopy vibecoder

핵심 요약 (TL;DR)

HN 계정 ytkimirti가 2007년부터 2025년까지 18년치 Hacker News 댓글 약 48GB 아카이브를 Upstash Redis Search로 인덱싱하고, LLM이 "shock value" 휴리스틱으로 흥미로운 비교어를 자동 큐레이션하는 hackernewstrends.com을 만들었습니다. 본인의 첫 HN 게시물이 그대로 6월 25일 1면 #12(614pts·143댓글)로 직행했고, Upstash 백엔드는 트래픽 폭주로 일시 다운됐습니다. "데이터셋은 있는데 무엇을 만들지 모르겠다"는 흔한 막힘에 대한 가장 깔끔한 답안이 이 사례에 들어 있습니다.

"공개 아카이브 + LLM 한 줄 휴리스틱"이라는 발견

hackernewstrends.com은 Google Trends를 그대로 HN 코멘트에 옮긴 도구입니다. 키워드 두 개를 넣으면 18년치 시계열로 비교되고, 그래프를 누르면 그 시점에 실제로 쓰인 댓글로 점프합니다. 별도의 "Who is Hiring?" 페이지에서는 매월 채용 글에 언급된 프로그래밍 언어 분포가 시계열로 시각화됩니다. 도구의 신박함은 시각화가 아니라 그 위에 얹은 LLM 자동 큐레이션에 있습니다. "어떤 두 단어를 비교해 보여줄까"라는 가장 어려운 UX 문제를 사람이 풀지 않고, LLM에게 "흥미도가 높은 비교 쌍을 골라라"는 한 줄 휴리스틱으로 위임했습니다. "crypto vs AI" 같은 사전 비교 예시가 SNS에서 스크린샷으로 돌면서 2차 확산이 일어난 이유죠.

이 모델이 강력한 이유는 데이터 자체가 아니라 데이터 위에 얹힌 "재미의 자동 발견"에 있습니다. 18년치 댓글은 누구나 받을 수 있는 공개 아카이브입니다. 차별점은 그 안에서 사람이 일일이 비교어를 짤 시간이 없을 때, LLM이 "shock value" 같은 모호한 기준 하나만 주면 수백 개를 자동으로 뽑아내준다는 발견입니다.

5단계로 분해한 레시피

이 사례를 자기 데이터셋에 그대로 옮기고 싶다면 다섯 단계가 충분합니다.

1단계: 공개 아카이브 입수. Hacker News의 경우 BigQuery에 풀 덤프가 있고, 본인은 별도로 약 48GB 분량을 다운로드해 사용했습니다. 자기 도메인이라면 위키 덤프, Reddit Pushshift, GitHub 코멘트, 의회 회의록처럼 시계열로 길이가 긴 텍스트가 좋은 후보입니다.

2단계: 청크 인덱싱. ytkimirti는 Upstash Redis Search를 백엔드로 썼습니다. 전체 텍스트 검색에 시계열 메타데이터를 얹는 구조라면 Postgres 풀텍스트, Meilisearch, Typesense도 같은 자리에 들어갈 수 있습니다. 핵심은 "키워드 + 시점"을 빠르게 그루핑할 수 있는 구조면 됩니다.

3단계: 사람이 안 짜는 UI. Google Trends처럼 자유 입력만 받지 말고, "추천 비교 쌍"을 메인에 깔아야 첫 5초가 살아납니다. 여기에 LLM을 끼우는 것이 이 사례의 결정적 차이입니다.

4단계: LLM 휴리스틱 한 줄. 프롬프트는 단순합니다. "이 도메인에서 비교했을 때 shock value가 큰 키워드 쌍 200개를 뽑아라." 모델명은 본인이 공개하지 않았지만, Claude나 GPT 어느 쪽이든 같은 휴리스틱으로 비슷한 결과가 나옵니다. 결과는 1회만 돌리고 캐시하면 비용도 부담 없습니다. 의사 코드로 적으면 이렇습니다.

prompt = (
    f"From {domain_corpus}, propose 200 keyword pairs with high"
    " 'shock value' when compared on a time-series chart. Return JSON."
)
pairs = llm.complete(prompt, max_tokens=4000)
cache.set('featured_pairs', pairs, ttl=7*86400)

5단계: 다운에 대비한 인프라. ytkimirti의 사이트는 1면 트래픽으로 "hug of death"에 걸려 일시 다운됐습니다. 출시 직전에는 캐시 헤더, CDN, rate limit 정도는 미리 깔아두는 것이 좋습니다. 처음 24시간을 못 버티면 발견 자체가 사라집니다.

무엇을 가져가야 할까

이 레시피의 본체는 "데이터 + 검색 + LLM 휴리스틱 + 추천 카드"입니다. 자기 도메인의 공개 텍스트 코퍼스 위에 같은 네 줄을 깔면, 첫 출시가 1면을 가져가는 시나리오가 비현실적이지 않다는 것을 ytkimirti의 결과가 살아 있는 형태로 증명합니다. 데이터셋이 없어서 못 만든다고 말하기 전에, 이미 18년치 공개 아카이브 옆에서 LLM이 비교어를 골라줄 준비를 마치고 기다리고 있다는 사실을 떠올려 볼 만합니다.

자주 묻는 질문 (FAQ)

Q. 어떤 LLM을 써야 하나요?
ytkimirti는 모델명을 공개하지 않았습니다. 다만 "흥미도 큰 비교 쌍 뽑기" 정도의 휴리스틱은 모델 간 격차가 크지 않습니다. 가장 저렴한 일반 모델로 시작해도 충분히 동작합니다.

Q. Upstash가 아니라 다른 검색 인프라로도 가능한가요?
네. 시계열 메타데이터를 함께 인덱싱할 수 있는 검색엔진이면 됩니다. Postgres의 tsvector, Meilisearch, Typesense, Elastic 모두 자리를 차지할 수 있습니다.

Q. 첫 출시에서 트래픽 폭주는 어떻게 막나요?
정적 페이지는 CDN으로 캐시하고, 검색 호출에는 IP 단위 rate limit과 결과 캐시를 깔아두세요. 백엔드가 다운되면 그래프 한 장이라도 보여줄 수 있게 "마지막 정상 결과"를 클라이언트에 함께 내려두는 것이 안전합니다.

0

댓글 0

아직 댓글이 없습니다