# 260305 아침브리핑 형식혼선·동남아영어노출 원인확정 리서치

## 1) 목적
- 대상 문제 2개만 원인 확정:
1. 아침 브리핑/뉴스 표시 형식 혼선
2. 동남아 소식 영어 노출
- 목표: 원인 정확도 100% 기준으로, 수정 포인트를 단일 경로로 좁힌다.

## 2) 범위 / 비범위
- 범위: `rb8001`, `skill-news`, `robeing-gateway`
- 비범위: 다른 프로젝트(StarsAndI, GooseFarm 등), 다른 기능 이슈

## 3) 사실(Facts)
### 3-1. 실행 버전/경로
- `rb8001` 현재 커밋: `e9dcd1d`
- `skill-news` 현재 커밋: `d8a7c5b`
- 컨테이너:
  - `rb8001` 생성시각: `2026-03-04T15:02:26Z`
  - `robeing-skill-news` 생성시각: `2026-03-03T18:10:57Z`

### 3-2. 아침 뉴스 브리핑 실행 사실 (2026-03-05)
- `09:10:00` daily_headlines 시작
- `09:10:07` naver items 22
- `09:10:25` sea headlines 3
- `09:10:31` formatted text length 3213, Slack 전송 성공
- 근거 로그: `rb8001` 컨테이너 로그 (`daily_headlines`, `naver items`, `sea headlines`, `formatted text length`)

### 3-3. 동남아 영어 노출 직전 사실
- `skill-news` 로그에 아래 2개 경고가 같은 실행 구간에서 확인됨:
1. `LLM 적합도 실패 ... 404 models/gemini-2.0-flash-exp is not found ...`
2. `제목 번역 실패, 원문 유지 ... 404 models/gemini-2.0-flash-exp is not found ...`
- 근거 로그: `robeing-skill-news` 2026-03-05 09:10 실행 구간

### 3-4. 관련 코드 사실 (정확 위치)
- 번역 모델 기본값:
  - `skill-news/app/services/sea_news_filter.py:53`
  - `os.getenv("GEMINI_MODEL", "gemini-2.0-flash-exp")`
- 번역 실패 시 원문 유지:
  - `skill-news/app/services/sea_news_filter.py:159`
  - `return list(articles)`
- 동남아 제목 번역 호출 경로:
  - `skill-news/app/api/news_endpoints.py:66` (`translate_titles_to_korean`)
- rb8001이 해당 endpoint를 호출:
  - `rb8001/app/commands/skill_commands.py:252-278`
  - `POST /api/news/sea/headlines`

### 3-5. 형식 관련 코드 사실 (정확 위치)
- 네이버 뉴스 본문 형식 생성:
  - `skill-news/app/services/naver_startup_news_service.py:314-367`
- 오프닝/클로징/명언 일자 로테이션:
  - `skill-news/app/services/naver_startup_news_service.py:95-123`
- rb8001에서 동남아 섹션/키워드 섹션 추가 삽입:
  - `rb8001/app/services/workflows/headlines_workflow.py:40-83`
  - `rb8001/app/services/workflows/headlines_workflow.py:163-173`
- 아침 브리핑(네이버웍스) 구조 변경 이력:
  - 커밋 `3afb9c9` (중요메일 섹션 제거, 1줄 인사이트 구조 전환)
  - 현재 코드: `rb8001/app/services/skills/naverworks_briefing.py:59-73, 261-319`

### 3-6. 게이트웨이 영향 사실
- daily_headlines는 rb8001 내부 스케줄러가 직접 Slack 전송:
  - `rb8001/app/services/workflows/headlines_workflow.py:180-189`
- 본 경로는 gateway 프록시 경유가 아님.

## 4) 해석(Interpretation)
### 4-1. 동남아 영어 노출 원인 (확정)
- `GEMINI_MODEL` 미지정 상태에서 기본값 `gemini-2.0-flash-exp` 사용
- 해당 모델 호출이 404로 실패
- 번역 실패 폴백이 "원문 유지"로 설계되어 영어가 그대로 노출

### 4-2. 형식 혼선 원인 (확정)
- 형식 생성 책임이 2개 서비스로 분산됨:
1. `skill-news`가 기본 포맷 생성
2. `rb8001`이 동남아/키워드 섹션을 후삽입
- 네이버웍스 아침 브리핑은 별도 경로에서 이미 구조가 변경된 상태(커밋 `3afb9c9`)
- 사용자 입장에서는 "아침 브리핑" 범주 안에서 서로 다른 형식 경로가 동시에 존재

## 5) 결론(Conclusion)
### 결론 A: 동남아 영어 노출
- 확정 원인: `skill-news` 번역 모델 설정 불일치 + 원문 유지 폴백
- 단일 수정 포인트:
1. `skill-news` 실행 환경 `GEMINI_MODEL`
2. `skill-news/app/services/sea_news_filter.py` 번역 실패 처리 정책

### 결론 B: 형식 혼선
- 확정 원인: 아침 메시지 형식 책임 분산 + 브리핑 경로별 구조 차이
- 단일 수정 포인트:
1. 뉴스 형식 최종 조립 책임을 한 경로로 고정 (`skill-news` 또는 `rb8001` 중 1곳)
2. 네이버웍스/뉴스를 "아침 브리핑 패밀리" 공통 템플릿 기준으로 정렬

## 6) 비영향 범위 (영향 0 기준 분리)
- 본 문제와 무관:
  - `StarsAndI` 프로젝트
  - `GooseFarm` 프로젝트
  - gateway의 일반 API 프록시 경로
- 근거: 해당 문제 실행 경로가 `rb8001 scheduler -> skill-news -> slack`로 닫혀 있음.
