Skip to content

[GMSS-358]Mixpanel 연동 및 화면 진입 이벤트 추가 - #77

Merged
seunghee17 merged 6 commits into
developfrom
feature/archive-mixpanel
Nov 6, 2026
Merged

seunghee17 merged 6 commits into
developfrom
feature/archive-mixpanel

Conversation

@soyeonLee126

@soyeonLee126 soyeonLee126 commented Nov 2, 2026 •

Copy link
Copy Markdown
Collaborator

작업 개요

사용자가 앱 전체 흐름에서 어디서 이탈하는지 보기 위해 Mixpanel을 연동합니다. 이번 PR에서는 1단계로 SDK, 빌드별 토큰, 화면 진입 이벤트(screen_view)를 추가합니다. 버튼 동작과 성공/실패 이벤트는 다음 PR에서 추가합니다.

작업 유형

  • feat: 새 기능
  • fix: 버그 수정
  • refactor: 리팩토링 (동작 변경 없음)
  • build: 빌드/의존성 설정
  • chore: 기타 (문서, 설정 등)
  • test: 테스트 추가/수정

변경 사항

  • mixpanel-android 8.11.1을 추가했습니다. SDK 의존성은 data 모듈에만 있고, 다른 모듈은 domain의 AnalyticsTracker 인터페이스만 씁니다.
  • 토큰은 local.properties의 DEV_MIXPANEL_TOKEN, PROD_MIXPANEL_TOKEN에서 읽습니다. debug와 internal 빌드의 이벤트는 dev 프로젝트에, release 빌드의 이벤트는 운영 프로젝트에 기록됩니다. QA 배포 기록이 운영 지표에 섞이지 않도록 internal만 dev 토큰으로 덮어썼습니다.
  • CI와 CD가 두 토큰을 저장소 시크릿에서 local.properties로 씁니다. 시크릿은 등록을 마쳤습니다.
  • 화면 진입 이벤트는 화면마다 코드를 추가하지 않고, 아래 두 곳에서 back stack의 현재 화면이 바뀔 때 기록합니다.
    • 루트 back stack(로그인, 온보딩): GamssRootNavHost
    • 탭과 상세 화면: MainScreen의 NavigationState.currentKey
    • NavKey와 화면 이름의 매핑은 ScreenView.kt 한 곳에 있습니다. 탭을 담는 MainKey는 집계하지 않습니다.
    • 인자 없는 화면은 Map으로, 속성이 있는 화면은 when으로 매핑합니다. 모두 when에 두면 detekt CyclomaticComplexMethod 검사에서 실패합니다.
  • SDK 설정
    • 첫 실행, 세션 자동 이벤트(trackAutomaticEvents)를 활성화했습니다.
    • IP 주소로 위치를 추정하는 기능(setUseIpAddressForGeolocation)을 비활성화했습니다. 국가나 도시별로 나눠 볼 계획이 없습니다.
    • Mixpanel의 크래시 이벤트($ae_crashed) 수집을 비활성화했습니다. 이 이벤트에는 예외 메시지가 그대로 포함되며, 크래시는 Crashlytics에서 이미 수집하고 있습니다.
  • README에 토큰 키와 시크릿을 추가했습니다.

집계 기준

  • 화면이 바뀔 때마다 screen_view 이벤트를 한 건 기록합니다. 뒤로가기로 이전 화면에 돌아온 경우에도 기록합니다.
  • Activity를 다시 만들 때(다크 모드 전환, 글꼴 크기 변경, 멀티윈도우) 같은 화면의 screen_view가 한 건 더 기록됩니다. 발생 빈도가 낮고, 이를 막으려면 마지막으로 기록한 화면을 별도 상태로 관리해야 해서 허용했습니다.
  • 이벤트 속성에는 대화 id, 카드 id, 닉네임 등 사용자를 특정하거나 사용자가 작성한 정보를 포함하지 않으며, ScreenViewTest에서 이를 검증합니다.

관련 이슈

  • 없음

관련 작업 (Notion)

  • GMSS-358

스크린샷 / 동작 화면

UI 변경은 없습니다.

체크리스트

  • base 브랜치가 develop으로 설정되어 있다
  • 로컬 빌드 및 실행을 확인했다
  • 커밋 메시지가 컨벤션(feat:, fix: 등)을 따른다
  • 불필요한 로그/주석/디버그 코드를 제거했다
  • 리뷰어가 이해할 수 있도록 설명을 작성했다

검증

  • 2026-10-30: :app:testDebugUnitTest(ScreenViewTest 7건 통과), :app:assembleDebug, :app:compileInternalKotlin 성공
  • 2026-11-02, SM-S937N, debug 빌드, LTE: 홈, 보관함, 보관함 상세, 대화 탭을 이동한 뒤 Mixpanel dev 프로젝트의 Data > Events에서 screen_view 8건과 App Session이 들어온 것을 확인했습니다. 도시와 국가는 (not set)이었습니다.
  • 마지막 커밋(크래시 수집 끄기, README, 테스트 이름 등)은 로컬 빌드를 돌리지 않았습니다. CI 결과로 확인합니다.

리뷰 요청 사항

  • [GMSS-326]release 빌드에 R8 난독화 적용 #76(R8 난독화 적용)과 함께 머지되면 release에서 Mixpanel이 정상 동작하는지 확인이 필요합니다. 지금 SDK의 consumer rule은 -dontwarn com.mixpanel.**뿐입니다.
  • 후속으로 검토할 것
    • :app:generateBaselineProfile을 돌리면 생성 중에 실제 앱을 띄우므로, 운영 Mixpanel에 이벤트가 쌓일 수 있습니다(추정).
    • SDK 초기화가 첫 프레임 전에 메인 스레드에서 SharedPreferences 로드를 기다립니다. 비용은 아직 측정하지 않았습니다.

@soyeonLee126
soyeonLee126 marked this pull request as ready for review November 6, 2026 01:50
@seunghee17
seunghee17 merged commit ebf55ae into develop Nov 6, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants