# 네이버 SA 성과 데이터 자동 수집 (2026-08-23 정기)

## S (상황)
매일 02:00 cron `BFA48D87` — 네이버 검색광고 SA 성과 데이터 자동 수집.
`python3 /home/jay/workspace/tools/naver-ads/collect_sa_stats.py --days 7` 실행 후
`/home/jay/workspace/dashboard/data/naver-sa-stats.json` 저장 확인 요청.

## C (복잡성)
본 수집기는 2026-07-16부터 전 지표 0을 출력해 왔으며, 근본원인이 2026-08-13에
확정(보고서 `memory/reports/naver-sa-collect-260813.md`)되어 있다.
따라서 "0 = 실패"로 오판하지 않기 위해, 이번 회차는 **실행 성공 여부와 0의 성격**을
분리해 검증했다.

## Q (질문)
1. 스크립트가 정상 실행되어 파일이 실제로 갱신되었는가?
2. 0이 API 장애/예외 삼킴 때문인가, 아니면 기존 확정 원인 그대로인가?

## A (답변)

### 1. 실행 및 저장 — 정상
- exit code: `0`
- 로그: `naver-sa-stats.json 저장 완료: /home/jay/workspace/dashboard/data/naver-sa-stats.json`
- 파일 mtime: `Aug 23 02:00` (직전 회차 `Aug 22 02:00`에서 갱신)
- md5 변화: `cffde3a25ad26b07a6aa508f53d34227` → `e5bd71c791633beb4d50f9e15c98832d`
- `last_collected`: `2026-08-23T02:00:25+09:00`
- JSON 파싱 정상, 최상위 키 6종(`last_collected` / `summary` / `keyword_groups` /
  `daily_trend` / `budget` / `campaigns`) 모두 존재
- `daily_trend` 7일치(2026-08-17 ~ 2026-08-23) — `--days 7` 인자 반영 확인

### 2. 0의 성격 — 기존 확정 원인, 신규 장애 아님
- 수집기의 모든 예외 경로(`NaverSAClient` 초기화 / 캠페인 조회 / 광고그룹 조회 /
  stats 조회)는 `logger.error` 또는 `logger.warning`을 남긴다.
  이번 실행 로그에 **error/warning 0건** → 예외 삼킴 없음.
- `campaigns` 배열이 실시간 응답으로 채워짐(코드에 캠페인명 하드코딩 없음 확인).
  즉 인증·API 연결 경로는 살아 있다.
  - `cmp-a001-01-000000001647137` 전국민 꿀잠 프로젝트! "나이스드림" — ELIGIBLE
  - `cmp-a001-02-000000001684254` 나이스드림 쇼핑검색#1 — ELIGIBLE
- 계정 `NAVER_SEARCHAD_CUSTOMER_ID=1419414`에는 여전히 나이스드림 캠페인 2건뿐이고,
  수집기 `_GROUP_RULES`가 기대하는 리쿠르팅 광고그룹(보험영업 / 개인사업·지점장 /
  무자본창업)은 0건. → `keyword_groups` 3종 전부 0.
- `get_stats()`가 `breakdown` 없이 호출되어 응답에 `date` 필드가 없는데
  `record.get("date","")`로 분기하는 구조적 결함도 그대로 존재(코드 104~115행).
  → `daily_trend` / `today` / `yesterday`는 구조상 채워질 수 없음.

## 수정 파일별 검증 상태

| 파일 | 변경 | 상태 |
|---|---|---|
| /home/jay/workspace/dashboard/data/naver-sa-stats.json | 수집 결과 갱신(코드 변경 아님) | verified |

코드 변경 없음. 데이터 수집 실행 건.

## 미해소 사항 (재조사 불요, 회장님 결정 대기)
1. **API 계정 교체** — 1419414는 나이스드림 계정. 리쿠르팅 광고 계정으로 교체 필요.
2. **수집기 결함 2건 수정 위임** — `group_agg` 미갱신, `breakdown="day"` 누락.

위 두 건이 해소되기 전까지는 **0이 정상 출력**이며, 매 회차 재조사는 불필요하다.

## 레벨: 코드 수정 없음
