계획 문서 확실한 정보로 수정 및 확인 필요 사항 명시
- skill-news 포트 8505 확정 (51124 서버 운영 중) - skill-publish 포트 8511 확정 - rb8001 Docker 실행 상태 확인 - [확인 필요] 표시로 불확실한 정보 구분
This commit is contained in:
parent
5ae841cf27
commit
58b445a1a1
@ -1,13 +1,14 @@
|
||||
# 뉴스 스킬과 퍼블리시 분리 아키텍처 계획
|
||||
|
||||
## 1. 현재 구조 및 검증 결과
|
||||
## 1. 현재 구조 (검증 완료)
|
||||
- **기존 시스템**: company-x_hompage - 완전 자동화된 뉴스 수집/게시
|
||||
- **rb8001 현황**: DM 전송(DMSkill), Cron 트리거(/api/cron/daily-summary), asyncio 스케줄링 구현
|
||||
- **재사용 가능 자원**: collectors 모듈 100%, ProcessLock 구현 완료, thumbnail_manager 활용 가능
|
||||
- **rb8001 실행 중**: Docker 상태 "Up 11 hours (healthy)" 확인
|
||||
- **DM 기능**: /api/cron/daily-summary 구현, dm_skill.py:384 위치
|
||||
- **재사용 가능**: collectors 모듈 100%, ProcessLock(타임아웃 3600초), thumbnail_manager
|
||||
|
||||
## 2. 목표 아키텍처
|
||||
- **skill-news**(8511): 뉴스 수집/요약 → Slack DM 전송
|
||||
- **skill-publish**(8512): 사용자 선택 뉴스 → Squarespace 게시
|
||||
- **skill-news**: 포트 8505 (51124 서버에서 운영 중)
|
||||
- **skill-publish**: 포트 8511 (신규 구현 예정)
|
||||
- **데이터 흐름**: 수집 → 검증/요약 → DM 전송 → 사용자 선택 → 게시 → 결과 보고
|
||||
|
||||
## 3. 구현 계획
|
||||
@ -30,34 +31,31 @@
|
||||
- post_formatter.py (중복 체크 로직 포함)
|
||||
|
||||
### Phase 3: 통합 및 배포 (3주차)
|
||||
**Nginx 설정 추가** (nginx-infra/server-nginx-default):
|
||||
```nginx
|
||||
location /skill-news/ {
|
||||
proxy_pass http://localhost:8511/;
|
||||
proxy_set_header Host $host;
|
||||
}
|
||||
location /skill-publish/ {
|
||||
proxy_pass http://localhost:8512/;
|
||||
}
|
||||
```
|
||||
**Nginx 설정** [확인 필요]:
|
||||
- 현재 skill-email(8501)만 설정됨
|
||||
- skill-news, skill-publish 라우팅 추가 필요
|
||||
|
||||
**Slack App 권한** (추가 확인 필요):
|
||||
- 필수: chat:write, im:write
|
||||
- 권장: files:write, users:read, channels:read
|
||||
**Slack App 권한**:
|
||||
- 확인됨: chat:write (mrkdwn, Block Kit 지원)
|
||||
- 추가 필요 여부: files:write, users:read [확인 필요]
|
||||
|
||||
## 4. 데이터베이스 설계
|
||||
## 4. 데이터베이스 (확인됨)
|
||||
**PostgreSQL (51123 서버)**:
|
||||
- main_db 사용 (구 auth_db)
|
||||
- users, gmail_tokens, robeing_stats 테이블 존재
|
||||
|
||||
**ChromaDB (51124 서버)**:
|
||||
- 포트 8000, 경로 /app/data/chroma
|
||||
- 벡터 기반 중복 체크 구현됨
|
||||
|
||||
**신규 테이블 필요**:
|
||||
```sql
|
||||
CREATE TABLE rb_news (
|
||||
id UUID PRIMARY KEY,
|
||||
keyword VARCHAR(100),
|
||||
title TEXT,
|
||||
url TEXT UNIQUE,
|
||||
publisher VARCHAR(200),
|
||||
published_date DATE,
|
||||
summary TEXT,
|
||||
status VARCHAR(50), -- collected, selected, published
|
||||
slack_ts VARCHAR(50),
|
||||
created_at TIMESTAMP
|
||||
status VARCHAR(50) -- collected, selected, published
|
||||
);
|
||||
```
|
||||
|
||||
@ -71,16 +69,17 @@ CREATE TABLE rb_news (
|
||||
- POST /publish: 선택 뉴스 게시
|
||||
- GET /status/{id}: 게시 상태
|
||||
|
||||
## 6. 주요 개선사항
|
||||
- **스케줄링**: rb8001의 asyncio → APScheduler 업그레이드
|
||||
- **DM 전송**: rb8001 DMSkill 로직 활용 (3명 하드코딩 → DB 연동)
|
||||
- **ProcessLock**: 이미 구현된 정교한 락 메커니즘 그대로 사용
|
||||
- **모니터링**: /health 엔드포인트 + Slack 오류 알림
|
||||
## 6. 확인된 구현 사항
|
||||
- **브리핑 시스템**: rb8001/app/skills/dm_skill.py:384 구현됨
|
||||
- **사용자 목록**: 하드코딩 3명 확인 (DB 연동 필요)
|
||||
- **Gmail 토큰 갱신**: 2025-08-27 해결 완료
|
||||
- **ProcessLock**: 완전 구현 (PID 확인, 타임아웃 3600초, atexit)
|
||||
- **서버 분리**: 51123(메인), 51124(로빙/스킬) 물리적 분리
|
||||
|
||||
## 7. 리스크 및 해결방안
|
||||
- **Slack 권한**: 실제 필요 scope는 운영 중 확인 후 추가
|
||||
- **비동기 처리**: rb8001처럼 asyncio 기반 구현
|
||||
- **중복 실행**: ProcessLock으로 완벽 방지 (타임아웃 3600초)
|
||||
## 7. 확인 필요 사항
|
||||
- **Nginx 라우팅**: skill-news(8505), skill-publish(8511) 프록시 설정
|
||||
- **Slack 추가 권한**: files:write, users:read 필요 여부
|
||||
- **APScheduler vs asyncio**: 스케줄링 방식 결정
|
||||
|
||||
## 8. 일정 (현실적 추정)
|
||||
- **1주차**: skill-news 구현 (코드 90% 재사용으로 충분히 가능)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user