# Company-X 뉴스 15개 찾았는데 0개 전달 문제 ## 작성일: 2025-09-07 ## 작성자: happybell80 ## 환경: rb8001, skill-news, Docker ## 문제 증상 - skill-news가 Google에서 15개 뉴스 수집 성공 - rb8001이 받은 기사는 0개 - "오늘은 Company-X 관련 뉴스가 없습니다" 메시지 전송 ## 원인 분석 ### 1. 잘못된 중복 체크 위치 ```python # skill-news/app/api/news_endpoints.py (문제 코드) # 엔드포인트에서 ChromaDB로 중복 체크 for article in articles: if not news_manager.check_duplicate(article): # 15개 모두 필터링 new_articles.append(article) ``` ### 2. 파라미터 전달 문제 - rb8001이 GET 요청만 보냄 (파라미터 없음) - 환경변수 split() 방식 오류 (공백 vs 쉼표) - exclude_keywords 미처리 ## 해결 과정 ### 1. rb8001 → skill-news 파라미터 전달 (POST 변경) ```python # rb8001/app/skills/news_posting_skill.py response = await client.post( # GET → POST f"{self.skill_news_url}/api/news/google/companyx-search", json={ "keywords": os.getenv("COMPANY_X_NEWS_KEYWORDS").split(","), "exclude_keywords": os.getenv("COMPANY_X_EXCLUDE_KEYWORDS").split(","), "max_items": int(os.getenv("COMPANY_X_NEWS_MAX_ITEMS", "10")), "days_back": int(os.getenv("COMPANY_X_NEWS_DAYS_BACK", "7")) } ) ``` ### 2. 중복 체크 collector로 이동 ```python # companyx_news_collector.py - JSON 파일로 히스토리 관리 (/app/data/companyx_history.json) - 최근 100개 기사 기록 유지 - collector 내부에서 중복 필터링 ``` ### 3. 엔드포인트 단순화 ```python # 삭제된 코드 - news_manager.check_duplicate() 제거 - news_manager.save_articles() 제거 - new_articles → articles 직접 사용 ``` ### 4. Company-X 전용 봇 토큰 ```python # COMPANY_X_SLACK_BOT_TOKEN 사용 self.slack_client = WebClient(token=os.getenv("COMPANY_X_SLACK_BOT_TOKEN")) ``` ### 5. 뉴스 없을 때 메시지 비활성화 ```python if not articles: return {"success": True, "articles_count": 0, "messages_sent": 0} ``` ## 환경변수 정리 ```bash # rb8001 COMPANY_X_NEWS_KEYWORDS=컴퍼니 엑스,컴퍼니엑스,Company X COMPANY_X_EXCLUDE_KEYWORDS=광고,채용,구인 COMPANY_X_NEWS_MAX_ITEMS=10 COMPANY_X_NEWS_DAYS_BACK=7 COMPANY_X_SLACK_BOT_TOKEN=xoxb-9417291383105-... ``` ## 핵심 교훈 1. **중복 체크는 collector 책임** - 엔드포인트는 전달만 2. **파라미터 명시적 전달** - 환경변수 의존 대신 POST로 전송 3. **서비스 간 독립성** - skill-news는 rb8001 환경변수 모름 4. **적절한 계층 분리** - Controller/Service/Collector 역할 명확히 ## 결과 - 새로운 Company-X 뉴스만 전달 - 중복 뉴스 자동 필터링 - 뉴스 없을 때 조용히 종료