NewsLetterPlatform

Newsletter Platform · Multi-tenant Dispatch Hub

AllergyInsight 등 다른 서비스의 콘텐츠를 수신하여 뉴스레터를 생성·발송하는 중앙 뉴스레터 허브 플랫폼

Features
System Architecture
수집 이후 데이터 연동 — 관제 흐름도
① 소스 수집 — 원본 서비스 REST API
AllergyInsight Backend :9040
알러지 뉴스·논문 (HealthPulse 통합)
daily 07:30 수집
SkillRadar Backend :9070
AI 교육과정·세미나·정책·뉴스 큐레이션
daily 06:30 · weekly 금 06:00 수집
httpx · X-Newsletter-Key
수집·정규화
APScheduler cron 트리거 → collected_data upsert 캐시 + history 이력 보관 (원본 DB 직접 접근 없음)
② 데이터 연동·가공 — 수집본을 구독자 맞춤 콘텐츠로
중복 제거
article_key 지문 · 최근 7일 dedup 풀 — 이미 발송한 기사 재탕 차단
페르소나 적응 AllergyInsight
구독자 역할(페르소나)·관심 알러젠 기준으로 같은 수집본에서 콘텐츠 선택·변형
AI 심층 분석 TechBriefing
스코어링 Top-N 선별 → 로컬 Ollama(qwen2.5-coder) 4섹션 심층 카드 생성
③ 뉴스레터 구성·발송 — 구독자에게 전달
템플릿 렌더링
Jinja2 — 테넌트 브랜드·발송 타입(daily/weekly/monthly)별 HTML 구성
SendPlan 수립
발송 대상 확정·트랜잭션 분리·실패 재시도 계획
SMTP 발송
Gmail SMTP — 구독 해지(RFC 8058)·열람 픽셀·클릭 추적 링크 삽입
구독자 수신
AllergyInsight daily 08:30 · TechBriefing daily 08:00 / weekly 금 09:30
📡 관제 Observability 콘텐츠 헬스 /api/health/content — 신선도·중복 감시 발송 이력 — 성공/실패·재시도 추적 Engagement /e/* — 열람·클릭·피드백 회수 Slack 경보 — 수집·발송 이상 통지 휴일 정책 — 휴일 스킵·영업일 catch-up
AllergyInsight — 알러지 브리핑 구성 원리
  1. 수집 — HealthPulse 통합 알러지 뉴스·논문을 REST API로 수신해 캐싱
  2. 선별 — article_key 지문으로 최근 7일 발송분과 중복 제거
  3. 변형 — 구독자 페르소나(환자·보호자·의료인 등)와 관심 알러젠에 맞춰 동일 수집본에서 콘텐츠 선택·심도 조정
  4. 구성 — 뉴스·논문 카테고리 섹션 + 페르소나 맞춤 요약으로 daily 발송, 주간/월간은 이력 집계 Summary
TechBriefing — AI 학습·커리어 브리핑 구성 원리
  1. 수집 — SkillRadar가 큐레이션한 AI 교육과정·세미나·정책·뉴스를 수신
  2. 선별 — 스코어링 기반 focused Top-N 항목 선정 (7일 dedup)
  3. 분석 — 로컬 Ollama(qwen2.5-coder)가 항목별 4섹션 심층 카드 생성: 무엇인지 · 누구에게 유익한지 · 추천 의견 · 실행 팁
  4. 구성 — 일일 브리핑 + 주간 결산(월~금 이력 집계·공개 통계)으로 발송
Tech Stack
Jinja2 + HTMX FastAPI Python 3.12+ SQLite (SQLAlchemy 2.0) APScheduler Gmail SMTP (smtplib) Docker Compose
Connected Services