HOW IT WORKS
뉴스 수집부터 인사이트 노출까지, 전체 파이프라인을 처음부터 끝까지 단계별로 설명합니다.
160+
RSS 채널
Global / China / Japan
120
일일 후보
→ 정밀 70개
14
Taxonomy
Insight 카테고리
3
Gemini 모델
2.5/2.0/1.5 폴백
2
푸시 시간대
오전 8시 · 오후 2시
📌 한눈에 보는 전체 흐름
1
데이터 수집 — RSS Crawler
매일 새벽 자동 실행 · 뉴스와 커뮤니티를 분리 수집
channels.json 에 정의된
3개 카테고리(Global Innovation / China & East Asia / Japan & Robotics)의
160여 개 RSS 피드를 ThreadPoolExecutor(max_workers=30) 으로 병렬 호출합니다.
media_content →
media_thumbnail →
enclosure → links → HTML img tag) 로 탐색하고,
추적용 1×1 픽셀·analytics 도메인은 자동 제외합니다.
⚠️ 수집 실패한 채널은 로그로 남기되 파이프라인 전체는 멈추지 않습니다.
네트워크 타임아웃은 10s 로 고정.
2
1차 후보 압축 — Pre-filtering
전략 키워드 기반 사전 점수 · 매체 다양성 보장
+3점.
3
커뮤니티 화제 키워드 추출
병렬 파이프라인 · 단일 Gemini 호출로 비용 최소화
커뮤니티는 개별 분석 대신 제목 400개를 한 번에
gemini-2.5-flash 에 던져 "지금 가장 논쟁/화제가 되는 고유명사 15개"만
뽑아냅니다.
Counter.most_common(15) 추출.
community_buzz/{today} 컬렉션에
버즈 키워드 + buzz_score 상위 30개 포스트(한국어 번역 포함)를 저장합니다.
4
2단계 AI 채점 파이프라인
경량 → 정밀, 토큰 비용을 70% 절감하는 핵심 단계
gemini-2.5-flash-lite{"score": 0~100} 만max_workers=30, 0.05~0.5초 지터gemini-2.5-flash (503 발생 시 2.0-flash 폴백)max_workers=8 (Rate Limit 보호)DEFAULT_FILTER_PROMPT + 전략 태그 풀 + 14개 카테고리 목록📤 2단계 결과로 받는 필드
🗂️ Insight Category 14종
5
Composite Score 합성
AI 기본 점수 + 가산점 3종 = 최종 점수
+5 (사이드바에서 0~15 조정 가능)
+3
(최대 3건까지)
+5
· 50점 미만은 최종 풀에서 자동 탈락 · 가중치는 사이드바 🛠️ 고급 설정에서 실시간 조정 가능
6
중복 보도 dup_count 집계
여러 매체가 동시 보도한 기사를 하나로 묶기
difflib.SequenceMatcher 로 기존 풀과의
제목 유사도를 측정하고, 링크가 동일하거나 유사도 ≥ 0.65 일 때
하나로 합치며 dup_count 를 누적합니다.
7
Firestore 저장 + 오늘의 인사이트 생성
데이터 저장 직후 IT 기획자 관점 인사이트를 자동 생성
📚 Firestore 컬렉션 구조
morning_sensing/{YYYY-MM-DD} · 그날 분석된 전체 기사morning_sensing/latest · 최신 120개 (대시보드 첫 로딩용)community_buzz/{YYYY-MM-DD} · 핫 키워드 + 상위 30개 포스트(한국어 번역)daily_insights/{YYYY-MM-DD} · 인사이트 3개 + 근거 팩트
🧠 오늘의 인사이트 생성 로직
[{"insight":"...", "facts":["…","…","…"]}, …] 형태 3개2.5-flash → 2.0-flash → 1.5-flash 폴백 (최대 5회 재시도)
8
PWA 푸시 알림 발송
Railway Cron이 하루 두 번 자동 푸시
send_push.pymorning_sensing/latest 의 Top 1 기사 + 오늘의 인사이트 1개push_subscriptions · Web Push API (VAPID)9
프론트엔드 · 사용자 인터랙션
Reflex로 만든 통합 SPA · 6가지 뷰 모드
10
운영 · 인프라 스택
한 명이 유지보수할 수 있도록 단순하게 설계
batch.py 모닝 파이프라인 ·
send_push.py 푸시 발송 ·
regen_insight.py 인사이트 재생성
2.5-flash → 2.0-flash → 1.5-flash ·
임베딩 gemini-embedding-001 (768dim, REST 직접 호출)