데일리 업데이트: 어제의 Hacker News Show Section 제품 만들기
요약
Hacker News의 'Show HN' 게시물을 자동으로 수집하여 요약된 데일리 업데이트 제품으로 변환하는 파이프라인 구축 가이드입니다. Algolia API와 Firebase API를 활용한 데이터 추출부터 자동화된 Markdown 생성까지의 과정을 다룹니다.
핵심 포인트
- Algolia Search API를 활용한 효율적인 Show HN 데이터 쿼리 방법
- Hacker News Firebase API를 통한 상세 아이템 정보 획득
- 데이터 수집을 위한 API 활용과 스크래핑(BeautifulSoup)의 차이점
- 자동화된 데일리 다이제스트 파이프라인 구축 프로세스
개발자, 창업자, 그리고 AI 빌더들을 위해 전날의 Hacker News "Show HN" 게시물을 세련되고 공유 가능한 제품으로 변환하는 실용적인 코드 중심 가이드입니다.
1️⃣ "Show HN"이 중요한 이유 - 그리고 데일리 업데이트가 포함해야 할 내용
Show HN 섹션은 Hacker News에서 가장 활기찬 구석입니다. 매일 수십 명의 창업자가 프로토타입을 출시하고, AI 연구자들이 데모를 공유하며, 엔지니어들이 차세대 오픈 소스 핵심 도구가 될 수 있는 툴링을 게시합니다. 큐레이션된 데일리 다이제스트(Daily digest)는 다음과 같은 가치를 제공합니다:
| 지표 | 일반적인 어제 (2024-07-31) | 가치가 있는 이유 |
|---|---|---|
| 새로운 Show HN 게시물 | 27 | 놓치기 쉬운 신선한 아이디어 |
| ... |
따라서 **데일리 업데이트 제품 (daily update product)**은 다음과 같은 내용을 전달해야 합니다:
- 헤드라인 목록 (제목, 작성자, 추천 수, 댓글 수).
- 각 항목에 대한 한 문장 요약 (TL;DR) (생성 또는 큐레이션됨).
- 소스 코드, 데모 또는 관련 자산으로 연결되는 직접 링크.
- 가장 많이 논의된 게시물에 대한 선택적 AI 강화 요약 (AI-enhanced summary).
아래에서는 어제의 Show HN 항목을 가져와서 내용을 풍부하게 만들고, 매일 UTC 기준 08:00에 공유 가능한 Markdown 파일을 게시하는 **완전 자동화된 파이프라인 (fully automated pipeline)**을 구축할 것입니다.
2️⃣ 어제의 Show HN 데이터 가져오기 - "스크래핑(Scrape) vs API" 결정
2.1 공식 HN Firebase API
Hacker News는 빠르고 무료인 **읽기 전용 Firebase 엔드포인트 (read-only Firebase endpoint)**를 제공합니다:
GET https://hacker-news.firebaseio.com/v0/item/<id>.json
주의사항: 먼저 **아이템 ID (item IDs)**가 필요합니다. 가장 쉬운 방법은 전체 텍스트 쿼리 및 날짜 필터를 지원하는 Algolia Search API (공개용, 인증 불필요)를 사용하는 것입니다.
예시: 2024-07-31의 Show HN 게시물 쿼리
curl "https://hn.algolia.com/api/v1/search_by_date?tags=show_hn&numericFilters=created_at_i>1724976000,created_at_i<1725062400"
created_at_i는 Unix 타임스탬프 (초 단위)입니다.- 위 범위는 2024-07-31 00:00 UTC -> 23:59 UTC에 해당합니다.
응답은 hits 배열을 포함하는 JSON 객체입니다. 각 hit에는 다음이 포함됩니다:
{
"title": "Show HN: 나의 AI 기반 PDF 요약기",
"url": "https://github.com/you/pdf-summarizer",
...
2.2 폴백 스크래핑 (Fallback Scraping) (API 제한에 도달했을 때)
Algolia는 IP당 **시간당 10,000번의 요청 (requests)**을 허용하며, 이는 단일 일일 작업(daily job)을 수행하기에 충분한 양입니다. 만약 직접 스크래핑(예: 숨겨진 필드 추출)이 필요한 경우에는 BeautifulSoup + requests를 사용하세요:
import requests, bs4, datetime
def fetch_show_hn(page=1):
...
Tip: Algolia 경로를 사용하는 것이 권장됩니다 (preferred). 왜냐하면 정확한 타임스탬프 (timestamps)를 반환하며 HN의 robots.txt를 준수하기 때문입니다. 스크래핑은 폴백 (fallback) 용도로만 사용하거나, Algolia를 통해 노출되지 않는 필드(예: 숨겨진 "poll" 게시물)를 위해 사용하세요.
3️⃣ 원시 데이터 풍부화 (Enriching the Raw Data) - TL;DR 생성 및 도메인 추출
이제 원시 Show HN 아이템 리스트를 확보했습니다. 다음 단계는 **가치를 더하는 것 (add value)**입니다: 간결한 TL;DR, 도메인 태그, 그리고 선택적으로 가장 댓글이 많은 게시물에 대한 짧은 AI 생성 요약을 추가하는 것입니다.
3.1 OpenAI (또는 모든 LLM)를 통한 TL;DR 생성
우리는 OpenAI의 gpt-4o-mini 모델을 사용할 것입니다. 이 모델은 저렴하며 (1k 토큰당 ≈ $0.00015) 속도가 빠릅니다. 비용을 낮게 유지하기 위해 프롬프트 (prompt)는 최소한으로 구성합니다:
import openai, os, textwrap
openai.api_key = os.getenv("OPENAI_API_KEY")
...
(속도 제한 (rate limits)을 넘지 않기 위한) **배치 처리 (Batch processing)**는 asyncio.gather를 사용하여 수행할 수 있습니다. 27개 아이템의 경우 총 비용은 약 $0.004로, 무시할 수 있는 수준입니다.
3.2 도메인 태깅 (Domain Tagging)
from urllib.parse import urlparse
def extract_domain(url):
...
3.3 "가장 많이 논의된" 게시물 강조하기
num_comments가 가장 높은 항목을 선택하고, 해당 게시물의 상위 3개 댓글에 대한 200단어 AI 요약을 생성할 것입니다.
def top_discussed(hits):
return max(hits, key=lambda h: h['num_comments'])
...
4️⃣ 풍부화된 데이터를 게시 가능한 마크다운 다이제스트 (Markdown Digest)로 변환
# 📅 Show HN - {YYYY-MM-DD} 다이제스트
_{timestamp_utc}에 자동 컴파일됨_
...
4.1 Jinja2 (Python)를 이용한 렌더링 (Rendering)
from jinja2 import Template
...
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기