Skip to content

[Feat] #250 - Feature 화면별 Amplitude 이벤트 트래킹 배선 - #252

Merged
Guryss merged 19 commits into
developfrom
Feat/#250
Sep 13, 2026
Merged

Guryss merged 19 commits into
developfrom
Feat/#250

Conversation

@Guryss

@Guryss Guryss commented Sep 7, 2026 •

Copy link
Copy Markdown
Member

💡 Issue


💭 Summary

#249에서 만든 AnalyticsTracker 인프라를 실제 화면에 배선하는 작업이에요.

13개 Feature 모듈(홈·탐색·온보딩·작품상세·작품평가·수다·마이페이지·설정·컬렉션·알림등록시트·전역알림설정·알림함·서재)에 총 137개 Amplitude 이벤트를 연결했어요.

원래 CSV에 있던 V1 이벤트뿐 아니라, V1엔 없었지만 V2에 새로 생긴 기능(컬렉션·작품 알림·서재)의 이벤트, 그리고 후속 감사로 찾아낸 누락 이벤트까지 새로 정의해서 같이 넣었어요.


🔑 Key Changes

모듈별 이벤트 배선 (Factory → ViewModel → View, logger와 동일한 옵셔널 주입 패턴)

  • 각 모듈에 XxxAnalyticsEvent enum(이벤트 이름 카탈로그)을 신설했어요.
  • ViewModel에 analyticsTracker: AnalyticsTracker? = nil 의존성 + track(_:properties:) pass-through 메서드를 추가했어요.
  • 실제 사용자 인터랙션 지점(버튼 탭, 화면 진입, 토글 등)에 track(.xxx) 호출을 심었어요.
  • App 레이어 각 Assembly/RootView까지 dependencies.analyticsTracker를 전달해 전체 체인을 이었어요.

V1에 없던 신규 이벤트도 함께 정의

  • 컬렉션(7종), 작품 알림 등록 시트(5종), 전역 알림 설정(2종), 알림함(3종), 서재(11종) — V2 전용 기능이라 새 이벤트명을 지었어요.
  • 기획팀 공유용 CSV(모듈/화면/트리거/설명)를 별도로 정리해뒀어요.

감사 + 버그 수정

  • 배선 전에 기존 CSV 94개 이벤트가 전부 제대로 걸려있는지 재검증했고, SosoFeedViewModel.reportFeed(피드 목록 신고)에서 누락된 트래킹 1건을 발견해 같이 고쳤어요.
  • 통합 리뷰(wss-pr-reviewer + wss-feature-reviewer)에서 나온 지적도 전부 반영했어요:
    • 재진입(push 복귀)마다 화면진입 이벤트가 중복 발화하던 5곳(작품상세·타유저마이페이지·피드상세·검색 2곳)을 최초 1회만 쏘도록 수정
    • 같은 이유로 홈/마이페이지/피드탭도 통일(재조회 자체는 그대로 두고 트래킹만 가드)
    • 장르 선택 토글에서 "해제"할 때도 "선택됨" 이벤트가 잘못 나가던 버그 2건 수정
    • rawValue 오타 1건 수정

🔄 후속 업데이트 — 남은 갭 전수 조사 + 추가 배선

처음엔 "이벤트명이 아직 없거나 흐름이 비슷한 다른 화면과 겹친다"는 이유로 몇 군데를 의도적으로 비워뒀었는데, 다시 검토해서 의도적으로 뺐던 곳 + 감사에서 새로 찾은 갭을 전부 채웠어요. 새로 추가된 이벤트는 30종이에요(기존 28종 + 이번 30종 = V2 신규 총 58종).

원래 의도적으로 비워뒀던 4곳

  • 상세탐색 필터 플랫폼 선택(seek_info_platform)
  • 글 작성 이미지 추가/삭제(write_image_add/write_image_remove)
  • 소소피드 탭/옵션 전환(내 피드↔소소피드 feed_tab_select, 전체글↔추천글 feed_soso_option_select)
  • 컬렉션 "작품 추가"/"서재에서 추가" 화면(진입·선택 확정 4종) — CollectionSearchNovelViewModel/CollectionMyLibrarySelectViewModel이 이번에 처음 analyticsTracker를 받았어요.

전수 조사로 새로 찾은 갭

  • 컬렉션: 목록 탭 전환·상세 정렬 변경·더보기 수정·생성폼 공개/비공개·대표 작품 지정 (6종)
  • 소소한수다/글 작성: 공개·비공개 전환, 작품 연결 확정/해제, 피드 삭제, 댓글 삭제, 내 피드 정렬·필터 적용 (6종)
  • 작품 상세 수다 탭: 피드 삭제·스포일러 신고·부적절한 표현 신고 (3종) — FeedFeature엔 이미 있는 이벤트지만 Feature 간 직접 의존이 안 돼 이 모듈 전용 이름을 새로 지었어요.
  • 타유저 프로필 활동 탭: 피드 좋아요·신고 2종·컬렉션 섹션 탭 (4종)

새 이벤트명은 전부 각 모듈이 기존에 쓰던 명명 패턴(seek_info_*/write_*/collection_*/feed_*/novel_*/other_*)을 그대로 따라 지었어요 — 기획팀 확정 이름이 아니니 나중에 실제 스프레드시트 이름과 갈리면 이 부분부터 확인해주세요. 기획팀 공유용 CSV도 이번 30종을 반영해 업데이트했어요.


📱 Simulation

UI 변경은 없고(트래킹 호출만 추가) 눈에 보이는 화면 변화는 없어요. 스크린샷은 생략할게요.


🧑‍🧒‍🧒 To Reviewer

  • KeywordFeature에 임베드된 이벤트(seek_keyword_*, rate_keyword_*, contact_keyword)는 arch-lint feature-exclusivity 제약 때문에 App 레이어(SearchAssembly/NovelReviewAssembly)에서 raw string으로 직접 트래킹해요 — 컴파일러가 동기화를 못 잡아주니, 이 이벤트명을 바꿀 땐 양쪽 다 같이 고쳐야 해요.
  • FeedFeature의 CreateFeedConnectNovelSheet 문의 버튼은 이번 작업 범위 밖에서 발견한 기존 죽은 버튼(트래킹만 얹고 URL 연결은 안 고침)이에요 — 모듈 CLAUDE.md에 남겨뒀어요.
  • 후속 업데이트로 새로 지은 이벤트명 30종은 기획팀 확정 전이에요 — 리뷰하시면서 이름이 어색하거나 안드로이드와 안 맞을 것 같은 게 있으면 알려주세요.

※ Reference

해당 없음

@Guryss Guryss self-assigned this Sep 7, 2026
Base automatically changed from Feat/#249 to develop September 7, 2026 13:53
@github-actions

github-actions Bot commented Sep 7, 2026 •

Copy link
Copy Markdown

테스트 커버리지 리포트

Module Coverage
CollectionFeature 0.0%
HomeFeature 0.0%
LibraryFeature 0.0%
NotificationFeature 0.0%
NovelDetailFeature 0.0%
NovelReviewFeature 5.3%

Generated by CI on 2026-09-13 01:53 KST

Guryss and others added 13 commits September 13, 2026 00:04
home/general_search/seek/home_today_ranking/home_hot_feedlist/
home_prefer_novellist/home_to_prefer_btn 7종.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vh2tUU4oU5dx9Mw1uFxZcQ
search/general_search/seek/search_result/click_search_result/
contact_novel_search/soso_pick/seek_result/click_seek_result/
seek_info_genre/state/rating 및 KeywordFeature 임베드 구간
(seek_keyword_universe/topic/character/relation/mood, contact_keyword —
arch-lint feature-exclusivity 제약으로 App(SearchAssembly)에서 raw string 브리징).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vh2tUU4oU5dx9Mw1uFxZcQ
onboding_man/woman/age, onboding_prefer_R/RF/F/HF/MH/BL/D/M/LN 12종
(전부 V1 백로그 — 실제 배포된 적 없음).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vh2tUU4oU5dx9Mw1uFxZcQ
novel_info/contact_error/direct_novel/novel_feed/novel_write_btn/
novel_write_floating_btn/novel_feed_like/rate_love/rate_delete 9종.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vh2tUU4oU5dx9Mw1uFxZcQ
rate/rate_novel/rate_ing/ed/stop/rate_rating/rate_date/
rate_universe/topic/character/relation/mood 12종 및 평가 키워드 시트
(rate_keyword_universe/topic/character/relation/mood — arch-lint
feature-exclusivity 제약으로 App(NovelReviewAssembly)에서 raw string 브리징).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vh2tUU4oU5dx9Mw1uFxZcQ
feed_all/feed_write_floating_btn/feed_like/feed_detail/feed_detail_like/
write/write_spoiler_on/off/write_connect_noevel/contact_novel_connect/
write_feed/write_comment/alert_feed_spoiler/abuse/alert_comment_spoiler/abuse
16종. 감사 중 발견한 SosoFeedViewModel.reportFeed 누락(FeedDetailViewModel과
동일 이벤트인데 목록 신고 경로에서만 빠져있던 것)도 이 커밋에서 함께 채움.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vh2tUU4oU5dx9Mw1uFxZcQ
mypage/other_mypage/other_block/logout/withdraw/mypage_man/woman/age 8종.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vh2tUU4oU5dx9Mw1uFxZcQ
collection_list/collection_create_btn/collection_write/collection_save/
collection_detail/collection_like/collection_delete 7종. V1에 없던 V2 전용
기능이라 새 이벤트명을 정의했다(#249 CSV 관례를 따른 snake_case).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vh2tUU4oU5dx9Mw1uFxZcQ
novel_notification_view/_completion_on/off/_hiatus_on/off 5종.
V1에 없던 V2 전용 기능(#188/189)이라 새 이벤트명을 정의해
기존 NovelDetailAnalyticsEvent 카탈로그에 얹었다.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vh2tUU4oU5dx9Mw1uFxZcQ
setting_notification_on/off 2종. V1에 없던 기능이라 새 이벤트명을 정의해
기존 SettingAnalyticsEvent 카탈로그에 얹었다.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vh2tUU4oU5dx9Mw1uFxZcQ
notification_list/notification_select/notification_detail 3종. V1에 없던
기능이라 새 이벤트명을 정의했다.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vh2tUU4oU5dx9Mw1uFxZcQ
library_view/library_register_btn/library_empty_search_btn/
library_notification_btn/library_interest_filter/library_filter_apply/
library_sort/library_novel_select/user_library_view/user_library_sort/
user_library_novel_select 11종. LibraryFeature는 V1 CSV에도 없고 이번 작업
범위에도 없던 완전 미배선 상태였던 것을 재감사로 발견해 추가했다.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vh2tUU4oU5dx9Mw1uFxZcQ
wss-pr-reviewer·wss-feature-reviewer 지적 반영.

- 재진입(push 복귀)마다 재발화하던 화면진입 이벤트(novel_info, other_mypage,
  feed_detail, search, seek_result)를 최초 1회로 좁힘 — VM에 가드가 있으면
  그 안으로, 없으면 View에 hasTrackedXxx 플래그 신설(FeedDetailView).
- 같은 이유로 home/mypage/feed_all도 통일(재조회 자체는 최초 1회 가드
  없이 유지, 트래킹만 별도로 가드).
- GenreSelectionViewModel/DetailSearchFilterViewModel의 토글류가 해제
  방향에서도 '선택' 이벤트를 잘못 발화하던 것을 선택 방향에서만 쏘도록 수정.
- FeedAnalyticsEvent의 rawValue 오타 수정(write_connect_noevel → _novel).
- 전 VM의 track() pass-through에 // MARK: - Analytics 헤더 추가, Feature
  CLAUDE.md에 handle() 우회 예외 명시.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vh2tUU4oU5dx9Mw1uFxZcQ
@Guryss
Guryss merged commit d12b16e into develop Sep 13, 2026
11 checks passed
@Guryss
Guryss deleted the Feat/#250 branch September 13, 2026 03:18
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.

[Feat] 전 Feature 모듈 애널리틱스 이벤트 배선

1 participant