Repository navigation
Architecture
βMinjung edited this page Sep 26, 2026
·
3 revisions
HackDigestμ ν΅μ¬μ 5λ¨κ³ νμ΄νλΌμΈμ λλ€:
βββββββββββββββ βββββββββββββββ βββββββββββββββ βββββββββββββββ βββββββββββββββ
β 1. FETCH ββββββΊβ 2. RANK ββββββΊβ 3. SUMMARIZEββββββΊβ 4. CACHE ββββββΊβ 5. DELIVER β
β (fetchers) β β (scoring) β β (Groq LLM) β β (JSON file) β β (Gmail SMTP)β
βββββββββββββββ βββββββββββββββ βββββββββββββββ βββββββββββββββ βββββββββββββββ
cronjob.io (λ§€μΌ KST 10:15)
β
βΌ workflow_dispatch
GitHub Actions Workflow (daily-digest.yml)
β
βββ 1. 보μ μ€μΊ (security-scan job)
β βββ νλμ½λ©λ μν¬λ¦Ώ κ²μ¬
β
βββ 2. μΊμ 볡μ (GitHub Actions Cache)
β βββ data/cache/ λλ ν 리
β
βββ 3. νμ΄νλΌμΈ μ€ν (python -m src.main)
β
βββ ꡬλ
μ λ‘λ (subscribers.json)
β
βββ (topic, language) μ‘°ν© κ³μ°
β μ: (tech, ko), (stocks, en), (realestate, ko)
β
βββ Fetch: ν ν½λ³ κΈ°μ¬ μμ§
β βββ tech: Hacker News API β μμ 50κ° νν°λ§ β Top 5
β βββ stocks(en): Yahoo Finance RSS
β βββ stocks(ko): Google News Korea RSS
β βββ realestate(en): Zillow + HousingWire + CNBC RSS
β βββ realestate(ko): Google News Korea RSS
β
βββ Summarize: μΊμ λ―Έμ€ κΈ°μ¬λ§ Groq API νΈμΆ
β βββ trafilaturaλ‘ κΈ°μ¬ λ³Έλ¬Έ μΆμΆ
β βββ 3000μ μ ν β Groq qwen/qwen3.8-27b
β βββ μΈμ΄λ³ ν둬ννΈ (νκ΅μ΄: μΊμ£ΌμΌ λΈλ‘κ±°, μμ΄: casual)
β βββ Rate limit μ μ§μ λ°±μ€ν μ¬μλ (μ΅λ 3ν)
β βββ μ€ν¨ μ Google Translate ν΄λ°±
β
βββ Cache: κΈ°μ¬ + μμ½ JSON μ μ₯
β
βββ Deliver: ꡬλ
μλ³ μ΄λ©μΌ λ°μ‘
βββ λ¨μΌ SMTP μ°κ²°λ‘ λͺ¨λ μ΄λ©μΌ μ²λ¦¬
βββ HTML ν
νλ¦Ώ: λͺ¨λ°μΌ μΉνμ
βββ ꡬλ
ν΄μ§ λ§ν¬ ν¬ν¨
βββ μ€ν¨ μ λ€μ ꡬλ
μλ‘ κ³μ
ββββββββββββββββββββββββ
β ꡬλ
νμ΄μ§ β
β (GitHub Pages) β
β docs/index.html β
ββββββββββββ¬ββββββββββββ
β POST (μ΄λ©μΌ, μΈμ΄, ν ν½)
βΌ
ββββββββββββββββββββββββ
β Cloudflare Worker β
β worker/src/index.js β
β β
β β CORS κ²μ¦ β
β β Rate limiting β
β β μ
λ ₯ κ²μ¦ β
β β μ΄λ©μΌ κΈΈμ΄ μ ν β
ββββββββββββ¬ββββββββββββ
β repository_dispatch
βΌ
ββββββββββββββββββββββββ
β GitHub Actions β
β subscribers.yml β
β β
β β subscribers.json β
β μ μΆκ°/μμ β
β β νμ μ΄λ©μΌ λ°μ‘ β
β β λ³κ²½μ¬ν 컀λ°+νΈμ β
ββββββββββββββββββββββββ
-
μμ€: Hacker News API (
hacker-news.firebaseio.com) - λ°©μ: Top Stories β μμ 50κ° fetch β λΉκΈ°μ νν°λ§ β μ μμ Top 5
- νν°λ§: μ μΉ, μ€ν¬μΈ , λ€μ΄μ΄νΈ, μ λͺ μΈ λ± λΉκΈ°μ ν€μλ μ μΈ
- μμ΄: Yahoo Finance RSS
-
νκ΅μ΄: Google News Korea (
μ£Όμ+μ½μ€νΌ+μ½μ€λ₯,μ¦μ+μ£Όκ°+μμ₯) - νν°λ§: μ£Όμ/μμ₯ κ΄λ ¨ ν€μλ λ§€μΉ (μμ΄/νκ΅μ΄ λ³λ ν¨ν΄)
- μμ΄: Zillow Research + HousingWire + CNBC Real Estate RSS
-
νκ΅μ΄: Google News Korea (
λΆλμ°+μννΈ+λ§€λ§€,λΆλμ°+μ μΈ+λΆμ) - νν°λ§: λΆλμ° κ΄λ ¨ ν€μλ λ§€μΉ
data/cache/
βββ articles_{topic}.json # κΈ°μ¬ μΊμ (ν ν½λ³)
βββ summaries_{language}.json # μμ½ μΊμ (μΈμ΄λ³)
- GitHub Actions Cacheλ₯Ό μ¬μ©νμ¬ μΌκ° μΊμ
- κ°μ κΈ°μ¬κ° μ¬λ¬ ꡬλ μμκ² λ°μ‘λ λ μ€λ³΅ API νΈμΆ λ°©μ§
- μμ½μ μΈμ΄λ³λ‘ μΊμ (νκ΅μ΄ μμ½κ³Ό μμ΄ μμ½μ λ³λ)
- μΊμ ν€:
hackdigest-v2-{run_id}(μ€νλ§λ€ μ μΊμ μμ±, μ΄μ μΊμμμ 볡μ)
| λ μ΄μ΄ | λ³΄νΈ |
|---|---|
| Cloudflare Worker | CORS origin μ ν, Rate limiting (λΆλΉ 5건, μκ°λΉ 20건), νλ νμ΄νΈλ¦¬μ€νΈ, Body ν¬κΈ° μ ν (1KB) |
| GitHub Actions | νλμ½λ© μν¬λ¦Ώ μ€μΊ, Bandit μ μ λΆμ |
| μ΄λ©μΌ | URL sanitization (http/httpsλ§), HTML escape |
| ꡬλ μ κ΄λ¦¬ | μ΅λ 500λͺ μ ν, μ΄λ©μΌ νμ κ²μ¦ |