테마
Story: E-12-S-04 GA4 이벤트 트래킹
메타
| 항목 | 값 |
|---|---|
| Story ID | E-12-S-04 |
| Epic | E-12 Keyword Analysis |
| 상태 | backlog |
| 우선순위 | P1 |
| 규모 | S (1pt) |
| 담당 | FE (수민) |
| 의존성 | E-12-S-02 (테이블 UI), E-12-S-06 (제외키워드 UI) |
사용자 스토리
As a PO, I want 키워드 탭 사용 패턴을 GA4로 추적, So that 키워드 탭의 가치와 개선점을 파악할 수 있다.
수락 기준 (Acceptance Criteria)
AC-01: 키워드 탭 진입 이벤트
| 항목 | 내용 |
|---|---|
| Given | 셀러가 캠페인 상세 페이지에 있음 |
| When | "키워드" 탭 클릭 |
| Then | view_keyword_tab 이벤트 발생 |
AC-02: 정렬 변경 이벤트
| 항목 | 내용 |
|---|---|
| Given | 키워드 테이블이 표시된 상태 |
| When | 정렬 옵션 변경 |
| Then | sort_keyword_list 이벤트 발생 (sort_by, sort_order 파라미터) |
AC-03: 제외키워드 등록 이벤트
| 항목 | 내용 |
|---|---|
| Given | 전체 키워드 탭에서 키워드 선택 상태 |
| When | "제외키워드 등록" 버튼 클릭 |
| Then | add_excluded_keyword 이벤트 발생 (campaign_id, keyword_count) |
AC-04: 제외키워드 복사 이벤트
| 항목 | 내용 |
|---|---|
| Given | 제외 키워드 탭에서 키워드 선택 상태 |
| When | "복사하기" 버튼 클릭 |
| Then | copy_excluded_keyword 이벤트 발생 (campaign_id, keyword_count) |
AC-05: 제외키워드 해제 이벤트
| 항목 | 내용 |
|---|---|
| Given | 제외 키워드 탭에서 키워드 선택 상태 |
| When | "제외 해제" 버튼 클릭 |
| Then | remove_excluded_keyword 이벤트 발생 (campaign_id, keyword_count) |
AC-06: GA4 DebugView 확인
| 항목 | 내용 |
|---|---|
| Given | 이벤트가 구현됨 |
| When | 개발 환경에서 테스트 |
| Then | GA4 DebugView에서 이벤트 및 파라미터 확인 가능 |
태스크 분해
Task 1: 키워드 탭 이벤트 AC-01, AC-02
- [ ] 1.1:
view_keyword_tab이벤트 구현 - [ ] 1.2:
sort_keyword_list이벤트 구현
Task 2: 제외키워드 이벤트 AC-03, AC-04, AC-05
- [ ] 2.1:
add_excluded_keyword이벤트 구현 - [ ] 2.2:
copy_excluded_keyword이벤트 구현 - [ ] 2.3:
remove_excluded_keyword이벤트 구현
Task 3: DataLayer 연동
- [ ] 3.1: 기존 DataLayer 헬퍼 함수 활용
- [ ] 3.2: 이벤트 발생 시점에 push 호출
Task 4: 테스트 AC-06
- [ ] 4.1: GA4 DebugView에서 이벤트 확인
- [ ] 4.2: 파라미터 정확성 검증
Dev Notes
이벤트 명세
view_keyword_tab
javascript
dataLayer.push({
event: "ad_analysis",
event_name: "view_keyword_tab",
params: {
campaign_id: "camp_12345",
keyword_count: 45,
period: "7d",
has_profit_data: "Y", // 원가 입력 여부
is_demo: "N"
}
});sort_keyword_list
javascript
dataLayer.push({
event: "ad_analysis",
event_name: "sort_keyword_list",
params: {
campaign_id: "camp_12345",
sort_by: "netProfit", // netProfit | adCost | roas | impressions | clicks
sort_order: "asc", // asc | desc
keyword_count: 45,
is_demo: "N"
}
});add_excluded_keyword
javascript
dataLayer.push({
event: "ad_analysis",
event_name: "add_excluded_keyword",
params: {
campaign_id: "camp_12345",
keyword_count: 3, // 등록한 키워드 수
is_demo: "N"
}
});copy_excluded_keyword
javascript
dataLayer.push({
event: "ad_analysis",
event_name: "copy_excluded_keyword",
params: {
campaign_id: "camp_12345",
keyword_count: 5, // 복사한 키워드 수
is_demo: "N"
}
});remove_excluded_keyword
javascript
dataLayer.push({
event: "ad_analysis",
event_name: "remove_excluded_keyword",
params: {
campaign_id: "camp_12345",
keyword_count: 2, // 해제한 키워드 수
is_demo: "N"
}
});참고 구현
| 항목 | 경로 |
|---|---|
| 기존 이벤트 패턴 | AdsAnalysis/hooks/useAdsAnalysis.ts |
| DataLayer 헬퍼 | src/utils/analytics.ts |
충돌 감지
| 항목 | 상태 | 설명 |
|---|---|---|
| 기존 코드 충돌 | ✅ 없음 | 이벤트 추가만 |
References
| 출처 | 경로/링크 | 참조 섹션 |
|---|---|---|
| Epic Spec | epic-specs/E-12-keyword-analysis.md | 5. 성공 지표 - GA4 이벤트 정의 |
| E-02 이벤트 명세 | epic-specs/E-02-deep-layer.md | 6. 이벤트 트래킹 명세 |
핸드오프 전 체크리스트
- [x] 이벤트명과 파라미터가 명확한가?
- [x] 기존 이벤트 패턴과 일관성 있는가?
- [x] 의존성 명시되었는가? (E-12-S-02)
검증 결과: ✅ PASS 검증일: 2026-01-28
생성일: 2026-01-28생성자: 📋 Penny
