3.4 KiB
3.4 KiB
뉴스 스킬과 퍼블리시 분리 아키텍처 계획
1. 현재 구조 (검증 완료)
- 기존 시스템: company-x_hompage - 완전 자동화된 뉴스 수집/게시
- rb8001 실행 중: Docker 상태 "Up 11 hours (healthy)" 확인
- DM 기능: /api/cron/daily-summary 구현, dm_skill.py:384 위치
- 재사용 가능: collectors 모듈 100%, ProcessLock(타임아웃 3600초), thumbnail_manager
2. 목표 아키텍처
- skill-news: 포트 8505 (51124 서버에서 운영 중)
- skill-publish: 포트 8511 (신규 구현 예정)
- 데이터 흐름: 수집 → 검증/요약 → DM 전송 → 사용자 선택 → 게시 → 결과 보고
3. 구현 계획
Phase 1: skill-news (1주차)
기존 코드 재사용 (company-x_hompage/src/):
- collectors/google_news_collector.py (100% 재사용)
- collectors/scrape_news_playwright.py (100% 재사용)
- collectors/summarize_news.py (100% 재사용)
- utils/process_lock.py (완전 구현됨 - PID 확인, 타임아웃, atexit)
- collectors/thumbnail_manager.py (이미지 처리)
새로 구현:
- Slack 인터랙션 핸들러 (rb8001 DMSkill 참조)
APScheduler 통합(rb8001에 이미 구현됨, 재사용)
Phase 2: skill-publish (2주차)
기존 코드 재사용 (company-x_hompage/src/publishers/):
- squarespace_login.py, squarespace_publisher.py
- post_formatter.py (중복 체크 로직 포함)
Phase 3: 통합 및 배포 (3주차)
Nginx 설정 [확인 필요]:
- 현재 skill-email(8501)만 설정됨
- skill-news, skill-publish 라우팅 추가 필요
Slack App 권한:
- 확인됨: chat:write (mrkdwn, Block Kit 지원)
- 추가 필요 여부: files:write, users:read [확인 필요]
4. 데이터베이스 (확인됨)
PostgreSQL (51123 서버):
- main_db 사용 (구 auth_db)
- users, gmail_tokens, robeing_stats 테이블 존재
ChromaDB (51124 서버):
- 포트 8000, 경로 /app/data/chroma
- 벡터 기반 중복 체크 구현됨
신규 테이블 필요:
CREATE TABLE rb_news (
id UUID PRIMARY KEY,
keyword VARCHAR(100),
title TEXT,
url TEXT UNIQUE,
status VARCHAR(50) -- collected, selected, published
);
5. API 엔드포인트
skill-news:
- POST /collect: 뉴스 수집 (Cron 트리거)
- GET /news/{date}: 날짜별 조회
- POST /slack/interactive: 버튼 응답
skill-publish:
- POST /publish: 선택 뉴스 게시
- GET /status/{id}: 게시 상태
6. 확인된 구현 사항
- 브리핑 시스템: rb8001/app/skills/dm_skill.py 구현됨
- APScheduler: rb8001에 이미 구현 (평일 09:00 스케줄링)
- 사용자 목록: 하드코딩 3명 확인 (DB 연동 필요)
- Gmail 토큰 갱신: 2025-08-27 해결 완료
- ProcessLock: 완전 구현 (PID 확인, 타임아웃 3600초, atexit)
- 서버 분리: 51123(메인), 51124(로빙/스킬) 물리적 분리
- Gemini 모델: 환경변수 GEMINI_MODEL로 통일 (gemini-2.5-flash-lite)
7. 확인 필요 사항
- Nginx 라우팅: skill-news(8505), skill-publish(8511) 프록시 설정
- Slack 추가 권한: files:write, users:read 필요 여부
8. 일정 (현실적 추정)
- 1주차: skill-news 구현 (코드 90% 재사용으로 충분히 가능)
- 2주차: skill-publish + Slack 통합
- 3주차: 테스트 및 배포