테마
Story: Margin Room 설정 UI/API
메타
| 항목 | 값 |
|---|---|
| Story ID | E-04-S-02 |
| Epic | E-04 Phase 2 순이익 번역 |
| 상태 | ready-for-dev |
| 우선순위 | P0 |
| 규모 | M |
| 담당 개발자 | 수민 (FE), 하록 (BE) |
사용자 스토리
As a 광고 전략을 세우려는 셀러,
I want 내 성향(보수형/균형형/공격형)에 맞는 Margin Room을 설정하고 싶다,
So that 그에 맞는 맞춤 조언을 받을 수 있다.
수락 기준 (Acceptance Criteria)
AC-01: Margin Room 설정 페이지
| 항목 | 내용 |
|---|---|
| Given | 설정 페이지에서 |
| When | Margin Room 설정 섹션을 볼 때 |
| Then | 현재 마진율과 변동성 기반 추천 타입이 표시된다 |
AC-02: 타입 선택 및 저장
| 항목 | 내용 |
|---|---|
| Given | Margin Room 설정 화면에서 |
| When | 보수형/균형형/공격형 중 하나를 선택하고 저장하면 |
| Then | 이후 행동 조언에 선택한 설정이 반영된다 |
AC-03: 변동성 기반 추천
| 항목 | 내용 |
|---|---|
| Given | 최근 3개월 마진 데이터가 있을 때 |
| When | Margin Room 설정 화면을 볼 때 |
| Then | 변동성에 따라 타입을 추천한다 |
변동성 ±5% 이내: "공격형 가능" 추천
변동성 ±5~10%: "균형형" 추천 (기본)
변동성 ±10% 이상: "보수형 권장" 추천AC-04: 기본값 처리
| 항목 | 내용 |
|---|---|
| Given | Margin Room을 설정하지 않았거나 데이터 부족 시 |
| When | 행동 조언을 계산할 때 |
| Then | 균형형(70%) 기본 적용 |
태스크 분해
Task 1: BE - Margin Room API AC-02, AC-04
- [ ] 1.1: VendorSettings 테이블에 marginRoomType 컬럼 추가
- [ ] 1.2: GET/PUT /api/settings/margin-room 엔드포인트
- [ ] 1.3: 기본값 균형형(70%) 처리
Task 2: BE - 변동성 계산 AC-03
- [ ] 2.1: 최근 3개월 마진율 데이터 조회
- [ ] 2.2: 표준편차 기반 변동성 계산
- [ ] 2.3: 추천 타입 결정 로직
Task 3: FE - 설정 UI AC-01, AC-02
- [ ] 3.1: 설정 > Margin Room 페이지 구현
- [ ] 3.2: 마진율/변동성 표시
- [ ] 3.3: 타입 선택 라디오 버튼
- [ ] 3.4: 저장 기능
- [ ] 3.5: GA4 이벤트 (
set_margin_room)
Margin Room 타입 상세
| 타입 | 비율 | 설명 |
|---|---|---|
| 보수형 (Conservative) | 광고비 ≤ 순이익의 50% | "안전하게, 확실한 이익만" |
| 균형형 (Balanced) | 광고비 ≤ 순이익의 70% | "적당한 성장과 안전의 균형" |
| 공격형 (Aggressive) | 광고비 ≤ 순이익의 90% | "매출 성장 우선, 이익은 나중에" |
이벤트 로깅
| 이벤트명 | 트리거 | 파라미터 |
|---|---|---|
view_margin_room_settings | 설정 페이지 진입 | {current_type} |
set_margin_room | Margin Room 설정 저장 | {type: conservative/balanced/aggressive} |
Dev Notes
API 응답 예시
json
{
"marginRoom": {
"currentType": "balanced",
"avgMarginRate": 32,
"marginVolatility": 8,
"recommendedType": "balanced",
"recommendReason": "마진 변동성이 중간 수준입니다"
}
}DB 스키마
sql
ALTER TABLE VendorSettings
ADD marginRoomType ENUM('conservative', 'balanced', 'aggressive') DEFAULT 'balanced';생성일: 2026-01-20
