Skip to content

Story: 순이익 번역 UI (100원당 X원)

메타

항목
Story IDE-04-S-01
EpicE-04 Phase 2 순이익 번역
상태ready-for-dev
우선순위P0
규모M
담당 개발자수민 (FE), 하록 (BE)

사용자 스토리

As a ROAS가 뭔지 잘 모르는 초보 셀러,
I want "100원당 X원 남음"으로 번역된 순이익을 보고 싶다,
So that 내 광고가 돈을 버는지 알 수 있다.


수락 기준 (Acceptance Criteria)

AC-01: 순이익 번역 표시

항목내용
Given캠페인에 원가 데이터가 입력되어 있을 때
When캠페인 카드를 볼 때
ThenROAS 옆에 "100원당 X원 남음/손해" 번역이 표시된다

AC-02: 컬러 코딩

항목내용
Given순이익 번역이 표시될 때
When값에 따라
Then양수(+30원 이상)=초록, 본전(0~30원)=노랑, 음수=빨강으로 표시
+30원 이상: "100원당 35원 남음" (초록색) → 건강
0~30원: "100원당 15원 남음" (노란색) → 본전
음수: "100원당 12원 손해" (빨간색) → 손해

※ 2026-01-26 DB 분석 결과: 10~30원 구간이 대다수 → 건강 기준 30원으로 상향

AC-03: 원가 미입력 시

항목내용
Given캠페인에 원가 데이터가 없을 때
When캠페인 카드를 볼 때
ThenROAS만 표시, 순이익 번역 미표시
And"원가를 입력하면 순이익을 계산할 수 있어요" 안내 표시

AC-04: 계산 API

항목내용
Given캠페인 데이터가 있을 때
When순이익 번역 API 호출 시
ThenprofitPer100 필드로 100원당 순이익 반환

태스크 분해

Task 1: BE - 순이익 계산 API AC-04

  • [ ] 1.1: 순이익 계산 로직 구현
    • 순이익 = 전환매출 - 상품원가 - 광고비(VAT포함)
    • 100원당 순이익 = (순이익 / 광고비) × 100
  • [ ] 1.2: 기존 캠페인 API 응답에 profitPer100 필드 추가
  • [ ] 1.3: 원가 미입력 시 null 반환

Task 2: FE - 번역 UI AC-01, AC-02, AC-03

  • [ ] 2.1: ProfitTranslation 컴포넌트 구현
  • [ ] 2.2: 컬러 코딩 (초록/노랑/빨강)
  • [ ] 2.3: 원가 미입력 시 안내 UI
  • [ ] 2.4: GA4 이벤트 (view_profit_translation)

계산 로직 상세

[계산식]
순이익 = 전환매출 - (상품원가 × 판매수량) - (광고비 × 1.1)
100원당 순이익 = (순이익 / 광고비) × 100

[예시]
광고비: 100,000원
전환매출: 441,000원 (ROAS 441%)
상품원가 합계: 300,000원
광고비 VAT포함: 110,000원
순이익: 441,000 - 300,000 - 110,000 = 31,000원
100원당: 31원

[표시 규칙]
• +30원 이상: "100원당 X원 남음" (초록) → 건강
• 0~30원: "100원당 X원 남음" (노랑) → 본전
• 음수: "100원당 X원 손해" (빨강) → 손해
• -50원 이하: "100원당 50원 이상 손해" (캡 적용)

※ 2026-01-26 DB 분석: 10~30원 구간 대다수 → 건강 기준 30원 상향

이벤트 로깅

이벤트명트리거파라미터
view_profit_translation순이익 번역 노출{campaign_id, profit_per_100}
click_cost_input_guide원가 입력 안내 클릭{campaign_id}

Dev Notes

API 응답 예시

json
{
  "campaignId": "123",
  "roas": 441,
  "profitPer100": 31,
  "profitStatus": "healthy"  // healthy | breakeven | loss
}

의존성

  • Product 테이블의 marginRate 또는 purchaseCost 필드

생성일: 2026-01-20

장사왕 Product Team