이벤트 수집
- autocapture는 사용하지 않는다. 모든 이벤트는 custom으로 직접 수집한다.
- 이벤트 수집은 선언형 label + 필요시 직접 track 호출
- 선언형은 이벤트 위임 + data attribute를 이용하여 구현
전역 + impressionTracker 사용 (data-analytics-impression attribute 기반)
- impression은 랩핑 컴포넌트를 이용하여 해당 컴포넌트에서 observer 사용하여 구현
- 특정 액션 직접 track 호출은 util 함수 사용
이벤트 데이터 구조화
- event_name
- 3개로 고정
- ui_action
- ui_impression
- page_viewed
- 각 이벤트별 속성 정의
ui_action
/** 이 행동이 무엇인지를 나타내는 3-level, 4-level ID (a.b.click / a.b.c.click) */
action_id: ActionId;
/** 이 행동의 타입 (click / submit / change / open / close / select / toggle) */
action_type: ActionType;
/** 어디에서 발생했나 */
surface: string;
/** 대상의 ID (subscribe_btn) */
target_id: string;
/** 대상의 타입 (button / link / tab) */
target_type: string;
/** change류 이벤트 필드 이름 (sort / date_range / search_text / etc.) */
field: string;
/** 값 (문자) 각 프로퍼티는 일관된 타입일 수록 분석 가능성이 높다. (<https://docs.mixpanel.com/docs/data-structure/property-reference/data-type>) */
value_str: string;
/** 값 (숫자) */
value_num: number;
/** 값 (불리언) */
value_bool: boolean;
/** 대상의 리스트 내 위치 등 (1 / 2 / 3 / etc.) */
position: number;
ui_impression
/** 이 노출이 무엇인지를 나타내는 ID (product.card) */
impression_id: ImpressionId;
/** 어디에서 발생했나 상위 UI 영역(맥락) */
surface: string;
/** 대상의 ID (item_7) */
target_id: string;
/** 대상의 타입 (toast / modal / popup / etc.) */
target_type: string;
이벤트 문서화
- ast 스캔을 통해 페이지, 컴포넌트명, 액션을 표로 정리
마이그레이션
- 신규프로젝트는 새롭게 개발된 sdk 기반으로 이벤트 수집
- 기존 프로젝트는 현재의 수동 track 로직 유지하며 점진적으로 마이그레이션
- 마이그레이션시 legacy event_name과 속성은 유지 (통계에 이미 사용중이기 때문에 신규 이벤트만 새로운 체계 기반으로 정의)