diff --git a/troubleshooting/250914_happybell80_깡프로뉴스_용어추출_기능추가.md b/troubleshooting/250914_happybell80_깡프로뉴스_용어추출_기능추가.md index f8525d1..7f52978 100644 --- a/troubleshooting/250914_happybell80_깡프로뉴스_용어추출_기능추가.md +++ b/troubleshooting/250914_happybell80_깡프로뉴스_용어추출_기능추가.md @@ -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() 함수 활용 (미사용 코드 재활용) ## 교훈