테마
Story: 캠페인 행동 조언 (수동 광고)
메타
| 항목 | 값 |
|---|---|
| Story ID | E-04-S-04 |
| Epic | E-04 Phase 2 순이익 번역 |
| 상태 | ready-for-dev |
| 우선순위 | P0 |
| 규모 | L |
| 담당 개발자 | 수민 (FE), 하록 (BE) |
사용자 스토리
As a 수동 광고를 사용하는 셀러,
I want 입찰가를 얼마로 조정해야 하는지 알고 싶다,
So that 구체적인 금액으로 조정할 수 있다.
수락 기준 (Acceptance Criteria)
AC-01: 입찰가 조정 조언 (방향성 제시)
| 항목 | 내용 |
|---|---|
| Given | 수동 광고이고 Margin Room 대비 CPC가 높을 때 |
| When | 캠페인 카드를 펼치면 |
| Then | "입찰가를 낮춰보세요" 방향성 조언이 표시된다 |
| And | 허용 CPC와 현재 CPC 비교 정보가 표시된다 |
⚠️ 데이터 제약: 입찰가 현재값은 쿠팡 스크랩 데이터에 없어 구체적 값 제시 불가
AC-02: CPC 기반 판단
| 항목 | 내용 |
|---|---|
| Given | 입찰가 변경 조언이 표시될 때 |
| When | 판단 근거를 보여줄 때 |
| Then | 허용 CPC와 현재 CPC를 비교해 보여준다 |
현재 CPC: 180원 (계산됨: adCost / clickCount)
허용 CPC: 120원 (이 이하면 적정 순이익)
💡 입찰가를 낮추면:
• CPC가 낮아져서 광고 효율이 올라가요
• 노출은 줄 수 있지만, 순이익이 개선돼요
※ 현재 입찰가는 쿠팡 광고센터에서 확인하세요AC-03: 쿠팡 광고센터 연결
| 항목 | 내용 |
|---|---|
| Given | 조언이 표시된 상태에서 |
| When | "쿠팡 광고센터에서 입찰가 조정하기" 버튼 클릭 시 |
| Then | 쿠팡 광고센터 입찰가 관리 페이지로 이동한다 |
AC-04: 검색/비검색 분리 조언 (방향성)
| 항목 | 내용 |
|---|---|
| Given | 검색과 비검색의 효율 차이가 클 때 |
| When | 조언이 표시되면 |
| Then | 검색/비검색 각각에 대한 방향성 조언이 분리되어 표시된다 |
⚠️ 데이터 제약: 검색/비검색별 입찰가는 쿠팡 데이터에 없어 CPC 기반 판단
데이터 제약사항 (2026-01-26)
⚠️ 쿠팡 광고 스크랩 데이터 한계로 인한 제약
| 데이터 | 상태 | 대안 |
|---|---|---|
| 입찰가 | ❌ 없음 | CPC 기반 방향성 제시 |
| 예상 변화 | ❌ 계산 불가 | 제거 (입찰가 현재값 모름) |
핵심 원칙:
- 구체적 값("입찰가 200원→150원") 대신 방향성("입찰가를 낮춰보세요") 제시
- 허용 CPC vs 현재 CPC 비교로 판단 근거 제공
- 쿠팡 광고센터 링크로 유도하여 셀러가 직접 확인/조정
태스크 분해
Task 1: BE - 수동 광고 조언 로직 AC-01, AC-02, AC-04
- [ ] 1.1: 수동 광고 타입 식별 로직
- [ ] 1.2: Margin Room 대비 CPC 과다 판정
- [ ] 1.3: 허용 CPC 계산
- 허용 CPC = (평균 주문금액 × CVR) / BEP ROAS × (1 - Margin Room%)
- [ ] 1.4: 조언 케이스 판정 (CPC 기반 방향성)
- [ ] 1.5: 검색/비검색 분리 조언 로직 (CPC 비교)
Task 2: FE - 조언 UI AC-01, AC-02, AC-03
- [ ] 2.1: 수동 광고 조언 카드 컴포넌트
- [ ] 2.2: 입찰가 비교 UI (현재 → 권장)
- [ ] 2.3: 예상 변화 표시 (+X원)
- [ ] 2.4: 쿠팡 광고센터 링크 버튼
- [ ] 2.5: 검색/비검색 분리 조언 UI
- [ ] 2.6: GA4 이벤트 (
click_action_advice)
계산 로직 상세
[허용 CPC 계산]
허용 CPC = (평균 주문금액 × CVR) / BEP ROAS × (1 - Margin Room%)
예) 평균 주문금액 30,000원, CVR 3%, BEP ROAS 367%, MarginRoom 70%
→ 허용 CPC = (30,000 × 0.03) / 3.67 × 0.3 = 73원
[CPC 과다 판정]
과다 조건: 현재 CPC > 허용 CPC × 1.3
심각 조건: 현재 CPC > 허용 CPC × 1.5
예: 허용 CPC 73원, 현재 CPC 180원
→ 180 > 73 × 1.5 = 110원 → 심각 (입찰가 대폭 하향 권고)
[조언 방향성 결정]
├─ CPC > 허용CPC × 1.5 → "입찰가를 대폭 낮춰보세요"
├─ CPC > 허용CPC × 1.3 → "입찰가를 낮춰보세요"
├─ CPC ≤ 허용CPC × 1.3 AND 순이익 < 0 → "전환율 점검 필요"
└─ CPC ≤ 허용CPC AND 순이익 > 0 → "현 세팅 유지"
[검색/비검색 분리 판단]
검색 CPC > 허용CPC × 1.3 AND 비검색 CPC ≤ 허용CPC
→ "검색 입찰가를 먼저 낮춰보세요"
검색 CPC ≤ 허용CPC AND 비검색 CPC > 허용CPC × 1.3
→ "비검색 입찰가를 먼저 낮춰보세요"
※ 구체적 입찰가 권장값은 쿠팡 데이터 제약으로 제시 불가이벤트 로깅
| 이벤트명 | 트리거 | 파라미터 |
|---|---|---|
view_manual_ad_advice | 수동 광고 조언 노출 | {campaign_id, current_bid, recommended_bid} |
click_action_advice | 조언 클릭 | {advice_type: 'bid_adjust', campaign_id, target: 'search'/'nonsearch'} |
Dev Notes
수동 광고 타입
| DB 값 | 표시 | 분류 |
|---|---|---|
MANUAL | 수동 광고 | 수동 |
KEYWORD_TARGET | 키워드 타겟팅 | 수동 |
API 응답 예시
json
{
"campaignId": "456",
"adType": "manual",
"profitPer100": 8,
"profitStatus": "breakeven",
"marginRate": 25,
"advice": {
"caseCode": "P-3b",
"type": "bid_decrease",
"title": "CPC가 감당 가능한 수준보다 조금 높아요",
"message": "CPC가 살짝 높아요. 쿠팡 광고센터에서 입찰가를 낮춰보세요.",
"action": "입찰가 소폭 하향 (쿠팡에서)",
"search": {
"currentCpc": 180,
"allowedCpc": 120,
"direction": "down",
"profitPer100": 12
},
"nonsearch": {
"currentCpc": 150,
"allowedCpc": 100,
"direction": "down",
"profitPer100": -5
},
"priorityArea": "nonsearch",
"actionUrl": "https://ads.coupang.com/campaign/456/bid"
}
}※
currentBid,recommendedBid,expectedChange제거됨 (쿠팡 데이터 없음) ※ CPC 기반 방향성만 제시
### 의존성
- E-04-S-01: 순이익 번역 (profitPer100)
- E-04-S-02: Margin Room 설정
- E-03-S-01: 검색/비검색 분리 판정 로직
---
*생성일: 2026-01-20*<br>