- skill-publish 포트 8511 구현 완료
- 트러블슈팅 문서 링크 추가
- 완료된 작업 체크 표시 (✅)
- JSON 파일 기반 구현 완료
- 줄 수 유지, 중복 제거
86 lines
3.7 KiB
Markdown
86 lines
3.7 KiB
Markdown
# 뉴스 스킬과 퍼블리시 분리 아키텍처 계획
|
|
|
|
## 1. 현재 구조 (검증 완료)
|
|
- **기존 시스템**: company-x_hompage - 완전 자동화된 뉴스 수집/게시
|
|
- **rb8001 실행 중**: Docker 상태 "Up 11 hours (healthy)" 확인
|
|
- **DM 기능**: /api/cron/daily-summary 구현, dm_skill.py (577라인)
|
|
- **재사용 가능**: collectors 모듈 100%, ProcessLock(타임아웃 3600초), thumbnail_manager
|
|
|
|
## 2. 목표 아키텍처
|
|
- **skill-news**: 포트 8505 (51124 서버 **정상 운영** 확인)
|
|
- **skill-publish**: 포트 8511 (**구현 완료** - [트러블슈팅](../troubleshooting/250906_skill_publish_implementation.md))
|
|
- **데이터 흐름**: 수집 → 검증/요약 → DM 전송 → 사용자 선택 → 게시 → 결과 보고
|
|
|
|
## 3. 구현 계획
|
|
|
|
### Phase 1: skill-news (✅ 운영 중)
|
|
**기존 코드 재사용 (company-x_hompage/src/)**:
|
|
- collectors/google_news_collector.py (100% 재사용)
|
|
- collectors/scrape_news_playwright.py (100% 재사용)
|
|
- collectors/summarize_news.py (✅ Gemini 2.5-flash-lite 전환)
|
|
- utils/process_lock.py (완전 구현됨)
|
|
- collectors/thumbnail_manager.py (이미지 처리)
|
|
|
|
**새로 구현**:
|
|
- Slack 인터랙션 핸들러 (rb8001 DMSkill 참조)
|
|
- ~~APScheduler 통합~~ (✅ rb8001에 이미 구현됨)
|
|
|
|
### Phase 2: skill-publish (✅ 완료)
|
|
**구현 상세**: [트러블슈팅 문서](../troubleshooting/250906_skill_publish_implementation.md) 참조
|
|
|
|
### Phase 3: 통합 및 배포 (3주차)
|
|
**통신 방식**:
|
|
- 내부: Docker 네트워크 (rb8001 ↔ skill-*)
|
|
- skill-news: 포트 8505 (운영 중)
|
|
- skill-publish: 포트 8511 (구현 예정)
|
|
- Nginx 프록시: 외부 노출 불필요 (내부 통신만)
|
|
|
|
**Slack App 권한**:
|
|
- 확인됨: chat:write (mrkdwn, Block Kit 지원)
|
|
- 추가 필요 여부: files:write, users:read [확인 필요]
|
|
|
|
## 4. 데이터베이스 (확인됨)
|
|
**PostgreSQL (51123 서버)**:
|
|
- main_db 사용 (구 auth_db)
|
|
- users, gmail_tokens, robeing_stats 테이블 존재
|
|
- ~~rb_news 테이블~~: DB 작업 후 구현 예정
|
|
|
|
**ChromaDB (51124 서버)**:
|
|
- 경로: /home/admin/ivada_project/rb8001/chroma_db (확인됨)
|
|
- 16개 사용자별 UUID 컬렉션 존재
|
|
|
|
**데이터 저장 방식**:
|
|
- 단기: JSON 파일 기반 (`/app/data/news_state.json`)
|
|
- Slack 메시지 ID에 뉴스 ID 임베드
|
|
- ChromaDB로 중복 체크
|
|
- 향후: PostgreSQL rb_news 테이블로 마이그레이션 계획
|
|
|
|
## 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 스케줄링)
|
|
- **사용자 목록**: Slack ID .env 미설정 (DB 연동 필요)
|
|
- **Gmail 토큰 갱신**: ✅ 2024-08-27 해결 완료
|
|
- **ProcessLock**: ✅ 완전 구현 (PID 확인, 타임아웃 3600초, atexit)
|
|
- **서버 분리**: ✅ 51123(메인), 51124(로빙/스킬) 물리적 분리
|
|
- **Gemini 모델**: ✅ 환경변수 GEMINI_MODEL로 통일 (gemini-2.5-flash-lite)
|
|
- **skill-publish**: ✅ 포트 8511 구현 완료 ([상세](../troubleshooting/250906_skill_publish_implementation.md))
|
|
|
|
## 7. 즉시 필요 작업
|
|
- **데이터 저장**: ✅ JSON 파일 기반 구현 완료
|
|
- **Slack 사용자 ID**: .env 설정 필요 (51124)
|
|
- **내부 통신**: ✅ 포트 8511 HTTP API 준비 완료
|
|
|
|
## 8. 일정 (완료 상태)
|
|
- **1주차**: ✅ skill-news 운영 중 (포트 8505)
|
|
- **2주차**: ✅ skill-publish 구현 완료 (포트 8511)
|
|
- **3주차**: Slack 통합 및 rb8001 연동 예정 |