# task-1499.1 완료 보고서: Meta 크리에이티브 9개 + 광고 18개 생성

**팀**: dev5-team (마르둑)
**작업일**: 2026-04-06

---

## SCQA

**S**: task-1491.1에서 Meta 광고 인프라(캠페인 2개, 광고세트 6개, 이미지 9장)가 완성되었고, Facebook Page 2개(전국보험설계사채용, 서울대보험쌤)가 광고 계정에 연결 완료되어 크리에이티브와 광고 생성이 가능한 상태다.

**C**: Meta 앱이 **개발 모드(Development Mode)**로 설정되어 있어, `object_story_spec`을 사용한 크리에이티브 생성 시 error_subcode 1885183(`"광고 크리에이티브 게시물이 개발 모드인 앱에서 만들어졌습니다. 이 광고를 만들려면 공개 모드여야 합니다."`)이 발생한다. 9개 크리에이티브 전부 동일 에러로 실패했다.

**Q**: 앱 모드 전환 없이 크리에이티브/광고 생성이 가능한가, 가능하지 않다면 어떤 조치가 필요한가?

**A**: 3가지 대안(unpublished feed post, ads_posts dark post, old-style creative)을 모두 시도했으나 전부 실패했다. **Meta Developer Dashboard에서 앱을 Live 모드로 전환**해야 한다. 스크립트는 완성/검증 완료 상태이며, 앱 모드 전환 후 `python3 teams/dev5-team/scripts/meta_creative_ad_setup.py` 실행만으로 크리에이티브 9개 + 광고 18개 생성 가능하다.

---

## 작업 내용

### 1. 크리에이티브+광고 생성 스크립트 작성
- `meta_creative_ad_setup.py` 작성 완료
- 6단계 구조: 초기화 → 페이지 검증 → 광고세트 검증 → 크리에이티브 9개 → 광고 18개 → 결과 JSON
- `--dry-run` 모드로 전체 구조 검증 완료 (9 creatives + 18 ads 매핑 정확)

### 2. 실행 결과 (블로커 발견)
- 페이지 ID 검증: **성공** (전국보험설계사채용, 서울대보험쌤 둘 다 유효)
- 광고세트 검증: **6/6 존재 확인** (모두 PAUSED 상태)
- 크리에이티브 생성: **0/9 실패** — 앱 개발 모드 블로커
- 광고 생성: **0/18 스킵** — 크리에이티브 미생성으로 연쇄 스킵

### 3. 블로커 원인 분석 및 대안 시도

**원인**: Meta 앱(App ID: 2692254991734911)이 Development 모드
- `object_story_spec`은 Facebook Page에 게시물을 생성하므로, Live 모드 앱만 허용
- 캠페인/광고세트/이미지 업로드는 Development 모드에서도 동작 (page 게시물 불필요)

**시도한 대안 (3건, 모두 실패)**:
1. **Page feed 비공개 포스트** → 403: `pages_manage_posts` 권한 없음
2. **Page ads_posts (dark post)** → 400: Development 모드에서 지원 안 됨
3. **Old-style creative (title/body/image_hash)** → 400: deprecated, image 필수 에러

**현재 토큰 권한**: pages_show_list, ads_management, ads_read, pages_read_engagement, public_profile
**필요 추가 권한**: `pages_manage_ads` (Live 모드 전환 후 추가 필요 여부 재확인)

---

## 해결 방법 (제이회장님 액션 필요)

1. **Meta Developer Dashboard** → App Settings → 앱 모드를 **Development → Live** 전환
   - URL: https://developers.facebook.com/apps/2692254991734911/settings/basic/
   - Live 전환 시 Privacy Policy URL, Data Deletion URL 등이 필요할 수 있음
2. (선택) 토큰에 `pages_manage_ads` 권한 추가 후 재발급
3. 스크립트 재실행: `cd /home/jay/workspace && python3 teams/dev5-team/scripts/meta_creative_ad_setup.py`

---

## 발견 이슈 및 해결

### 자체 해결 (1건)
1. **셀 앵글명 불일치** — CELL_INFO의 앵글명을 태스크 스펙에 맞게 수정
   - "공정보상" → "공정한수수료", "리더육성" → "리더지원", "지원체계" → "업무지원"

### 범위 외 미해결 (1건)
1. **Meta 앱 Development 모드** — 범위 외 사유: Meta Developer Dashboard에서 수동 전환 필요 (API 자동화 불가). 캠페인/광고세트는 Development 모드에서 생성 가능했으나, 크리에이티브(page post 생성 포함)는 Live 모드 필수.

---

## 매핑 구조 (스크립트 검증 완료)

### 크리에이티브 9개 (앱 Live 전환 후 생성 예정)
- 리쿠르팅_Cell1_인카금융서비스_공정한수수료 (page: 전국보험설계사채용)
- 리쿠르팅_Cell2_인카금융서비스_리더지원 (page: 전국보험설계사채용)
- 리쿠르팅_Cell3_인카금융서비스_업무지원 (page: 전국보험설계사채용)
- 리쿠르팅_Cell4_GA_공정한수수료 (page: 전국보험설계사채용)
- 리쿠르팅_Cell5_GA_리더지원 (page: 전국보험설계사채용)
- 리쿠르팅_Cell6_GA_업무지원 (page: 전국보험설계사채용)
- 리쿠르팅_Cell7_서울대보험쌤_공정한수수료 (page: 서울대보험쌤)
- 리쿠르팅_Cell8_서울대보험쌤_리더지원 (page: 서울대보험쌤)
- 리쿠르팅_Cell9_서울대보험쌤_업무지원 (page: 서울대보험쌤)

### 광고 18개 (크리에이티브 생성 후 자동 생성)
- 리드_인카금융서비스_Cell1~3, 리드_GA_Cell4~6, 리드_서울대보험쌤_Cell7~9
- 잠재고객_인카금융서비스_Cell1~3, 잠재고객_GA_Cell4~6, 잠재고객_서울대보험쌤_Cell7~9

---

## 산출물 파일

- `/home/jay/workspace/teams/dev5-team/scripts/meta_creative_ad_setup.py`
- `/home/jay/workspace/teams/dev5-team/output/meta_creative_ad_result.json`

---

## 셀프 QC

- [x] 1. 다른 파일 영향: meta_ads_client.py 수정 없음, 신규 스크립트만 작성/수정
- [x] 2. 엣지 케이스: 페이지 검증 실패 시 즉시 중단, 크리에이티브 실패 시 광고 스킵, continue-on-error
- [x] 3. 작업 지시 일치: 크리에이티브 9개 + 광고 18개 생성 시도했으나 앱 모드 블로커로 0/9 실패 (범위 외)
- [x] 4. 에러 처리: 토큰/키 하드코딩 없음, 모든 리소스 PAUSED 상태 의도
- [x] 5. 테스트: dry-run 검증 완료, 실제 실행 시 에러 로그 + 결과 JSON 저장 확인
- [x] 6. 이슈 해결: 앵글명 1건 자체 수정, 앱 모드 1건 범위 외 미해결 (수동 조치 필요)
- [x] 7. 코드 아키텍처: 기존 패턴(meta_campaign_setup.py) 준수, SOLID 위반 없음
- [x] 8. 인터페이스 변경: 없음 (기존 MetaAdsClient 수정 안 함)
- [x] 9. 이미지/배너: 해당 없음 (이미지 생성 작업 아님)

---

## 모델 사용 기록

- 엔키(백엔드): 크리에이티브+광고 생성 스크립트 작성 / sonnet / -
- 마르둑(팀장): 스크립트 리뷰, 대안 API 호출 시도 3건, 보고서 작성 / opus / API 파라미터 디버깅으로 팀장 직접 개입

---

## QC 검증 결과

- 스크립트 코드 검증: dry-run 모드에서 9 creatives + 18 ads 매핑 구조 정확 확인 완료
- 실행 결과: 크리에이티브 생성은 앱 모드 전환 후 재실행 예정 (범위 외 블로커로 미완료 항목 보고서에 명시)
- 에러 근본 원인: 단일 원인(앱 Development 모드) — 앱 Live 전환 시 스크립트 재실행만으로 해결 가능
