Skip to content

[feature] 관리자페이지 믹스패널 로깅을 적용한다#874

Merged
seongwon030 merged 7 commits intodevelop-fefrom
feature/#865-admin-mixpanel-logging-MOA-365
Nov 20, 2025
Merged

[feature] 관리자페이지 믹스패널 로깅을 적용한다#874
seongwon030 merged 7 commits intodevelop-fefrom
feature/#865-admin-mixpanel-logging-MOA-365

Conversation

@seongwon030
Copy link
Member

@seongwon030 seongwon030 commented Nov 20, 2025

#️⃣연관된 이슈

ex) #865

📝작업 내용

이번 PR에서 작업한 내용을 간략히 설명해주세요(이미지/동영상 첨부 가능)

중점적으로 리뷰받고 싶은 부분(선택)

리뷰어가 특별히 봐주었으면 하는 부분이 있다면 작성해주세요

ex) 메서드 XXX의 이름을 더 잘 짓고 싶은데 혹시 좋은 명칭이 있을까요?

논의하고 싶은 부분(선택)

논의하고 싶은 부분이 있다면 작성해주세요.

🫡 참고사항

Summary by CodeRabbit

  • 개선 사항

    • 관리자 패널(로그인, 사이드바, 클럽 정보/채용 정보/사진/계정 편집 등) 전반에 사용자 행동 및 페이지뷰 추적이 추가되었습니다.
    • 버튼 클릭(로그인, 회원가입, 파일 업로드/삭제, 태그 선택/삭제, 필드 초기화 등)과 주요 흐름(비밀번호 변경 등)에 대한 분석 이벤트가 기록됩니다.
  • 리팩토링

    • 사진 편집 탭 관련 구성 일부가 정리되었습니다.

✏️ Tip: You can customize this high-level summary in your review settings.

- 이벤트를 USER_EVENT, ADMIN_EVENT, PAGE_VIEW로 분리
- 관리자 페이지 관련 이벤트명 추가
- 페이지뷰 추적을 위한 상수 정의
- 이벤트 타입별 관리로 유지보수성 향상
- 관리자 로그아웃(ADMIN_LOGOUT_CLICKED)
- 비밀번호 변경 (ADMIN_PASSWORD_CHANGED)
- 모집 정보 날짜 변경 (RECRUIT_PERIOD_START/END_CHANGED)
- 기본 정보 수정 (ADMIN_CLUB_INFO_UPDATED)
- 활동 사진 업로드 (ADMIN_PHOTO_UPLOADED)
- 태그 생성 (ADMIN_TAG_CREATED)
- 관리자 로그인 (ADMIN_LOGIN_SUBMITTED)
- 관리자 로그아웃 (ADMIN_LOGOUT_CLICKED)
- 비밀번호 변경 (ADMIN_PASSWORD_CHANGED)
- 모집 정보 날짜 변경 (RECRUIT_PERIOD_START/END_CHANGED)
- 기본 정보 수정 (ADMIN_CLUB_INFO_UPDATED)
- 활동 사진 업로드 (ADMIN_PHOTO_UPLOADED)
- 태그 선택 (ADMIN_TAG_SELECTED)
- 태그 생성 (ADMIN_TAG_CREATED)
- 마크다운 에디터 사용 (ADMIN_MARKDOWN_EDITED)
- 로고 업로드 버튼 클릭 이벤트 (ADMIN_EVENT.CLUB_LOGO_UPLOAD_BUTTON_CLICKED)
- 로고 수정 버튼 클릭 이벤트 (ADMIN_EVENT.CLUB_LOGO_EDIT_BUTTON_CLICKED)
- 로고 초기화 버튼 클릭 이벤트 (ADMIN_EVENT.CLUB_LOGO_RESET_BUTTON_CLICKED)
- eventName.ts에 해당 이벤트명 상수 추가
@vercel
Copy link

vercel bot commented Nov 20, 2025

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

Project Deployment Preview Comments Updated (UTC)
moadong Ready Ready Preview Comment Nov 20, 2025 9:34am

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Nov 20, 2025

Warning

Rate limit exceeded

@seongwon030 has exceeded the limit for the number of commits or files that can be reviewed per hour. Please wait 14 minutes and 9 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

📥 Commits

Reviewing files that changed from the base of the PR and between 6625f4b and 034c5b2.

📒 Files selected for processing (2)
  • frontend/src/pages/AdminPage/components/ClubLogoEditor/ClubLogoEditor.tsx (4 hunks)
  • frontend/src/pages/AdminPage/tabs/RecruitEditTab/components/MarkdownEditor/MarkdownEditor.tsx (2 hunks)

Warning

.coderabbit.yaml has a parsing error

The CodeRabbit configuration file in this repository has a parsing error and default settings were used instead. Please fix the error(s) in the configuration file. You can initialize chat with CodeRabbit to get help with the configuration file.

💥 Parsing errors (1)
Validation error: Invalid regex pattern for base branch. Received: "**" at "reviews.auto_review.base_branches[0]"
⚙️ Configuration instructions
  • Please see the configuration documentation for more information.
  • You can also validate your configuration using the online YAML validator.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Walkthrough

관리자 페이지의 Mixpanel 분석 추적을 구현합니다. 신규 ADMIN_EVENT 상수와 PAGE_VIEW 확장을 추가한 후, 관리자 영역의 여러 컴포넌트에서 로그인, 탭 전환, 폼 입력, 버튼 클릭 등의 사용자 상호작용 이벤트를 추적하는 훅을 통합합니다.

Changes

Cohort / File(s) Change Summary
Event Constants
frontend/src/constants/eventName.ts
ADMIN_EVENT 추가(관리자용 버튼/액션 이벤트 다수); PAGE_VIEW에 관리자 페이지 식별자 추가; 일부 USER_EVENT/PAGE_VIEW 값들의 타입 단순화(문자열 리터럴에서 일반 문자열로).
Auth / Navigation
frontend/src/pages/AdminPage/auth/LoginTab/LoginTab.tsx, frontend/src/pages/AdminPage/components/SideBar/SideBar.tsx
로그인 페이지 뷰 추적 추가, 로그인/회원가입/아이디/비밀번호 찾기 버튼 클릭 및 사이드바 탭 클릭·로그아웃 이벤트 기록 삽입.
Club Logo / Info
frontend/src/pages/AdminPage/components/ClubLogoEditor/ClubLogoEditor.tsx, frontend/src/pages/AdminPage/tabs/ClubInfoEditTab/ClubInfoEditTab.tsx, frontend/src/pages/AdminPage/tabs/ClubInfoEditTab/components/...
클럽 로고 업로드/편집/리셋 추적; 클럽 정보 업데이트 및 필드/ SNS/태그 초기화·선택 관련 이벤트 기록(일부 이벤트에 페이로드 포함).
Account / Recruitment
frontend/src/pages/AdminPage/tabs/AccountEditTab/AccountEditTab.tsx, frontend/src/pages/AdminPage/tabs/RecruitEditTab/RecruitEditTab.tsx, frontend/src/pages/AdminPage/tabs/RecruitEditTab/components/Calendar/Calendar.tsx, frontend/src/pages/AdminPage/tabs/RecruitEditTab/components/MarkdownEditor/MarkdownEditor.tsx
관리자 계정/비밀번호 변경 및 모집 정보(상시모집 토글, 대상 초기화, 시작/종료일 변경, 마크다운 미리보기 토글) 관련 추적 추가; 페이지 뷰 기록 추가.
Photo / Image Upload
frontend/src/pages/AdminPage/tabs/PhotoEditTab/PhotoEditTab.tsx, frontend/src/pages/AdminPage/tabs/PhotoEditTab/components/ImageUpload/ImageUpload.tsx
컴포넌트명(RecruitEditTab → PhotoEditTab) 변경 및 사진 편집 페이지 뷰 추적, 이미지 업로드/삭제 버튼 클릭 이벤트 기록 추가.
Tag Components
frontend/src/pages/AdminPage/tabs/ClubInfoEditTab/components/SelectTags/SelectTags.tsx, frontend/src/pages/AdminPage/tabs/ClubInfoEditTab/components/MakeTags/MakeTags.tsx
태그 선택/삭제 시 관리자 이벤트 기록(태그명/인덱스/카테고리 페이로드 포함).

Sequence Diagram(s)

sequenceDiagram
  participant Component as Admin Component
  participant Hook as useMixpanelTrack
  participant Service as Mixpanel

  Note over Component,Hook: On mount
  Component->>Hook: useTrackPageView(PAGE_VIEW.*)
  Hook->>Service: send PAGE_VIEW event

  Note over Component,Service: On user action (button/click/clear)
  Component->>Hook: trackEvent(ADMIN_EVENT.* , payload?)
  Hook->>Service: send event with optional payload
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

  • 검토 포인트:
    • 이벤트 네이밍/값(eventName.ts) 일관성 및 기존 USER_EVENT 영향 확인
    • 일부 핸들러에 추가된 비동기/의존성(trackEvent)이 useCallback/useEffect 의존성 배열에 정확히 반영됐는지 확인
    • 페이로드로 전달되는 값(날짜, 태그 인덱스, SNS 플랫폼, 비밀번호 길이 등)의 민감성/형식 검증
    • PhotoEditTab 컴포넌트명 변경이 다른 임포트에 미치는 영향 점검

Possibly related issues

  • MOA-365: 믹스패널 관리자 로깅을 추가한다 — 본 PR이 관리자 영역 Mixpanel 추적을 구현하여 이 이슈의 목적과 직접적으로 일치합니다.
  • [feature] MOA-365 믹스패널 관리자 로깅을 추가한다 #865 — 관리자 Mixpanel 로깅 기능 구현 관점에서 관련성이 높음(관리자 이벤트/추적 추가).

Possibly related PRs

Suggested labels

✨ Feature, 💻 FE

Suggested reviewers

  • lepitaaar
  • oesnuj
  • Zepelown

Pre-merge checks and finishing touches

✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed PR 제목은 관리자 페이지에 믹스패널 로깅을 적용한다는 주요 변경사항을 명확하게 설명하고 있으며, 제공된 코드 변경 사항과 완전히 일치합니다.
Linked Issues check ✅ Passed 연관된 이슈 MOA-365는 구체적인 구현 요구사항이 없지만('No response'), PR의 코드 변경사항은 관리자 페이지 전역에 걸쳐 포괄적인 믹스패널 이벤트 로깅을 구현하고 있습니다.
Out of Scope Changes check ✅ Passed 모든 변경사항은 관리자 페이지의 믹스패널 로깅 추가라는 범위 내에 있으며, 의도된 기능 범위를 벗어나는 무관한 수정은 없습니다.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

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 and usage tips.

@oesnuj oesnuj self-requested a review November 20, 2025 09:20
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
frontend/src/pages/AdminPage/auth/LoginTab/LoginTab.tsx (1)

30-50: 이벤트 트래킹 타이밍을 수정해주세요.

LOGIN_BUTTON_CLICKED 이벤트가 handleLogin 함수의 끝에서 호출되고 있습니다. 이는 다음과 같은 문제를 야기할 수 있습니다:

  1. Race condition: try 블록에서 navigate('/admin')이 호출된 후 이벤트가 트래킹되므로, 페이지 이동이 빠르게 일어나면 이벤트가 전송되지 않을 수 있습니다.
  2. 의도 불명확: 로그인 성공/실패와 관계없이 이벤트가 발생하는데, 일반적으로는 버튼 클릭 자체를 트래킹하거나 성공/실패를 구분해서 트래킹합니다.

다음과 같이 함수 시작 부분에서 트래킹하는 것을 권장합니다:

  const handleLogin = async () => {
    if (loading) return;
+   trackEvent(ADMIN_EVENT.LOGIN_BUTTON_CLICKED);
    setLoading(true);
    try {
      const { accessToken } = await login(userId, password);
      localStorage.setItem('accessToken', accessToken);
      alert('로그인 성공! 관리자 페이지로 이동합니다.');
      navigate('/admin');
    } catch (error: unknown) {
      console.error('로그인 실패:', error);
      let errorMessage = '...';
      if (error instanceof Error) {
        errorMessage = error.message;
      }
      alert(errorMessage);
    } finally {
      setLoading(false);
    }
-   trackEvent(ADMIN_EVENT.LOGIN_BUTTON_CLICKED);
  };
🧹 Nitpick comments (5)
frontend/src/pages/AdminPage/tabs/PhotoEditTab/PhotoEditTab.tsx (1)

98-101: 이미지 삭제 트래킹에 메타데이터 추가를 고려해볼 수 있습니다.

삭제 버튼 클릭 시 ADMIN_EVENT.IMAGE_DELETE_BUTTON_CLICKED만 보내고 있는데, 필요하다면 이미지 URL이나 index 같은 정보를 함께 실어 두면 이후 분석(예: 특정 위치/이미지에서의 삭제율)에 더 도움이 될 수 있습니다. 지금 구현도 문제는 없고, 개선 여지만 있다는 수준입니다.

frontend/src/pages/AdminPage/tabs/ClubInfoEditTab/ClubInfoEditTab.tsx (1)

79-79: 필드 초기화/수정 트래킹 설계가 명확하며, SNS 플랫폼 키 사용을 고려해볼 수 있습니다.

  • 수정 버튼, 각 입력필드 onClear, SNS 링크 초기화에 각각 의미 있는 ADMIN_EVENT를 연결해 두어 나중에 어떤 액션이 많이 발생하는지 분석하기 좋아 보입니다.
  • SNS 링크 초기화에서 snsPlatform: label을 보내고 있는데, 라벨 텍스트가 변경될 가능성을 생각하면 key(예: 'instagram' | 'youtube' | 'x')를 함께 보내거나 key 위주로 사용하는 것도 한 번 고려해볼 만합니다. 현재 구현도 동작상 문제는 없습니다.

Also applies to: 136-139, 152-155, 166-169, 184-187, 220-222

frontend/src/pages/AdminPage/tabs/AccountEditTab/AccountEditTab.tsx (1)

6-8: 비밀번호 관련 트래킹은 적절하나, 길이 정보 수집 여부는 한 번만 더 검토해 보세요.

  • 페이지 진입 시 PAGE_VIEW.ADMIN_ACCOUNT_EDIT_PAGE를 기록하고, 비밀번호 변경 성공/필드 초기화 시 각각 ADMIN_EVENT를 쏘는 흐름은 명확합니다.
  • PASSWORD_CHANGE_BUTTON_CLICKEDnewPasswordLength, confirmPasswordLength를 함께 보내는 것은 보안상 크게 민감하진 않지만, 계정 보안 이벤트에는 가능하면 최소한의 정보만 남기는 편이 일반적으로 권장됩니다. 길이 정보가 분석에 실제로 필요 없으면 payload에서 제거하는 것도 고려해 보셔도 좋습니다.

Also applies to: 13-15, 48-51, 85-88, 101-104

frontend/src/pages/AdminPage/tabs/PhotoEditTab/components/ImageUpload/ImageUpload.tsx (1)

6-8: 업로드 버튼 클릭 트래킹은 적절하며, 업로드 제한 시점만 기획 의도 확인이 필요합니다.

지금 구조에서는 버튼을 누를 때마다 IMAGE_UPLOAD_BUTTON_CLICKED 이벤트가 발생하고, 이후에 이미지 수(5장 이상) 제한을 검사하여 업로드를 막고 있습니다.

  • “버튼 클릭” 기준으로 로그를 쌓는 것이 의도라면 현재 구현이 맞고,
  • “실제 업로드 시도/진행”을 기준으로 삼고 싶다면 trackEvent를 제한 검사 이후로 옮기는 것도 옵션입니다.

현재 코드 자체의 동작에는 문제 없고, 기획/분석 관점에서만 한 번 확인해 보면 좋겠습니다.

Also applies to: 20-20, 54-55

frontend/src/constants/eventName.ts (1)

33-73: 관리자 이벤트/페이지뷰 상수 분리가 잘 되어 있습니다.

  • 기존 USER_EVENT와 별도로 ADMIN_EVENT, PAGE_VIEW에서 관리자 도메인을 명시적으로 분리해 둔 점이 이후 분석/타입 관리에 유리해 보입니다.
  • 다만 TAB_CLICKED처럼 USER/ADMIN 양쪽에 같은 키 이름이 존재하니, IDE 자동완성 시 혼동을 줄이기 위해 필요하다면 향후 ADMIN_TAB_CLICKED 등으로 키 네이밍을 더 구분 지어주는 것도 고려해 볼 수 있습니다. 지금 구조로도 사용에는 문제가 없습니다.

Also applies to: 75-88

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Jira integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 095c45d and 53104db.

📒 Files selected for processing (13)
  • frontend/src/constants/eventName.ts (1 hunks)
  • frontend/src/pages/AdminPage/auth/LoginTab/LoginTab.tsx (3 hunks)
  • frontend/src/pages/AdminPage/components/ClubLogoEditor/ClubLogoEditor.tsx (4 hunks)
  • frontend/src/pages/AdminPage/components/SideBar/SideBar.tsx (4 hunks)
  • frontend/src/pages/AdminPage/tabs/AccountEditTab/AccountEditTab.tsx (4 hunks)
  • frontend/src/pages/AdminPage/tabs/ClubInfoEditTab/ClubInfoEditTab.tsx (7 hunks)
  • frontend/src/pages/AdminPage/tabs/ClubInfoEditTab/components/MakeTags/MakeTags.tsx (2 hunks)
  • frontend/src/pages/AdminPage/tabs/ClubInfoEditTab/components/SelectTags/SelectTags.tsx (2 hunks)
  • frontend/src/pages/AdminPage/tabs/PhotoEditTab/PhotoEditTab.tsx (3 hunks)
  • frontend/src/pages/AdminPage/tabs/PhotoEditTab/components/ImageUpload/ImageUpload.tsx (3 hunks)
  • frontend/src/pages/AdminPage/tabs/RecruitEditTab/RecruitEditTab.tsx (5 hunks)
  • frontend/src/pages/AdminPage/tabs/RecruitEditTab/components/Calendar/Calendar.tsx (3 hunks)
  • frontend/src/pages/AdminPage/tabs/RecruitEditTab/components/MarkdownEditor/MarkdownEditor.tsx (2 hunks)
🧰 Additional context used
🧠 Learnings (2)
📓 Common learnings
Learnt from: seongwon030
Repo: Moadong/moadong PR: 195
File: frontend/src/pages/AdminPage/AdminPage.tsx:7-7
Timestamp: 2025-03-19T05:18:07.818Z
Learning: AdminPage.tsx에서 현재 하드코딩된 클럽 ID('67d2e3b9b15c136c6acbf20b')는 로그인 기능 구현 후 동적으로 가져오는 방식으로 수정될 예정입니다.
📚 Learning: 2025-03-19T05:18:07.818Z
Learnt from: seongwon030
Repo: Moadong/moadong PR: 195
File: frontend/src/pages/AdminPage/AdminPage.tsx:7-7
Timestamp: 2025-03-19T05:18:07.818Z
Learning: AdminPage.tsx에서 현재 하드코딩된 클럽 ID('67d2e3b9b15c136c6acbf20b')는 로그인 기능 구현 후 동적으로 가져오는 방식으로 수정될 예정입니다.

Applied to files:

  • frontend/src/pages/AdminPage/tabs/RecruitEditTab/RecruitEditTab.tsx
  • frontend/src/pages/AdminPage/auth/LoginTab/LoginTab.tsx
  • frontend/src/pages/AdminPage/tabs/ClubInfoEditTab/ClubInfoEditTab.tsx
  • frontend/src/pages/AdminPage/components/SideBar/SideBar.tsx
  • frontend/src/constants/eventName.ts
🧬 Code graph analysis (12)
frontend/src/pages/AdminPage/components/ClubLogoEditor/ClubLogoEditor.tsx (1)
frontend/src/constants/eventName.ts (1)
  • ADMIN_EVENT (33-73)
frontend/src/pages/AdminPage/tabs/RecruitEditTab/RecruitEditTab.tsx (1)
frontend/src/constants/eventName.ts (2)
  • PAGE_VIEW (75-89)
  • ADMIN_EVENT (33-73)
frontend/src/pages/AdminPage/tabs/PhotoEditTab/PhotoEditTab.tsx (1)
frontend/src/constants/eventName.ts (2)
  • PAGE_VIEW (75-89)
  • ADMIN_EVENT (33-73)
frontend/src/pages/AdminPage/auth/LoginTab/LoginTab.tsx (1)
frontend/src/constants/eventName.ts (2)
  • PAGE_VIEW (75-89)
  • ADMIN_EVENT (33-73)
frontend/src/pages/AdminPage/tabs/RecruitEditTab/components/Calendar/Calendar.tsx (1)
frontend/src/constants/eventName.ts (1)
  • ADMIN_EVENT (33-73)
frontend/src/pages/AdminPage/tabs/ClubInfoEditTab/ClubInfoEditTab.tsx (1)
frontend/src/constants/eventName.ts (2)
  • PAGE_VIEW (75-89)
  • ADMIN_EVENT (33-73)
frontend/src/pages/AdminPage/tabs/AccountEditTab/AccountEditTab.tsx (1)
frontend/src/constants/eventName.ts (2)
  • PAGE_VIEW (75-89)
  • ADMIN_EVENT (33-73)
frontend/src/pages/AdminPage/tabs/ClubInfoEditTab/components/MakeTags/MakeTags.tsx (1)
frontend/src/constants/eventName.ts (1)
  • ADMIN_EVENT (33-73)
frontend/src/pages/AdminPage/components/SideBar/SideBar.tsx (1)
frontend/src/constants/eventName.ts (1)
  • ADMIN_EVENT (33-73)
frontend/src/pages/AdminPage/tabs/ClubInfoEditTab/components/SelectTags/SelectTags.tsx (1)
frontend/src/constants/eventName.ts (1)
  • ADMIN_EVENT (33-73)
frontend/src/pages/AdminPage/tabs/RecruitEditTab/components/MarkdownEditor/MarkdownEditor.tsx (1)
frontend/src/constants/eventName.ts (1)
  • ADMIN_EVENT (33-73)
frontend/src/pages/AdminPage/tabs/PhotoEditTab/components/ImageUpload/ImageUpload.tsx (1)
frontend/src/constants/eventName.ts (1)
  • ADMIN_EVENT (33-73)
🔇 Additional comments (18)
frontend/src/pages/AdminPage/components/ClubLogoEditor/ClubLogoEditor.tsx (2)

108-112: 잘 구현되었습니다!

사진 수정 액션에 대한 이벤트 트래킹이 적절한 위치에서 이루어지고 있습니다.


121-125: 잘 구현되었습니다!

로고 초기화 액션에 대한 이벤트 트래킹이 적절하게 구현되어 있습니다.

frontend/src/pages/AdminPage/tabs/ClubInfoEditTab/components/SelectTags/SelectTags.tsx (1)

22-28: 잘 구현되었습니다!

태그 선택 이벤트가 적절하게 트래킹되고 있으며, tagNamecategory 정보를 페이로드에 포함하여 의미있는 분석 데이터를 수집할 수 있습니다.

frontend/src/pages/AdminPage/components/SideBar/SideBar.tsx (2)

63-66: 잘 구현되었습니다!

탭 클릭 이벤트가 네비게이션 전에 적절하게 트래킹되고 있으며, 탭 이름을 페이로드에 포함하여 어떤 탭이 클릭되었는지 추적할 수 있습니다.


88-92: 잘 구현되었습니다!

로그아웃 이벤트가 API 호출 후, 토큰 정리 및 페이지 이동 전에 적절하게 트래킹되어 이벤트가 전송될 수 있도록 보장합니다.

frontend/src/pages/AdminPage/tabs/ClubInfoEditTab/components/MakeTags/MakeTags.tsx (1)

32-35: 잘 구현되었습니다!

태그 초기화 이벤트가 적절하게 트래킹되고 있으며, tagIndex + 1을 사용하여 1-based 인덱스로 전송하는 것이 사용자 친화적입니다.

frontend/src/pages/AdminPage/tabs/RecruitEditTab/RecruitEditTab.tsx (4)

18-20: 잘 구현되었습니다!

페이지뷰 트래킹과 이벤트 트래킹 훅이 컴포넌트 최상단에서 적절하게 초기화되어 있습니다.


77-77: 잘 구현되었습니다!

상시모집 토글 이벤트가 상태 변경 전에 적절하게 트래킹되고 있습니다.


104-104: 잘 구현되었습니다!

동아리 모집 정보 수정 이벤트가 API 호출 전에 적절하게 트래킹되고 있습니다.


172-175: 잘 구현되었습니다!

모집 대상 초기화 이벤트가 onClear 콜백에서 적절하게 트래킹되고 있습니다.

frontend/src/pages/AdminPage/tabs/RecruitEditTab/components/Calendar/Calendar.tsx (2)

56-67: 잘 구현되었습니다!

모집 시작 날짜 변경 이벤트가 적절하게 트래킹되고 있으며, trackEvent를 의존성 배열에 포함한 것도 올바릅니다. ISO 형식으로 날짜를 전송하는 것도 분석에 유용합니다.


69-81: 잘 구현되었습니다!

모집 종료 날짜 변경 이벤트가 적절하게 트래킹되고 있으며, disabledEnd 상태를 확인하여 비활성화된 경우 이벤트를 발생시키지 않는 것도 적절합니다.

frontend/src/pages/AdminPage/auth/LoginTab/LoginTab.tsx (3)

92-97: 잘 구현되었습니다!

회원가입 버튼 클릭 이벤트가 적절하게 트래킹되고 있습니다.


104-109: 잘 구현되었습니다!

아이디 찾기 버튼 클릭 이벤트가 적절하게 트래킹되고 있습니다.


116-121: 잘 구현되었습니다!

비밀번호 찾기 버튼 클릭 이벤트가 적절하게 트래킹되고 있습니다.

frontend/src/pages/AdminPage/tabs/PhotoEditTab/PhotoEditTab.tsx (1)

9-17: 사진 편집 탭 페이지뷰/트래킹 연동 잘 되어 있습니다.

useMixpanelTrackuseTrackPageView(PAGE_VIEW.PHOTO_EDIT_PAGE)를 컴포넌트 최상단에서 일괄 호출한 구조가 다른 관리자 탭들과도 일관되고, PhotoEditTab로의 컴포넌트/디폴트 익스포트 이름 변경도 명확합니다. 별도 이슈 없어 보입니다.

Also applies to: 116-116

frontend/src/pages/AdminPage/tabs/ClubInfoEditTab/ClubInfoEditTab.tsx (1)

14-16: 기본 정보 탭의 페이지뷰/트래킹 훅 배치는 자연스럽습니다.

useMixpanelTrackuseTrackPageView(PAGE_VIEW.CLUB_INFO_EDIT_PAGE)를 컴포넌트 초기에 배치해서 페이지 진입 시점에 한 번만 페이지뷰가 기록되도록 한 점이 좋고, 기존 로직과의 결합도 느슨해서 유지보수에 무리가 없어 보입니다.

Also applies to: 20-21

frontend/src/pages/AdminPage/tabs/AccountEditTab/AccountEditTab.tsx (1)

19-19: 비밀번호 변경 로딩 가드와 UI 연동이 적절합니다.

isLoading으로 중복 클릭을 막고(26행), 최종적으로 버튼 disabled 및 라벨 변경(119-121행)까지 연동해 둔 구조가 좋습니다. API 실패 시에도 finally에서 로딩 상태를 해제해서 상태 꼬임 여지도 없어 보입니다.

Also applies to: 25-27, 43-44, 63-63, 115-121

Copy link
Member

@oesnuj oesnuj left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

로깅 적용 수고하셨습니다
관리자 부분도 이벤트 잔뜩 수집해봅시다~~

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (3)
frontend/src/constants/eventName.ts (3)

43-43: TAB_CLICKED 이벤트 이름 중복을 고려하세요.

ADMIN_EVENT.TAB_CLICKEDUSER_EVENT.TAB_CLICKED 간에 이름이 중복되지만 서로 다른 의미를 가집니다. ADMIN_EVENT의 경우 '사이드바 탭 클릭'으로 더 구체적인 의미를 가지므로, 혼동을 방지하기 위해 더 명확한 이름(예: SIDEBAR_TAB_CLICKED)으로 변경하는 것을 고려해보세요.

다음 diff를 적용하여 이름을 더 명확하게 변경할 수 있습니다:

-  TAB_CLICKED: '사이드바 탭 클릭',
+  SIDEBAR_TAB_CLICKED: '사이드바 탭 클릭',

32-72: 이벤트 레이블 언어 일관성을 고려하세요.

USER_EVENT는 영어 레이블을 사용하는 반면, ADMIN_EVENT는 한글 레이블을 사용합니다. 기능적으로는 문제가 없지만, 코드베이스 전체의 유지보수성과 일관성을 위해 하나의 언어로 통일하는 것을 고려해보세요.


74-88: 페이지 뷰 레이블의 언어 혼용을 확인하세요.

PAGE_VIEW 객체에서 사용자 페이지는 영어(예: 'ApplicationFormPage')를, 관리자 페이지는 한글(예: '로그인페이지')을 사용합니다. 이는 의도적인 선택일 수 있지만(예: 다른 대상 사용자), 일관성을 위해 단일 언어 사용을 고려해보세요.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Jira integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 53104db and 6625f4b.

📒 Files selected for processing (1)
  • frontend/src/constants/eventName.ts (1 hunks)
🧰 Additional context used
🧠 Learnings (2)
📓 Common learnings
Learnt from: seongwon030
Repo: Moadong/moadong PR: 195
File: frontend/src/pages/AdminPage/AdminPage.tsx:7-7
Timestamp: 2025-03-19T05:18:07.818Z
Learning: AdminPage.tsx에서 현재 하드코딩된 클럽 ID('67d2e3b9b15c136c6acbf20b')는 로그인 기능 구현 후 동적으로 가져오는 방식으로 수정될 예정입니다.
📚 Learning: 2025-03-19T05:18:07.818Z
Learnt from: seongwon030
Repo: Moadong/moadong PR: 195
File: frontend/src/pages/AdminPage/AdminPage.tsx:7-7
Timestamp: 2025-03-19T05:18:07.818Z
Learning: AdminPage.tsx에서 현재 하드코딩된 클럽 ID('67d2e3b9b15c136c6acbf20b')는 로그인 기능 구현 후 동적으로 가져오는 방식으로 수정될 예정입니다.

Applied to files:

  • frontend/src/constants/eventName.ts

@seongwon030 seongwon030 merged commit 4dc9041 into develop-fe Nov 20, 2025
3 checks passed
@seongwon030 seongwon030 deleted the feature/#865-admin-mixpanel-logging-MOA-365 branch November 20, 2025 09:35
@seongwon030 seongwon030 linked an issue Nov 22, 2025 that may be closed by this pull request
2 tasks
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.

[feature] MOA-365 믹스패널 관리자 로깅을 추가한다

2 participants

Comments