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

## S (상황)
매일 02:00 정기 cron(`BFA48D87`)으로 네이버 검색광고(SA) 성과 데이터를 수집한다.
직전 수집본은 `2026-08-27T02:00:36+09:00` 기준이었다.

## C (문제)
2026-07-16 이래 전 지표가 0으로 수집되고 있다. 원인은 2026-08-13에 확정되었다.
수집기는 **예외를 삼키고 전 지표 0 파일을 그대로 저장**하는 fail-open 구조라
(`collect()`의 except → `_save(_empty_output(...))`),
"파일 존재 / 저장 성공"만으로는 정상 수집과 API 실패를 구분할 수 없다.

## Q (질문)
`--days 7` 수집이 정상 실행되고 대상 JSON이 갱신되었는가?
이번 0은 **실패 은폐형 0**인가, **확정 원인에 따른 정상 0**인가?

## A (답변)
정상 실행·정상 저장되었다. 수치는 여전히 전 지표 0이며,
stderr 로그와 독립 프로브로 **실패 은폐형 0이 아님**을 확인했다.
기존 확정 원인에 따른 예상된 정상 출력이다.

### 실행
```
python3 /home/jay/workspace/tools/naver-ads/collect_sa_stats.py --days 7
→ EXIT=0
→ NaverSAClient 초기화 완료 (customer_id=1419414)
→ naver-sa-stats.json 저장 완료
```
stderr에 `캠페인 조회 실패` / `stats 조회 실패` / `HTTP` 오류 **0건**
→ 예외 fallback 경로를 타지 않았음(= 폴백 빈 파일이 아니라 실제 수집 결과).

### 저장 검증
| 파일 | 변경 | 검증 방법 | 상태 |
|---|---|---|---|
| /home/jay/workspace/dashboard/data/naver-sa-stats.json | 데이터 갱신 | md5 전후 대조 + json 파싱 필드 전수 확인 + stderr 무오류 | verified |

- md5 before: `1bd49436e9908089311617aaed3a891c`
- md5 after : `068c148f68383d84581d17f8ef5f23f3`
- mtime: `2026-08-28 02:00:36 +0900`
- `last_collected`: `2026-08-28T02:00:36+09:00`
- 크기 2,126 bytes (전후 동일 — 구조 동일, 날짜창만 이동)

### 수집 결과
- summary.today / yesterday: 노출·클릭·비용·전환 전부 0
- keyword_groups(보험영업 / 개인사업·지점장 / 무자본창업): 전부 0
- daily_trend: 7행, `2026-08-22` ~ `2026-08-28`, 비영(非零) 행 0건
- budget: daily 21,000 / spent_today 0 / burn_rate 0.0
- campaigns: `전국민 꿀잠 프로젝트! "나이스드림"`(ELIGIBLE), `나이스드림 쇼핑검색#1`(ELIGIBLE)

## 0 수치에 대한 판단 — 재조사 불요 (독립 재현으로 확정 원인 일치)
1. **계정 불일치(핵심)** — `/stats`를 `since=2026-08-22 / until=2026-08-28`로
   직접 호출한 결과 **HTTP 200 + `[]` (len=0)**. `breakdown=day`를 붙여도 동일하게 `[]`.
   → 파싱 버그가 아니라 실적 레코드 자체가 부재.
2. **수집기 구조적 결함 2건(미해소, 기수집 보고와 동일)** —
   - `group_agg`가 초기화만 되고 갱신 코드 부재 → `keyword_groups`는 **구조적으로 항상 0**
   - `breakdown` 없이 호출한 응답에 `date` 필드가 없는데 `record.get("date","")`로 분기
     → daily_trend/today/yesterday 충전 불가

## ★ 이번 실행의 신규 확인 — 직전 보고서 "미확인 사항" 해소
직전 260826 보고서는 *"나이스드림 캠페인의 실제 집행(노출) 여부 미확인"*을 남겼다.
이번 실행에서 캠페인 원본 필드로 **해소**했다.

- 두 캠페인 모두 **`totalChargeCost: 0`** — 기간 문제가 아니라 **생애 누적 집행액이 0**.
- `trackingUrl` = `http://tracking.sample.com/?n_final_url={final_url}` (샘플 도메인)
- `regTm` = **2018-12-19 / 2019-01-09** (7년 이상 방치)
- `나이스드림 쇼핑검색#1`의 광고그룹은 **PAUSED**

→ 종합하면 `1419414`는 단순한 "다른 계정"이 아니라 **네이버 SA 공식 샘플/테스트 계정**으로
   판단된다. 즉 이 계정으로는 **어떤 기간을 조회해도 영구히 0**이며,
   날짜창 조정·재시도·수집기 수정으로는 절대 해소되지 않는다.

### 부수 확인
- `/stats`는 **92일 초과 조회 시 HTTP 400 (code 11004)** — 과거 소급 조회 상한 존재.
- `datePreset=last30days`도 `[]` 동일.

## 해소 조건 (변동 없음 — 회장님 결정 필요)
1. **API 계정 교체 승인** — 리쿠르팅 광고를 실제 집행 중인 계정의
   `NAVER_SEARCHAD_CUSTOMER_ID` / `API_KEY` / `SECRET_KEY` 발급
2. 위 결함 2건 수정 위임 (계정 교체 전에는 수정해도 값이 0이라 검증 불가)

계정 교체 전까지 이 0은 **정상 출력**이며 매일 재조사 불필요.

## 범위 밖 (수정하지 않음)
- 결함 2건은 **보고만 하고 수정하지 않았다**. 이번 작업 범위는 수집 실행·저장 확인.
- fail-open 구조(`_empty_output` 저장) 자체도 미수정 —
  실패와 정상 0이 파일상 구분되지 않아 매일 수동 프로브가 필요한 근본 원인.

관련: `memory/reports/naver-sa-collect-260826.md`, `memory/reports/naver-sa-collect-260813.md`
