Skip to content

feat: 게스트 차단 지점별 GA location 계측 추가 - #695

Open
ychany wants to merge 1 commit into
devfrom
feat/652-guest-block-analytics
Open

ychany wants to merge 1 commit into
devfrom
feat/652-guest-block-analytics

Conversation

@ychany

@ychany ychany commented Sep 18, 2026

Copy link
Copy Markdown
Member

작업 요약

  • 게스트 차단 지점 7곳에 노출·클릭 이벤트를 답니다
  • 차단 지점에서 로그인으로 넘어갈 때 유입 지점을 가입 완료 이벤트까지 전달합니다

작업 세부 내용

배너와 분리된 이벤트 신설

배너에는 이미 계측이 있었지만 차단 화면은 전부 무계측이었습니다. 기존 배너 이벤트에 location만 늘려 섞으면, 성격이 다른 두 행동이 한 차원에 담겨 측정 중인 배너 클릭률이 오염됩니다.

구분 사용자 상태 이벤트
배너 지나가다 봄 guest_banner_view · guest_banner_cta_click
차단 하려다 막힘 guest_block_view · guest_block_cta_click

기존 배너 이벤트와 location 값은 한 줄도 바꾸지 않았습니다.

차단 지점 7곳

지점 location
홈 위시 담기 카드 home_wish_add
홈 토너먼트 만들기 카드 home_tournament_create
위시 탭 wish_tab
토너먼트 탭 tournament_tab
알림 탭 notification_tab
영수증 저장 버튼 receipt_save
그룹 결과 마스킹 group_result_mask

값 목록은 consts/guestBlockLocation.ts 한 곳에 정의해 지점별 하드코딩을 막았습니다.

로깅을 공통 컴포넌트에 내장

차단 화면 6곳이 LoginRequired 하나를 공유하고 있었습니다. 노출·클릭 로깅을 그 안에 넣고 location 을 필수 prop 으로 받게 했습니다.

  • 지점별로 로깅 코드를 흩뿌리지 않습니다
  • 차단 지점이 늘어도 prop 하나만 넘기면 됩니다
  • 누락하면 타입 체크가 잡습니다

그룹 결과 마스킹은 LoginRequired 가 아닌 자체 링크 구조라 개별로 달았습니다.

가입 전환까지 연결

이슈의 "여력이 되면" 항목입니다. #668 에서 만든 유틸이 있어 추가 비용이 거의 없었습니다.

차단 지점에서 로그인을 누르면 유입 지점을 세션에 남기고, 가입 완료 이벤트의 source 로 실어 보냅니다. 지점별 클릭률뿐 아니라 실제 가입 기여를 볼 수 있습니다.

그 과정에서 loginSource 화이트리스트에 차단 지점 값을 등록했습니다. 미등록 값은 읽을 때 걸러져 가입 이벤트에 실리지 않습니다.

범위

배포 시 확인

  • GA 관리 화면에 location 이 이벤트 범위 맞춤 측정기준으로 등록돼 있어야 지점별로 분해됩니다. 배너 때 등록했다면 같은 파라미터명이라 그대로 동작합니다
  • 새 이벤트 2종은 GA 가 자동 수집하므로 별도 등록이 필요 없습니다
  • 디자인팀 공유용 명세는 위 "차단 지점 7곳" 표와 이벤트 2종입니다

연관 이슈

closes #652

Summary by CodeRabbit

  • 개선 사항
    • 비회원이 위시·대회·알림·결과 저장 등 주요 기능에 접근할 때, 상황에 맞는 로그인 안내가 제공됩니다.
    • 로그인 안내에서 시작 지점을 기억해 로그인 후에도 유입 경로가 유지됩니다.
    • 게스트 차단 화면 노출 및 로그인 버튼 클릭 현황을 지점별로 추적할 수 있습니다.

- 차단 지점 전용 이벤트 2종 신설: guest_block_view · guest_block_cta_click
  - 원인: 배너는 지나가다 보는 것, 차단은 하려다 막힌 순간이라 전환 의도가 다름
  - 결과: 기존 배너 이벤트·location 값 무변경, 배너 클릭률 지표 오염 없음
- location 값 7종을 consts/guestBlockLocation 한곳에 정의
  - 원인: 지점별 문자열 하드코딩 방지
- LoginRequired 에 계측 내장, location 을 필수 prop 으로 주입
  - 원인: 차단 화면 6곳이 이 컴포넌트를 공유
  - 결과: 노출·클릭 로깅이 한 곳, 누락은 타입 체크가 검출
- 그룹 결과 마스킹은 개별 계측
  - 원인: LoginRequired 가 아닌 자체 링크 구조
- 차단 지점에서 로그인 유입 지점을 세션에 기록
  - 결과: 가입 완료 이벤트의 source 로 이어져 지점별 전환율 산출
  - 참조: #668 에서 만든 loginSource 유틸 재사용
- loginSource 화이트리스트에 차단 지점 값 추가
  - 원인: 미등록 값은 읽을 때 걸러져 가입 이벤트에 안 실림
@ychany ychany linked an issue Sep 18, 2026 that may be closed by this pull request
@vercel

vercel Bot commented Sep 18, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
piki Ready Ready Preview Sep 18, 2026 6:13am UTC
1 Skipped Deployment
Project Deployment Actions Updated
piki-notify Skipped Skipped Sep 18, 2026 6:13am UTC

@github-actions github-actions Bot added feature New feature or request WEB labels Sep 18, 2026
@github-actions
github-actions Bot requested a review from iOdiO89 September 18, 2026 06:14
@coderabbitai

coderabbitai Bot commented Sep 18, 2026

Copy link
Copy Markdown

Review Change StackReview Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Advanced

Run ID: ba4e123f-73fc-4423-80ab-685c24fd7615

📥 Commits

Reviewing files that changed from the base of the PR and between 4eb9c7e and f611663.

📒 Files selected for processing (11)
  • apps/web/src/app/archive/tournament/layout.tsx
  • apps/web/src/app/archive/wish/layout.tsx
  • apps/web/src/app/home/_components/AddWishHomeDialog.tsx
  • apps/web/src/app/home/_components/CreateTournamentDialog.tsx
  • apps/web/src/app/notification/layout.tsx
  • apps/web/src/app/tournament/[id]/result/_components/ResultClient.tsx
  • apps/web/src/app/tournament/[id]/result/group/_components/ChooserLockOverlay.tsx
  • apps/web/src/components/common/login-required/index.tsx
  • apps/web/src/consts/analytics.ts
  • apps/web/src/consts/guestBlockLocation.ts
  • apps/web/src/utils/loginSource.ts

Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review.


📝 Walkthrough

Walkthrough

게스트 차단 위치 상수와 전용 분석 이벤트를 추가했다. LoginRequired 및 그룹 결과 마스킹에서 노출·CTA 클릭을 기록하고, 로그인 유입 위치를 저장한다. 각 차단 지점에 고유한 위치 값을 연결했다.

Changes

게스트 차단 계측

Layer / File(s) Summary
계측 계약과 로그인 소스 확장
apps/web/src/consts/analytics.ts, apps/web/src/consts/guestBlockLocation.ts, apps/web/src/utils/loginSource.ts
게스트 차단 노출·CTA 클릭 이벤트와 7개 차단 위치를 추가했다. 로그인 소스 저장·소비 타입이 차단 위치를 포함하도록 확장됐다.
공통 로그인 유도 계측
apps/web/src/components/common/login-required/index.tsx
LoginRequired가 노출 및 CTA 클릭 이벤트를 기록하고, 로그인 이동 전에 location을 로그인 소스로 저장한다.
차단 지점별 위치 연결
apps/web/src/app/archive/*/layout.tsx, apps/web/src/app/home/_components/*, apps/web/src/app/notification/layout.tsx, apps/web/src/app/tournament/[id]/result/...
위시·토너먼트·알림·홈·영수증 차단 UI에 위치 값을 전달한다. 그룹 결과 마스킹은 별도로 노출·클릭 이벤트와 로그인 소스를 기록한다.

Priority: ➖ Normal

Estimated code review effort: 3 (Moderate) | ~20 minutes

Change: Feature

Suggested reviewers: iodio89

Sequence Diagram(s)

sequenceDiagram
  participant GuestBlockUI
  participant LoginRequired
  participant Analytics
  participant LoginSource
  GuestBlockUI->>LoginRequired: location을 전달해 렌더링
  LoginRequired->>Analytics: GUEST_BLOCK_VIEW 기록
  GuestBlockUI->>LoginRequired: 로그인 CTA 클릭
  LoginRequired->>Analytics: GUEST_BLOCK_CTA_CLICK 기록
  LoginRequired->>LoginSource: location 저장
Loading

Merge Risk: ⚪ Minimal · up to f6116

Guest-block views and login CTA clicks are recorded with their configured locations, and the selected location is forwarded to signup completion without local validation failures.

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Linked Issues check ⚠️ Warning 직접 연결된 #652는 프리뷰 계정 확인 문구를 포함한 모든 차단 지점에 노출·CTA 계측을 요구합니다. 변경 사항은 guest_block_viewguest_block_cta_click을 신설하고, GUEST_BLOCK_LOCATION에 위치를 통합했으며, 홈 위시 추가·홈 토너먼트 생성·위시 탭·토너먼트 탭·알림 탭·영수증 저장·그룹 결과 … 프리뷰 계정 확인 문구의 차단 UI에 GUEST_BLOCK_LOCATION 값을 추가하고 guest_block_viewguest_block_cta_click 계측을 적용하십시오. 해당 UI가 같은 릴리즈에 포함되는지 확인하십시오.
Docstring Coverage ⚠️ Warning Docstring coverage is 12.50% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 8 functions across 11 files. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed 풀 리퀘스트 제목은 게스트 차단 지점별 GA location 계측 추가라는 주요 변경 사항을 정확하고 간결하게 설명합니다.
Out of Scope Changes check ✅ Passed 변경 사항은 #652의 게스트 차단 퍼널 계측과 직접 연결됩니다. 이벤트 상수 분리, 위치 상수화, 공통 LoginRequired 계측, 로그인 유입 위치 저장, 차단 지점별 연결, 그룹 결과 마스킹의 개별 계측은 모두 해당 목표를 지원합니다. 배너 이벤트와 기존 배너 location을 변경한 증거는 없습니다.
Full details: Linked Issues check

Explanation

직접 연결된 #652는 프리뷰 계정 확인 문구를 포함한 모든 차단 지점에 노출·CTA 계측을 요구합니다. 변경 사항은 guest_block_viewguest_block_cta_click을 신설하고, GUEST_BLOCK_LOCATION에 위치를 통합했으며, 홈 위시 추가·홈 토너먼트 생성·위시 탭·토너먼트 탭·알림 탭·영수증 저장·그룹 결과 마스킹을 계측합니다. LoginRequiredlocation을 필수로 받고 로그인 유입 위치를 세션에 저장합니다. 그러나 PR 범위에서 프리뷰 계정 확인 문구를 제외했으므로 #652의 차단 지점 전체 요구를 충족하지 않습니다.

  • Fix all pre-merge checks with AI
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR

Warning

Some tools did not complete. Review the errors below.

🔧 ESLint

If the error stems from missing dependencies, add them to the package.json file. For unrecoverable errors (e.g., due to private dependencies), disable the tool in the CodeRabbit configuration.

apps/web/src/app/archive/tournament/layout.tsx

ESLint skipped: missing config or dependency (missing-dependency). The ESLint configuration references a package that is not available in the sandbox.

apps/web/src/app/archive/wish/layout.tsx

ESLint skipped: the matched ESLint configuration already failed (missing-dependency).

apps/web/src/app/home/_components/AddWishHomeDialog.tsx

ESLint skipped: the matched ESLint configuration already failed (missing-dependency).

  • 8 others

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feature New feature or request WEB

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat: 게스트 차단 지점별 GA location 계측

1 participant