Skip to content

Story: 진단 결과 추천 배너 구현

메타

항목
Story IDE-08-S-08
EpicE-08 GEO 마케팅
상태ready-for-dev
우선순위P3
규모S
담당FE
의존성E-07-S-13 (추천 넛지 타이밍 정책)

사용자 스토리

As a 유료 구독자,
I want 좋은 진단 결과를 받았을 때 공유 기회를 얻고 싶다,
So that 친구에게 장사왕을 자연스럽게 추천할 수 있다.


수락 기준 (Acceptance Criteria)

AC-01: 배너 노출 조건

항목내용
Given진단 결과에서 순이익 양수 캠페인을 처음 발견했을 때
When진단 결과 페이지 하단에
Then추천 배너가 표시된다

AC-02: 배너 UI

항목내용
Given추천 배너가 표시될 때
When배너를 확인하면
Then메시지, CTA, 닫기 버튼이 포함된다

AC-03: 공유 기능 연결

항목내용
Given배너의 CTA를 클릭하면
When공유 액션이 실행될 때
Then마이페이지 추천 섹션 또는 공유 모달이 열린다

태스크 분해

Task 1: 배너 노출 조건 API

  • [ ] 1.1: 순이익 양수 캠페인 첫 발견 여부 확인
    • 이전에 양수 캠페인을 본 적 없으면 true
  • [ ] 1.2: 배너 노출 이력 저장 (7일 쿨다운)

Task 2: 배너 컴포넌트

  • [ ] 2.1: 진단 결과 하단 배너 UI
    • 아이콘, 메시지, CTA 버튼, X 버튼
  • [ ] 2.2: 조건부 렌더링 (노출 조건 충족 시)

Task 3: 공유 연동

  • [ ] 3.1: CTA 클릭 시 공유 모달 또는 마이페이지 이동
  • [ ] 3.2: 닫기 시 7일간 재노출 방지

화면 설계

진단 결과 하단 배너

┌────────────────────────────────────────────────────────────┐
│  [진단 결과 영역...]                                        │
│                                                            │
│  ─────────────────────────────────────────────             │
│                                                            │
│  ┌──────────────────────────────────────────────────────┐ │
│  │ 🎁                                               [X] │ │
│  │                                                      │ │
│  │ 이 인사이트를 셀러 친구에게도 알려주세요!             │ │
│  │                                                      │ │
│  │ 친구 추천하면 7,000원 크레딧을 드려요                 │ │
│  │                                                      │ │
│  │ [추천 코드 공유하기]                                  │ │
│  └──────────────────────────────────────────────────────┘ │
│                                                            │
└────────────────────────────────────────────────────────────┘

배너 노출 로직

typescript
// 배너 노출 조건
const shouldShowReferralBanner = (
  hasPositiveProfitCampaign: boolean,
  isFirstPositiveProfit: boolean,
  lastBannerDismissedAt: Date | null
): boolean => {
  // 1. 순이익 양수 캠페인이 있어야 함
  if (!hasPositiveProfitCampaign) return false;

  // 2. 처음 발견한 경우여야 함
  if (!isFirstPositiveProfit) return false;

  // 3. 7일 이내에 닫은 적 없어야 함
  if (lastBannerDismissedAt) {
    const daysSinceDismissed = daysDiff(lastBannerDismissedAt, new Date());
    if (daysSinceDismissed < 7) return false;
  }

  return true;
};

이벤트 로깅

이벤트파라미터
referral_banner_shownuser_id, location (diagnosis_result)
referral_banner_clickeduser_id
referral_banner_dismisseduser_id

생성일: 2026-01-20

장사왕 Product Team