Statsig 입문 5편 — Product Analytics 깊이 · 6 차트 · Funnel · Retention

2026-05-17Statsig 입문에서 운영까지

Statsig 입문 5편. Product Analytics 의 깊이 풀이 — Event 모델과 설계 원칙, Metric vs Event 차이, Metrics Explorer 의 6 차트 (Metric Drilldown · Funnels · Retention · Distribution · User Journeys · Lifecycle) 각각이 답하는 질문 · 비유 · 운영 패턴, Dashboards 의 구독/PDF/자동 새로고침, Feature Gate · Experiment 와의 통합 view, naming convention · cardinality · property 설계 함정까지 풀어쓴 학습 노트.

📚 Statsig 입문에서 운영까지 · 5편 — Product Analytics 깊이 · 6 차트 · Funnel · Retention

이 글은 Statsig 입문에서 운영까지 시리즈 5편이에요. 1편 종합 · 2편 SDK Quickstart · 3편 Feature Flags 깊이 · 4편 Experiments 깊이 까지 기능 출시 + 통계적 검증 의 두 축을 봤다면, 이번 5편은 세 번째 축Product Analytics. 사용자가 실제로 어떻게 쓰는가 의 깊이.

왜 Product Analytics 가 필요한가

Feature Gate · Experiment 만으로는 답이 안 나오는 질문이 따로 있어요. 예를 들면 gate 켰을 때 결제 funnel 의 어느 step 에서 효과가 났는지, 실험 결과 숫자 너머의 진짜 사용 흐름, 재방문 사용자 vs 새 가입 의 행동 차이, 기능 도입 후 retention 변화 — 이런 질문들이에요. 이게 Product Analytics 가 답하는 자리. 1편의 4 축 중 가장 많은 시간을 쏟는 영역.

처음 만나면 헷갈리는 이유 — 차트 종류가 6개 인데 어느 차트가 어느 질문에 답하는지 가 안 보여요. 해결법 = 각 차트의 대표 질문 한 줄 잡기.

Event 모델 — 데이터 원천

모든 Product Analytics 의 원자 단위 = Event.

statsig.logEvent(user, "checkout_completed", "1500", {
  currency: "KRW",
  items_count: 3,
  payment_method: "card"
});

이 한 줄이 모든 차트의 데이터 원천. Funnel (단계별 전환) · Retention (재방문) · Cohort (가입 시점 그룹) 가 모두 event 들의 가공.

Event 의 4 구성 요소

요소 의미 예시
eventName 이벤트 이름 checkout_completed
value 숫자/문자 (정량) 1500 (결제 금액)
metadata 속성 묶음 {currency, items_count, ...}
timestamp 자동 (서버 시각) (자동)

여기서 시험 함정이 하나 있어요 — event 설계가 끝까지 영향. 처음 박은 eventName · property 가 미래의 모든 분석을 결정. 첫 박을 때 잘 박기 가 운영의 핵심.

Event 설계 원칙

원칙 1: 동사 + 명사

✓ checkout_completed   (결제 완료)
✓ item_added_to_cart    (장바구니 추가)
✓ video_played           (동영상 재생)
✗ checkout                (모호 — 시작? 완료? 실패?)
✗ user_action             (너무 일반)

동사 = 무엇이 일어났는지, 명사 = 무엇에 대해. 시제도 과거형 (completed) 권장.

원칙 2: 일관된 naming convention

snake_case 통일:
  checkout_completed
  item_added_to_cart

또는 camelCase 통일:
  checkoutCompleted
  itemAddedToCart

한 코드베이스 내 혼용 금지. 2편의 함정 4checkoutCompletedcheckout_completed두 event 로 갈림.

원칙 3: Cardinality 통제

Cardinality = 한 property 의 unique 값 개수.

✓ payment_method: "card" / "kakao_pay" / "naver_pay"   (3~5 종)
✓ tier: "free" / "premium" / "enterprise"               (3 종)
✗ user_id: "user-123", "user-456", ... (수백만 종)
✗ session_id: 매번 새 UUID                                (무한)

High cardinality property = 메모리·쿼리 폭증 + dashboard 사용 불가. userID 는 property 가 아닌 user identifier, session_id 는 차트 dimension 아님.

→ property 는 분류 가능한 카테고리 만.

원칙 4: Property 표준화

// 모든 결제 event 가 같은 property 구조
statsig.logEvent(user, "checkout_started", null, {
  cart_value: 50000,
  items_count: 3,
  currency: "KRW"
});

statsig.logEvent(user, "checkout_completed", "50000", {
  cart_value: 50000,
  items_count: 3,
  currency: "KRW",
  payment_method: "card"
});

같은 funnel 안의 event = 공통 property + 단계별 추가 property. funnel 분석이 깔끔.

원칙 5: value vs property

✓ logEvent(user, "purchase", "50000", {...})
  → value = 결제 금액 (집계 가능한 숫자)

✓ logEvent(user, "video_played", "120", {...})
  → value = 재생 시간 (초)

✗ logEvent(user, "purchase", "card", {...})
  → value 에 categorical 박지 X — property 로!

value = 정량 (sum · avg 가능), property = 정성 (분류). 헷갈리면 "이걸 sum 할 의미가 있나?" 자문.

Metric vs Event — 두 단어의 정확한 차이

여기서 처음 헷갈리는 자리 하나 — EventMetric 이 같은 거 아닌가?

Event = 단일 발생

event 'checkout_completed' = 사용자가 결제 완료한 *1 회 사건*

raw data. 언제 · 누가 · 어떤 property 로 발생.

Metric = Event 의 집계 정의

Metric "Daily Conversions" = COUNT(checkout_completed) / DAU
Metric "Total Revenue" = SUM(checkout_completed.value)
Metric "Average Order Value" = AVG(checkout_completed.value)

Event 들의 집계 + 비즈니스 의미 부여.

항목 Event Metric
단위 단일 발생 집계값
저장 raw log 집계 정의
사용 차트 input 차트 output / 실험 primary metric

→ Experiment 의 Primary Metric (4편) = event 가공해서 만든 metric.

Metric 종류

유형 정의
Count event 발생 횟수
Sum event value 합계
Mean event value 평균
Ratio event A / event B (전환율 등)
Funnel step 별 통과율
Retention N 일/주/월 후 재방문
Time to Event event 발생까지 걸린 시간

→ 이게 6 차트의 input 종류.

Metrics Explorer 의 6 차트 — 깊이 풀이

차트 1: Metric Drilldown — 한 메트릭 깊이 보기

답하는 질문 — "이 메트릭이 시간 따라 어떻게 변하는가? segment 별로 차이가 있는가?"

비유 — 매출 그래프를 날짜 · 국가 · 디바이스 별로 여러 각도 에서 보는 도구.

대표 사용:

  • 일별 매출 trend
  • 국가별 결제 전환율 비교
  • iOS vs Android 평균 주문 금액
  • 시간대별 활성 사용자

옵션:

  • Date range — 7일 · 30일 · 90일 · custom
  • Granularity — 시간 · 일 · 주 · 월
  • Group by — country · device · custom property
  • Filter — 특정 사용자 segment

차트 2: Funnels — 단계별 전환율

답하는 질문 — "사용자가 어느 단계에서 이탈 하는가? 전체 funnel 의 bottleneck (병목) 어디?"

비유 — 깔때기 위에 사용자 100명 부으면 단계마다 빠지고 마지막엔 몇 명 남는가.

대표 사용:

Funnel "결제 완료까지":
  1. landing_page_viewed     100,000  (100%)
  2. product_viewed           75,000   (75%)
  3. cart_added               25,000   (25%)   ← 큰 drop !
  4. checkout_started         15,000   (15%)
  5. checkout_completed       12,000   (12%)

3단계 cart_added 의 drop 이 큼 = product view → cart add 사이 의 UX 검토 필요.

Funnel 설계 옵션:

  • Step 간 시간 제한24시간 안 N 단계 모두 통과 (오래 걸린 사용자 제외)
  • Step 간 순서 — strict (정확한 순서) vs loose (어떤 순서든)
  • First-touch vs Recent-touch — 어느 시점 user 기준

차트 3: Retention — 재방문율 곡선

답하는 질문 — "가입한 사용자가 N일 후에도 돌아오는가? retention curve 의 모양 이 어떻게 변하는가?"

비유 — 6월 1일 가입한 100명 중 6월 2일 · 3일 · 7일 · 30일 에 다시 온 사람 비율.

대표 차트 모양 = 시간에 따라 감소하는 곡선. 좋은 제품 = 완만한 감소 + 일정 plateau 도달.

Retention 종류:

종류 정의
Day N Retention N일째 정확히 활동 (1·7·14·30일)
Rolling Retention N일 이후 어느 시점 에서 활동
Bracket Retention N일 전후 범위 내 활동

대부분 시작 = D1 · D7 · D30 Retention. D7 Retention제품의 long-term health 의 핵심 지표.

Cohort 분석 (Cohort = 같은 시점에 가입/유입된 사용자 묶음):

  • 주별 가입 cohort (week-of-signup)
  • 각 cohort 의 retention curve 비교
  • 최근 cohort 가 더 높은 retention = 제품 개선 효과

차트 4: Distribution — 분포 분석

답하는 질문 — "이 값이 어떻게 분포 되어 있는가? 평균만으로 안 보이는 long tail 이 있는가?"

비유평균 주문 금액 50,000원 의 함정. 대부분 10,000원 + 소수 1,000,000원 일 수도. histogram 으로 진짜 분포 확인.

대표 사용:

  • 사용자별 주문 횟수 분포 (1회 사용자 vs 매월 사용자)
  • 결제 금액 분포 (소액 vs 고액)
  • 페이지 체류시간 분포
  • 세션 길이 분포

중요한 통찰 — 평균 (mean) vs 중앙값 (median) vs P90 · P99 비교. long tail 비즈니스 (e-commerce · 광고) 는 Distribution 차트 가 필수.

차트 5: User Journeys — Sankey 다이어그램

답하는 질문 — "사용자가 실제로 거치는 경로 가 어떻게 되는가? 예상한 흐름과 다른가?"

비유 — funnel 이 고정된 step 순서 라면 User Journey 는 실제 자유로운 흐름. 어디서 와서 어디로 가는지 의 양방향 traffic.

대표 표시 방식 = Sankey 다이어그램 (흐름의 두께로 양을 보여주는 띠 그림) — 시작 event 에서 다음 event 들두께가 비율 인 흐름.

landing_page → (40%) product_viewed → (60%) cart_added → (50%) checkout_started
              ↓ (35%) search_started → ...
              ↓ (25%) about_viewed → ...

대표 사용:

  • 첫 방문 후 N step 의 흐름 분석
  • 예상치 못한 path 발견
  • 주요 entry point 별 사용자 행동

차트 6: Lifecycle — 사용자 상태 전환

답하는 질문 — "사용자가 활성 → 비활성 → 이탈 어떻게 흐르는가? churn rate 어디서 발생?"

비유 — 회사 사원 재직 → 휴직 → 퇴직전환 비율.

Lifecycle 의 사용자 상태:

상태 정의
New 처음 활동
Active 이번 기간 활동
Returning 이전 비활성에서 다시 옴
Dormant 한동안 활동 없음
Churned 영구 이탈 (긴 기간 무활동)

중요 metric:

  • Reactivation rate — Dormant → Active 전환율
  • Churn rate — Active → Churned 비율
  • Net change — 새 가입 - 이탈

대표 사용 = 제품의 health 평가. new 만 늘고 churn 도 늘면 net 0 = 제자리.

차트 별 핵심 한 줄

차트 한 줄
Metric Drilldown 한 메트릭의 시간/segment 별 변화
Funnels 단계별 어디서 이탈
Retention N일 후 재방문 (장기 health)
Distribution long tail · 평균 함정
User Journeys 자유 경로의 실제 흐름
Lifecycle 사용자 상태 전환 (churn · reactivation)

→ 각 차트 = 다른 도메인 질문. 한 dashboard 에 여러 차트 묶어 종합 view.

Dashboards — 통합 view

Dashboard 는 중요한 insight 를 공유 하는 좋은 방법. 차트 + 텍스트 + 단일값 + Feature Gate/실험 snapshot 까지 묶음. — 공식 docs

Dashboard 의 구성 요소

요소 의미
Chart 6 차트 종류
Text 맥락 설명 · 섹션 헤더
Single Value 핵심 KPI 큰 숫자 표시
Feature Gate snapshot 현재 rollout 상태
Experiment snapshot 진행 중 실험 결과

데이터 + 운영 상태 가 한 화면에. 의사결정 회의의 표준 자료.

운영 기능

  • Export to PDF — 정적 버전 저장 (보고서 첨부)
  • Subscriptionsemail/Slack 으로 정기 snapshot 전송 (daily · weekly)
  • Duplicate — 기존 dashboard 복제 + 빠른 새 버전
  • Auto Refresh — 백그라운드 쿼리 + 캐시 → 즉시 표시
  • Filter — 전역 필터 (모든 widget 동시 적용)
  • Date range — 기본값 · 임시 변경

Dashboard 의 위계 패턴

대시보드 1: "Executive KPI" (경영진용)
  - 일/주/월 매출 · 전환율 single value
  - 핵심 metric drilldown
  - Top 3 진행 중 실험 snapshot

대시보드 2: "Product Health" (PM 용)
  - D1/D7/D30 retention curve
  - 핵심 funnel + 단계별 drop
  - User journey 의 주요 path

대시보드 3: "Feature Rollouts" (엔지니어링용)
  - 활성 Feature Gate 들 + rollout %
  - 진행 중 실험 + p-value
  - 메트릭 alert

각 역할별 맞춤 dashboard + 주기적 review.

Feature Gate · Experiment · Analytics 통합 view

Statsig 의 차별점 — 세 축이 한 데이터 흐름.

통합 query 의 예

질문 1: "새 결제 flow gate 켠 사용자의 결제 funnel 변화?"

1. Feature Gate "new_checkout" Pass 사용자 vs Fail 사용자 segment
2. 각 segment 의 결제 funnel 차트 비교
3. 단계별 drop rate 차이

질문 2: "실험의 primary metric 외 다른 funnel 영향?"

1. Experiment "button_color" 의 control vs treatment 사용자
2. Retention curve · Lifecycle 분포 비교
3. 의도하지 않은 side effect 발견

질문 3: "Holdout 5% vs 나머지 의 long-term retention 차이?" (Holdout = 모든 실험에서 제외해 둔 기준 그룹, 3편 참고)

1. Holdout segment (3편) 의 D30 retention
2. Non-holdout 의 D30 retention
3. 1년간 모든 새 기능의 누적 효과 측정

별도 도구 (Optimizely + Mixpanel) 로는 stitching 부담 큰 query 가 Statsig 에서는 자연스럽게 한 클릭.

자주 만나는 사고 — Product Analytics 운영

사고 1: Event name 혼용

원인checkoutCompletedcheckout_completed프론트 다른 위치 · 다른 SDK 에서 혼용.

해결 — 2편의 event name 상수 패턴. 한 코드베이스 = 한 convention.

사고 2: Property cardinality 폭증

원인user_id · session_id · request_id 를 property 로 박음.

해결high cardinality 값 = property 아닌 dimension 만. user 단위 분석은 user identifier 따로.

사고 3: Funnel step time window 너무 짧음

원인1시간 안 5 step 통과 조건 → 대부분 사용자는 며칠 걸려서 funnel 통과 X.

해결 — 사용자의 실제 행동 패턴 에 맞는 time window (24시간 · 7일).

사고 4: Retention 의 활동 정의 불명

원인"D7 retention"어떤 event 기준 인지 모호.

해결명시적 활동 event 정의 (session_started · app_opened 등). dashboard 에 명시.

사고 5: Distribution 무시 → 평균 함정

원인평균 주문 금액 + 7% 증가 라 ship → 실제는 상위 5% 의 일시 증가, 나머지 변화 없음.

해결Distribution 차트median · P90 · P99 함께 확인.

사고 6: User Journey 너무 깊게

원인10+ step 의 흐름 분석 → 거의 모든 사용자 unique path → 통찰 X.

해결3~5 step 으로 압축. 주요 entry / exit point 우선.

사고 7: Dashboard 의 outdated 데이터

원인 — 자동 refresh 미설정 → 보고서에 3일 전 데이터.

해결Auto Refresh 설정 (daily · hourly).

사고 8: Event 추가 시 기존 분석 깨짐

원인purchase event 의 property 스키마 변경 (예: currency 추가) → 과거 데이터 호환 X.

해결property 추가는 OK, 변경/제거는 새 event. 또는 event versioning (purchase_v2).

운영 권장 패턴

Pattern 1: Event Naming Spec 문서

# Event Naming Convention

## 규칙
- snake_case
- 동사_명사 형식
- 과거형 (completed, viewed, clicked)
- 단복수 일치 (item_*, items_*)

## 표준 도메인 event
### Auth
- `signup_started`
- `signup_completed`
- `login_completed`
- `logout`

### Commerce
- `product_viewed`
- `item_added_to_cart`
- `cart_viewed`
- `checkout_started`
- `checkout_completed`
- `refund_requested`

### Engagement
- `session_started`
- `notification_clicked`
- `feature_used` (with feature_name property)

코드베이스의 문서로 박아둠 + 새 event 박을 때 review.

Pattern 2: Event 정의 상수화 + lint

// types/events.ts
export const EVENT = {
  SIGNUP_COMPLETED: "signup_completed",
  CHECKOUT_COMPLETED: "checkout_completed",
  // ...
} as const;

export type EventName = typeof EVENT[keyof typeof EVENT];

// 사용
statsig.logEvent(user, EVENT.CHECKOUT_COMPLETED, value, props);

오타 = 컴파일 에러. runtime 에 새 event 박는 것 = lint 경고.

Pattern 3: Event 추적 wrapper

class Analytics {
  trackCheckoutCompleted(user: User, value: number, items: number, method: string) {
    statsig.logEvent(user, EVENT.CHECKOUT_COMPLETED, String(value), {
      cart_value: value,
      items_count: items,
      payment_method: method
    });
  }

  trackProductViewed(user: User, productId: string, category: string) {
    statsig.logEvent(user, EVENT.PRODUCT_VIEWED, null, {
      product_id: productId,
      category: category
    });
  }
}

event name + property 구조한 곳 정의. 호출자는 typed 메서드 만. 일관성 자동 보장.

Pattern 4: Dashboard 위계

Tier 1 (Executive · Weekly review):
  - 주간 매출 · 신규 가입 · DAU
  - Top 진행 실험 snapshot

Tier 2 (Product · Daily check):
  - 핵심 funnel + 단계별 drop
  - D7/D30 retention curve
  - 활성 Feature Gate 상태

Tier 3 (Engineering · 즉시 확인):
  - 메트릭 alert
  - 에러 event 추적
  - 인프라 성능

각 청중별 맞춤 dashboard + 주기적 review.

Pattern 5: Subscription 자동화

Daily Email Subscription (07:00 AM):
  - 어제 매출 · 신규 가입 · 활성 사용자 single values
  - 핵심 funnel chart

Weekly Slack Subscription (월요일):
  - 주간 핵심 metric 변화
  - 종료된 실험 결과
  - 새 시작 실험 안내

수동 dashboard check 없이 자동 받음. 문제 발생 시 즉시 인지.

Pattern 6: Cohort 정기 분석

매주 월요일 자동:
  - 지난 주 가입 cohort 의 D1 retention 측정
  - 4주 전 cohort 의 D30 retention 측정
  - 최근 10 cohort 의 retention curve 비교

cohort 별 retention 추세 = 제품 개선의 핵심 long-term 지표.

시험 직전 한 번 더 — Product Analytics 깊이 함정 압축 노트

  • Product Analytics = 1편의 4 축 중 사용자 행동 분석
  • Event = 단일 발생 (raw data)
  • Metric = event 의 집계 정의 (count · sum · ratio · funnel · retention)
  • Experiment 의 Primary Metric (4편) = metric
  • Event 4 구성 = eventName · value · metadata · timestamp
  • Event 설계 원칙 5종:
  • 동사_명사 (checkout_completed)
  • naming convention 통일 (snake_case)
  • Cardinality 통제 — user_id · session_id 는 property X
  • Property 표준화 (funnel 안 event 공통 property)
  • value (정량 sum) vs property (정성 분류)
  • Metric Type 7종 = Count · Sum · Mean · Ratio · Funnel · Retention · Time to Event
  • 6 차트 = Metric Drilldown · Funnels · Retention · Distribution · User Journeys · Lifecycle
  • Metric Drilldown = 한 메트릭의 시간/segment 변화 (group by · filter)
  • Funnels = 단계별 이탈 (bottleneck 발견)
  • Funnel 옵션 = step 간 시간 제한 · 순서 strict/loose · first/recent touch
  • Retention = N일 후 재방문 곡선
  • Retention 종류 = Day N · Rolling · Bracket
  • D7 retention = long-term health 핵심
  • Cohort 분석 = 주별 가입 그룹 비교
  • Distribution = histogram · long tail · 평균 함정 회피
  • mean vs median vs P90/P99 비교
  • User Journeys = Sankey · 자유 경로 흐름
  • Lifecycle = 사용자 상태 전환 (New · Active · Returning · Dormant · Churned)
  • Reactivation rate · Churn rate · Net change
  • Dashboards = 차트 + 텍스트 + 단일값 + Gate/실험 snapshot
  • 기능 — Export PDF · Subscriptions (email/Slack) · Duplicate · Auto Refresh · Filter
  • 위계 패턴 — Tier 1 (Executive) · Tier 2 (Product) · Tier 3 (Engineering)
  • Feature Gate · Experiment · Analytics 통합 view = Statsig 차별점
  • gate Pass/Fail 별 funnel 비교 · experiment side effect · Holdout long-term retention
  • 함정 — Event name 혼용 → 상수화 + lint
  • 함정 — Cardinality 폭증 → high cardinality 는 dimension X
  • 함정 — Funnel time window 너무 짧음
  • 함정 — Retention 활동 정의 불명 → 명시적 활동 event
  • 함정 — Distribution 무시 → 평균만 보면 함정
  • 함정 — User Journey 너무 깊게 → 3~5 step
  • 함정 — Dashboard outdated → Auto Refresh
  • 함정 — Event property 변경 → versioning (event_v2)
  • 패턴 — Event Naming Spec 문서
  • 패턴 — TypeScript event 상수 + typed wrapper
  • 패턴 — Analytics 추적 클래스 (event name + property 한 곳 정의)
  • 패턴 — Dashboard 위계 (역할별 맞춤)
  • 패턴 — Subscription 자동화 (daily email · weekly Slack)
  • 패턴 — Cohort 정기 분석 (주별 retention 추세)

공식 문서: Product Analytics Overview · Dashboards 에서 원문을 확인할 수 있어요.

시리즈 다른 편 (앞뒤 글 모음)

이전 글:

다음 글:

※ 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

답글 남기기

error: Content is protected !!