데일리 브리핑

Blog Writing Automation System

RSS 뉴스를 수집하여 Gemini AI로 한국어 데일리 브리핑 블로그 포스트를 자동 생성하는 시스템.

Tech Stack

프로젝트 구조

scripts/          # Python 핵심 로직
  main.py         # 오케스트레이션 (fetch → generate → publish)
  fetch_news.py   # RSS 수집 및 키워드 기반 카테고리 분류
  generate_post.py # Gemini API로 블로그 포스트 생성
  notify_telegram.py # 텔레그램 알림 (단일 요약 메시지)
config/
  rss_feeds.yaml  # RSS 피드 소스 및 카테고리/키워드 설정
_posts/YYYY/MM/DD/  # 생성된 블로그 포스트 (날짜별 하위 디렉토리)
_layouts/
  default.html    # 공통 레이아웃 (헤더/푸터/테마 토글)
  post.html       # 글 상세 레이아웃
assets/css/
  style.css       # 전체 스타일 (디자인 토큰 기반, 단일 파일)
index.html        # 글 목록 — 토픽 탭 + 날짜 선택 + 시간대별 묶음
categories.html   # 카테고리 페이지
tags.html         # 태그 페이지
.github/workflows/
  daily-blog.yml      # 자동 포스트 생성 워크플로우
  jekyll-gh-pages.yml # Jekyll 빌드 및 Pages 배포

실행 방법

# 로컬 실행
pip install -r requirements.txt
export GEMINI_API_KEY="your-key"
python scripts/main.py

# Jekyll 로컬 서버
bundle install
bundle exec jekyll serve

환경 변수 (GitHub Secrets)

핵심 아키텍처

  1. 시간 윈도우 기반 수집: 각 실행 시간에 따라 이전 N시간 뉴스 수집 (08시=9h, 13/18/23시=5h)
  2. 4개 토픽: IT(it), 주식증시(stock), 경제금융(economy), 정치사회(politics) — 각 토픽별 키워드 기반 서브카테고리 분류 (config/rss_feeds.yaml의 topics)
  3. Gemini Fallback: 2.5 Flash → 2.0 Flash → 2.0 Flash Lite 순차 시도, 모델당 3회 재시도 + 지수 백오프
  4. 자동 발행: 포스트 생성 → git commit → GitHub Pages 자동 배포

포스트 규칙

프론트엔드 규칙

코딩 규칙