DOCS/journey/plans/260129_동남아_스타트업_뉴스_아침브리핑.md
Claude-51124 33c52f800a plans: 동남아 뉴스 계획 보강 - 코드 참조/테스트/교훈 추가
- 수집/선별/포맷 상세 구현 방안 (파일명:줄번호 참조)
- 테스트 계획 (315 원칙: pytest, conftest.py fixtures)
- 트러블슈팅 교훈 반영 (본문 검증, OOM 방지, 토큰 분리)
2026-01-29 10:23:28 +09:00

7.3 KiB

동남아 스타트업 뉴스 아침 브리핑

작성일: 2026-01-29
작성자: happybell80
관련: rb8001, skill-news, daily_headlines, 560_컴퍼니엑스_개요.md
이전 아이디어: journey/ideas/260125_동남아_스타트업_뉴스.md


1. UX 기대효과

  • 매일 아침 뉴스 브리핑에 「동남아 소식」 섹션을 넣어, 컴퍼니엑스가 동남아 기회를 탐색하는 데 도움이 되는 뉴스를 3개 꼭지로 제공한다.
  • 깡프로 헤드라인과 동일한 채널·동일한 아침 스케줄에 포함되며, 별도 채널·별도 job 없이 기존 daily_headlines 메시지 안에 섹션으로 삽입된다.

2. UI (깡프로 뉴스와 동일한 단순 형식)

  • 동남아 소식 섹션만 추가하고, 나머지 구조(오프닝, 출처, 클로징, 명언)는 깡프로 포맷 유지.
  • 동남아 뉴스 3건: 01. <url|제목>, 02. <url|제목>, 03. <url|제목> 한 줄씩. 제목은 한국어로 번역하여 표기(원문 영문인 경우). 날짜 병기·출판사/신문사·부가 설명 없음.
  • 삽입 위치: 깡프로 헤드라인 목록 끝 → 빈 줄 2개 → *동남아 소식*01. ~ 03. → 빈 줄 2개 → *오늘의 키워드* (있으면) → 빈 줄 2개 → 클로징 → 명언.

표시 예시 (24시간 이내 수집, 컴퍼니엑스 투자 분야 기준 선별):

*동남아 소식*

01. <url|싱가포르 Elev8.vc, AI·의료기술·로봇·첨단제조 딥테크 펀드 3천만 달러 마감>
02. <url|싱가포르 헬스테크 Mesh Bio, 동남아 확장용 시리즈 A 350만 달러 유치>
03. <url|TikTok, 태국 데이터센터에 38억 달러 투자 확정>
  • 참고: skill_news/app/services/naver_startup_news_service.py format_startup_news_for_slack, rb8001/app/services/skills/startup_news_skill.py run_headlines_job.

3. 수집·선별 상세

3.1 수집 (skill-news)

신규 파일: skill_news/app/services/sea_news_collector.py

구현 방식: google_news_collector.py:55-91 패턴 재사용

  • Playwright로 Google News 검색
  • URL 파라미터: q={keyword}%20when%3A1d&hl=en&gl=SG (24시간 필터)
  • 키워드: Singapore startup funding, Malaysia startup investment, Indonesia startup VC, SEA biotech healthcare

환경변수 (.env):

SEA_NEWS_KEYWORDS=Singapore startup funding,Malaysia startup investment,Indonesia startup VC,SEA biotech healthcare
SEA_NEWS_REGION=SG
SEA_NEWS_DAYS_BACK=1

데이터 모델: news_models.py:6-26 NewsArticle 재사용

3.2 선별 (skill-news)

신규 파일: skill_news/app/services/sea_news_filter.py

필터링 로직:

  1. 키워드 매칭: 제목/본문에 기회 탐색 키워드 포함 여부 확인
    • 기회 키워드: funding, investment, VC, accelerator, Series A/B, M&A, expansion, policy
    • 분야 키워드: biotech, healthcare, medical, manufacturing, e-commerce
  2. 본문 검증: companyx_news_collector.py:396-413 _remove_duplicates 패턴 참고
    • 트러블슈팅 교훈: 검색어 부분 매칭만으로 무관 기사 수집 문제 (250916_claude_companyx_wrong_news.md)
    • 본문 검증 로직 필수
  3. 상위 3건 선정: 기회 키워드 매칭 점수 기준 정렬

3.3 제목 번역 (LLM)

구현 위치: skill_news/app/services/sea_news_filter.py

LLM 호출: Gemini API 사용 (311 원칙: LLM 우선 접근)

  • 프롬프트: "Translate the following news title to Korean. Return only the translated title without explanation: {title}"
  • 3건 배치 처리 (단일 호출로 통합, 311 원칙 섹션 14)

3.4 포맷 (skill-news)

신규 함수: skill_news/app/services/sea_news_service.py format_sea_news_for_slack()

참조: naver_startup_news_service.py:333-343 포맷 로직

lines = ["", "", "*동남아 소식*", ""]
for i, article in enumerate(articles[:3], 1):
    lines.append(f"{i:02d}. <{article.url}|{article.title_ko}>")

3.5 중복 제거 및 이력 관리

파일: skill_news/data/sea_news_posting.json

참조: companyx_news_collector.py:396-413 중복 제거 패턴

  • URL + 제목 기준 중복 확인
  • 전송 이력 저장 (날짜, URL, 제목)

4. Phase 및 필요 작업

Phase 필요 작업
Phase 1 skill_news/app/services/sea_news_collector.py 신규 생성. google_news_collector.py:55-91 패턴 복사 후 키워드·지역 파라미터 변경. 환경변수 .envSEA_NEWS_* 추가.
Phase 2 skill_news/app/services/sea_news_filter.py 신규 생성. 기회 키워드 매칭 + 본문 검증 + LLM 제목 번역(Gemini, 3건 배치). sea_news_service.pyformat_sea_news_for_slack() 추가.
Phase 3 rb8001/app/services/skills/startup_news_skill.py:11-93 run_headlines_job 수정. 깡프로 텍스트 생성 후 동남아 섹션 삽입. 삽입 위치: 명언(> 시작) 앞 2줄. startup_news_skill.py:37-52 키워드 섹션 삽입 로직 참고.
Phase 4 기존 daily_headlines 스케줄 유지(09:10). 동남아 수집 실패 시 try-except로 동남아 섹션만 생략, 깡프로만 전송.

5. 테스트 계획

315 원칙 준수: pytest 자동 테스트, conftest.py fixtures 사용

테스트 파일 내용
수집 단위 테스트 skill_news/tests/test_sea_news_collector.py 키워드 검색, 24시간 필터, NewsArticle 반환 확인
선별 단위 테스트 skill_news/tests/test_sea_news_filter.py 기회 키워드 매칭, 본문 검증, LLM 번역 모킹
포맷 단위 테스트 skill_news/tests/test_sea_news_service.py 01. <url|제목> 형식 확인
연동 E2E 테스트 rb8001/tests/e2e/test_sea_news_headlines.py 깡프로 + 동남아 섹션 통합 Slack 메시지 확인

conftest.py fixtures:

  • mock_playwright: Playwright 모킹
  • mock_gemini: Gemini API 모킹
  • sample_sea_articles: 테스트용 NewsArticle 3건

6. 주의사항 (트러블슈팅 교훈)

교훈 출처 적용
검색어 부분 매칭 → 무관 기사 수집 250916_claude_companyx_wrong_news.md 본문 검증 로직 필수
OOM → 리소스 경합 250908_headline_failure_memory_error.md 깡프로(09:10) 이후 동남아 수집 (동일 job 내 순차 처리)
좀비 프로세스 250904_admin_skill-news_zombie_process_gitea_actions.md docker-compose.yml init: true 확인
워크스페이스별 토큰 분리 250909_slack_briefing_failure.md COMPANYX_SLACK_BOT_TOKEN 사용 확인

7. 참고 파일

파일 참조 내용
skill_news/app/services/google_news_collector.py:55-91 뉴스 검색 패턴
skill_news/app/services/google_news_collector.py:100 URL 파라미터 (when:Nd)
skill_news/app/services/companyx_news_collector.py:396-413 중복 제거 패턴
skill_news/app/services/naver_startup_news_service.py:333-343 Slack 포맷 (01. <url|제목>)
rb8001/app/services/skills/startup_news_skill.py:11-93 run_headlines_job 구조
rb8001/app/services/skills/startup_news_skill.py:37-52 섹션 삽입 로직 (명언 앞)
DOCS/book/500_business/560_컴퍼니엑스_개요.md 컴퍼니엑스 투자 분야