DOCS/journey/troubleshooting/250907_company_x_news_zero_articles.md
Claude-51124 22557e7132 docs: 오래된 트러블슈팅 아카이브 및 구조 정리
- 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/*)
2025-11-17 14:06:05 +09:00

3.3 KiB
Raw Blame History

Company-X 뉴스 15개 찾았는데 0개 전달 문제

작성일: 2025-09-07

작성자: happybell80

환경: rb8001, skill-news, Docker

문제 증상

  • skill-news가 Google에서 15개 뉴스 수집 성공
  • rb8001이 받은 기사는 0개
  • "오늘은 Company-X 관련 뉴스가 없습니다" 메시지 전송

원인 분석

1. 잘못된 중복 체크 위치

# 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 변경)

# 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로 이동

# companyx_news_collector.py (2025-09-08 수정)
- companyx_news_posting.json으로 전체 데이터 저장
- 수집/스크래핑/요약 단계별 업데이트
- collector 내부에서 중복 필터링

3. 엔드포인트 단순화

# 삭제된 코드
- news_manager.check_duplicate() 제거
- news_manager.save_articles() 제거
- new_articles  articles 직접 사용

4. Company-X 전용 봇 토큰

# COMPANY_X_SLACK_BOT_TOKEN 사용
self.slack_client = WebClient(token=os.getenv("COMPANY_X_SLACK_BOT_TOKEN"))

5. 뉴스 없을 때 메시지 비활성화

if not articles:
    return {"success": True, "articles_count": 0, "messages_sent": 0}

환경변수 정리

# 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 뉴스만 전달
  • 중복 뉴스 자동 필터링
  • 뉴스 없을 때 조용히 종료

추가 문제 해결 (2025-09-09)

rb8001 타임아웃 문제

  • 증상: skill-news가 6개 기사 반환했지만 rb8001이 못 받음
  • 원인: httpx.AsyncClient timeout=30초 < 실제 처리 시간 210초
  • 처리 시간: 스크래핑(6개×30초) + 요약(6개×5초) = 210초
  • 해결: rb8001/app/skills/news_posting_skill.py:61 timeout=300.0으로 증가
  • 확인: 6개 기사 모두 받아서 Slack 전송 성공 (ts: 1757265893.014689)
  • 상태: 완전 해결됨