[feature] 관리자페이지 믹스패널 로깅을 적용한다#874
Conversation
- 이벤트를 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에 해당 이벤트명 상수 추가
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
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 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. 📒 Files selected for processing (2)
Warning
|
| 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
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
- [refactor] 믹스패널 이벤트 이름을 통일한다 #856 — 동일
eventName.ts모듈 변경 이력과 연관됨(상수 구조 및 PAGE_VIEW 관련). - [release] v1.1.0 #676 — 이벤트 상수 추가/조정 관련 PR로 ADMIN_EVENT 도입과 코드 레벨 연관성 있음.
- [feature] 동아리 관리자는 지원자를 확인할 수 있다. #612 — SideBar 탭/로그아웃 처리 변경 이력과 겹치며, 본 PR의 사이드바 추적 호출과 코드 충돌 가능성 존재.
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.
Comment @coderabbitai help to get the list of available commands and usage tips.
There was a problem hiding this comment.
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함수의 끝에서 호출되고 있습니다. 이는 다음과 같은 문제를 야기할 수 있습니다:
- Race condition:
try블록에서navigate('/admin')이 호출된 후 이벤트가 트래킹되므로, 페이지 이동이 빠르게 일어나면 이벤트가 전송되지 않을 수 있습니다.- 의도 불명확: 로그인 성공/실패와 관계없이 이벤트가 발생하는데, 일반적으로는 버튼 클릭 자체를 트래킹하거나 성공/실패를 구분해서 트래킹합니다.
다음과 같이 함수 시작 부분에서 트래킹하는 것을 권장합니다:
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_CLICKED에newPasswordLength,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.
📒 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.tsxfrontend/src/pages/AdminPage/auth/LoginTab/LoginTab.tsxfrontend/src/pages/AdminPage/tabs/ClubInfoEditTab/ClubInfoEditTab.tsxfrontend/src/pages/AdminPage/components/SideBar/SideBar.tsxfrontend/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: 잘 구현되었습니다!태그 선택 이벤트가 적절하게 트래킹되고 있으며,
tagName과category정보를 페이로드에 포함하여 의미있는 분석 데이터를 수집할 수 있습니다.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: 사진 편집 탭 페이지뷰/트래킹 연동 잘 되어 있습니다.
useMixpanelTrack와useTrackPageView(PAGE_VIEW.PHOTO_EDIT_PAGE)를 컴포넌트 최상단에서 일괄 호출한 구조가 다른 관리자 탭들과도 일관되고,PhotoEditTab로의 컴포넌트/디폴트 익스포트 이름 변경도 명확합니다. 별도 이슈 없어 보입니다.Also applies to: 116-116
frontend/src/pages/AdminPage/tabs/ClubInfoEditTab/ClubInfoEditTab.tsx (1)
14-16: 기본 정보 탭의 페이지뷰/트래킹 훅 배치는 자연스럽습니다.
useMixpanelTrack와useTrackPageView(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
frontend/src/pages/AdminPage/components/ClubLogoEditor/ClubLogoEditor.tsx
Show resolved
Hide resolved
frontend/src/pages/AdminPage/tabs/RecruitEditTab/components/MarkdownEditor/MarkdownEditor.tsx
Show resolved
Hide resolved
oesnuj
left a comment
There was a problem hiding this comment.
로깅 적용 수고하셨습니다
관리자 부분도 이벤트 잔뜩 수집해봅시다~~
There was a problem hiding this comment.
Actionable comments posted: 0
🧹 Nitpick comments (3)
frontend/src/constants/eventName.ts (3)
43-43:TAB_CLICKED이벤트 이름 중복을 고려하세요.
ADMIN_EVENT.TAB_CLICKED와USER_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.
📒 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
#️⃣연관된 이슈
📝작업 내용
중점적으로 리뷰받고 싶은 부분(선택)
논의하고 싶은 부분(선택)
🫡 참고사항
Summary by CodeRabbit
개선 사항
리팩토링
✏️ Tip: You can customize this high-level summary in your review settings.