- 7-8월 초기 구축 문서 12개를 _archive/troubleshooting/2025_07-08_initial_setup/로 이동 - book/300_architecture/390_human_in_the_loop_intent_learning.md를 journey/research/intent_classification/로 이동 (개발 여정 문서) - 빈 폴더 제거 (journey/assets/*)
4.1 KiB
4.1 KiB
뉴스 스킬과 퍼블리시 분리 아키텍처 계획
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 (구현 완료 - 트러블슈팅)
- 데이터 흐름: 수집 → 검증/요약 → DM 전송 → 사용자 선택 → 게시 → 결과 보고
3. 구현 계획
Phase 1: skill-news (⚠️ 불완전 구현 발견)
2025-09-07 개선사항:
- ✅ rb8001 → skill-news POST 파라미터 전달
- ✅ 중복 체크 collector 내부로 이동 (엔드포인트 제거)
- ✅ Company-X 전용 봇 토큰 분리 (COMPANY_X_SLACK_BOT_TOKEN)
- ✅ 뉴스 없을 때 메시지 비활성화
- [상세: troubleshooting/250907_company_x_news_zero_articles.md]
착각했던 문제점:
- ❌ skill-news는 검색만 함 (스크래핑/요약 없음)
- ❌ 본문(content)과 요약(summary) 없이 제목/URL만 전달
- ❌ skill-publish가 빈 콘텐츠로 홈페이지 게시 시도
- ❌ company-x_hompage는 완전한 파이프라인 보유
필수 변수 (Squarespace 게시용):
- id, company_name, title, summary(280-320자)
- date, publisher, url, thumbnail_url
- formatted_content (제목+요약+날짜+언론사)
Phase 2: skill-publish (✅ 완료)
구현 상세: 트러블슈팅 문서 참조
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_token, 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 구현 완료 (상세)
7. 즉시 필요 작업
- 데이터 저장: ✅ JSON 파일 기반 구현 완료
- Slack 사용자 ID: .env 설정 필요 (51124)
- 내부 통신: ✅ 포트 8511 HTTP API 준비 완료
8. 일정 (완료 상태)
- 1주차: ✅ skill-news 운영 중 (포트 8505)
- 2주차: ✅ skill-publish 구현 완료 (포트 8511)
- 3주차: Slack 통합 및 rb8001 연동 예정