docs: startup_news_skill.py 구현 방안으로 문서 수정

This commit is contained in:
happybell80 2025-09-14 19:35:47 +09:00
parent 0fef5fe052
commit 2d84b87e8c

View File

@ -22,15 +22,18 @@
## 현재 상태 분석
### 1. 헤드라인 처리 흐름 (파일 경로)
### 1. 수정 후 처리 흐름 (startup_news_skill.py 추가)
1. `rb8001/main.py:206` - APScheduler 스케줄 등록
2. `rb8001/main.py:394` - _run_headlines_job() 실행
3. `rb8001/app/commands/skill_commands.py:220` - fetch_naver_headlines() 호출
4. `skill_news/app/api/news_endpoints.py:46` - POST /naver/startup-headlines
5. `skill_news/app/services/naver_startup_news_service.py:360` - fetch_headlines()
6. `skill_news/app/services/naver_startup_news_service.py:300` - format_startup_news_for_slack()
7. `skill_news/app/data/slack_messages.md` - 템플릿 로드
8. `rb8001/main.py:427` - WebClient.chat_postMessage() 전송
2. `rb8001/main.py:213` - run_headlines_job 호출 (import 변경)
3. `rb8001/app/skills/startup_news_skill.py:run_headlines_job()` - 메인 실행
4. `rb8001/app/skills/startup_news_skill.py:fetch_headlines()` - 내부 메서드
5. `rb8001/app/commands/skill_commands.py:220` - fetch_naver_headlines(json)
6. `skill_news/app/api/news_endpoints.py:46` - POST /naver/startup-headlines
7. `skill_news/app/services/naver_startup_news_service.py:360` - fetch_headlines()
8. `rb8001/app/skills/startup_news_skill.py:extract_terms()` - 용어 추출
9. `rb8001/app/llm/gemini_handler.py:215` - extract_keywords() 호출
10. `rb8001/app/skills/startup_news_skill.py:build_message()` - 메시지 조립
11. `rb8001/app/skills/startup_news_skill.py:send_to_slack()` - 자체 Slack 전송
### 2. 문제점 (구조적)
- **main.py 과부하**: 스케줄/실행/전송 모두 담당 (732줄)
@ -39,12 +42,12 @@
- **왕복 낭비**: rb8001→skill-news(포맷)→rb8001(전송)
- **용어 추출 불가**: 완성된 텍스트라 중간 삽입 어려움
## 구현 방안
## 구현 방안 (최종 선택)
### 방안 1: rb8001에서 처리 (선택)
### startup_news_skill.py 신규 생성
```python
# main.py:_run_headlines_job() 수정
async def _run_headlines_job(channel_id: str):
# rb8001/app/skills/startup_news_skill.py
async def run_headlines_job(channel_id: str):
# 1. JSON 포맷으로 헤드라인 수집
result = await sc.fetch_naver_headlines(fmt="json") # slack → json
items = result.get("items", [])
@ -101,8 +104,9 @@ async def _run_headlines_job(channel_id: str):
lines[insert_idx:insert_idx] = terms_section
text = "\n".join(lines)
# 5. Slack 전송
client.chat_postMessage(channel=channel_id, text=text)
# 5. 자체 Slack 전송 (WebClient 직접 생성)
slack_client = WebClient(token=os.getenv("SLACK_BOT_TOKEN"))
slack_client.chat_postMessage(channel=channel_id, text=text)
```
### 환경변수 추가
@ -136,8 +140,9 @@ HEADLINES_TERMS_SAMPLE_SIZE=20 # 분석할 헤드라인 개수
```
## 구현 영향
- main.py: +30줄 (732 → 762줄)
- gemini_handler.py: +5줄 (프롬프트 수정)
- **main.py**: -50줄 삭제, +1줄 import (732 → 683줄)
- **startup_news_skill.py**: +150줄 신규 생성
- **gemini_handler.py**: 프롬프트 수정 불필요 (파라미터로 전달)
- 기존 extract_keywords() 함수 활용 (미사용 코드 재활용)
## 교훈