테마
Story: 키워드별 순이익 분석
메타
| 항목 | 값 |
|---|---|
| Story ID | E-04-S-05 |
| Epic | E-04 Phase 2 순이익 번역 |
| 상태 | ready-for-dev |
| 우선순위 | P1 |
| 규모 | L |
| 담당 개발자 | 수민 (FE), 하록 (BE) |
사용자 스토리
As a 수동 광고로 키워드를 직접 관리하는 셀러,
I want 어떤 키워드가 돈을 벌고 어떤 키워드가 손해인지 알고 싶다,
So that 키워드별로 입찰가를 조정하거나 제외할 수 있다.
수락 기준 (Acceptance Criteria)
AC-01: 키워드별 순이익 표시
| 항목 | 내용 |
|---|---|
| Given | 캠페인에 키워드가 등록되어 있을 때 |
| When | 키워드 분석 섹션을 볼 때 |
| Then | 키워드별 "100원당 X원" 순이익이 표시된다 |
AC-02: 키워드 분류
| 항목 | 내용 |
|---|---|
| Given | 키워드 목록이 표시될 때 |
| When | 순이익에 따라 분류하면 |
| Then | 🟢수익/🟡본전/🔴손해로 분류되어 표시된다 |
🟢 수익: 100원당 +20원 이상 → "유지 추천"
🟡 본전: 100원당 0~+20원 → "입찰가 10~20% 하향"
🔴 손해: 100원당 음수 → "입찰가 30%+ 하향 또는 제외"AC-03: 키워드별 조언 (방향성)
| 항목 | 내용 |
|---|---|
| Given | 손해/본전 키워드가 있을 때 |
| When | 해당 키워드를 볼 때 |
| Then | "입찰가 낮추기" 또는 "제외 검토" 방향성 조언이 표시된다 |
⚠️ 데이터 제약: 키워드별 입찰가는 쿠팡 스크랩 데이터에 없어 구체적 값 제시 불가
AC-04: 요약 정보
| 항목 | 내용 |
|---|---|
| Given | 키워드 분석 화면에서 |
| When | 요약 섹션을 볼 때 |
| Then | 수익/본전/손해 키워드 개수가 요약되어 표시된다 |
AC-05: 데이터 부족 처리
| 항목 | 내용 |
|---|---|
| Given | 키워드의 클릭 수가 10건 미만일 때 |
| When | 키워드 목록을 볼 때 |
| Then | "데이터 부족"으로 표시하고 분석에서 제외 |
태스크 분해
Task 1: BE - 키워드 순이익 계산 API AC-01, AC-05
- [ ] 1.1: 키워드별 광고 데이터 집계
- [ ] 1.2: 키워드별 순이익 계산 (전환 상품 원가 매핑 필요)
- [ ] 1.3: 100원당 순이익 계산
- [ ] 1.4: 클릭 10건 미만 필터링
Task 2: BE - 키워드 분류 및 조언 AC-02, AC-03, AC-04
- [ ] 2.1: 수익/본전/손해 분류 로직 (건강 기준 30원)
- [ ] 2.2:
키워드별 권장 입찰가 계산→ 방향성만 제시 (입찰가 데이터 없음) - [ ] 2.3: 허용 CPC vs 현재 CPC 비교
- [ ] 2.4: 요약 정보 집계
Task 3: FE - 키워드 분석 UI AC-01~AC-05
- [ ] 3.1: 키워드 분석 페이지/섹션
- [ ] 3.2: 키워드 목록 컴포넌트 (정렬, 필터)
- [ ] 3.3: 상태별 컬러 코딩 (🟢🟡🔴)
- [ ] 3.4: 키워드별 조언 표시
- [ ] 3.5: 요약 카드
- [ ] 3.6: 쿠팡 광고센터 연결 버튼
- [ ] 3.7: GA4 이벤트 (
view_keyword_analysis)
데이터 제약사항 (2026-01-26)
⚠️ 쿠팡 광고 스크랩 데이터 한계로 인한 제약
| 데이터 | 상태 | 대안 |
|---|---|---|
| 키워드별 입찰가 | ❌ 없음 | 방향성만 제시 ("입찰가 낮추기") |
| 권장 입찰가 | ❌ 계산 불가 | 허용 CPC 대비 현재 CPC 비교 |
키워드 분류 기준
| 상태 | 조건 | 조언 |
|---|---|---|
| 🟢 수익 | 100원당 +30원 이상 | 유지 |
| 🟡 본전 | 100원당 0~+30원 | 입찰가 낮추기 (쿠팡에서) |
| 🔴 손해 | 100원당 음수 | 입찰가 낮추기 또는 제외 검토 |
| ⚪ 부족 | 클릭 < 10건 | 데이터 부족, 분석 제외 |
※ 구체적 입찰가 권장값은 쿠팡 데이터 제약으로 제시 불가
이벤트 로깅
| 이벤트명 | 트리거 | 파라미터 |
|---|---|---|
view_keyword_analysis | 키워드 분석 진입 | {campaign_id, keyword_count} |
click_keyword_action | 키워드 조언 클릭 | {campaign_id, keyword, action_type} |
Dev Notes
API 응답 예시
json
{
"campaignId": "456",
"summary": {
"profitable": 8,
"breakeven": 7,
"loss": 5,
"insufficientData": 3
},
"keywords": [
{
"keyword": "강아지 간식",
"clicks": 150,
"cost": 25000,
"revenue": 120000,
"profitPer100": 35,
"status": "profitable",
"currentCpc": 167,
"allowedCpc": 200,
"advice": {
"type": "maintain",
"direction": null,
"message": "수익 나고 있어요. 유지하세요."
}
},
{
"keyword": "강아지 사료",
"clicks": 80,
"cost": 16000,
"revenue": 40000,
"profitPer100": 15,
"status": "breakeven",
"currentCpc": 200,
"allowedCpc": 150,
"advice": {
"type": "decrease_bid",
"direction": "down",
"message": "쿠팡 광고센터에서 입찰가를 낮춰보세요."
}
},
{
"keyword": "애견용품",
"clicks": 60,
"cost": 12000,
"revenue": 15000,
"profitPer100": -12,
"status": "loss",
"currentCpc": 200,
"allowedCpc": 100,
"advice": {
"type": "exclude_or_decrease",
"direction": "down",
"message": "입찰가를 낮추거나 제외를 검토하세요."
}
}
]
}※
currentBid,recommendedBid제거됨 (쿠팡 데이터 없음) ※ CPC 기반 방향성만 제시
### 주의사항
- 키워드별 전환 상품과 원가를 정확히 매핑해야 함
- 다수 상품 전환 시 평균 원가 적용
### 의존성
- E-04-S-01: 순이익 번역
- E-04-S-02: Margin Room 설정
- E-02-S-02: 검색/비검색 API (keyword IS NOT NULL)
---
*생성일: 2026-01-20*<br>