[refactor] tanstackQuery 최적화 및 활동사진 컴포넌트 리팩토링#237
Conversation
Summary by CodeRabbit
Walkthrough이번 PR에서는 클럽 관련 훅에서 사용되던 Changes
Assessment against linked issues
✨ Finishing Touches
🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
✅ Deploy Preview for moadong ready!
To edit notification comments on pull requests, go to your Netlify site configuration. |
@coderabbitai review |
There was a problem hiding this comment.
Actionable comments posted: 0
🧹 Nitpick comments (1)
frontend/src/hooks/queries/club/useUpdateClubDescription.ts (1)
1-14: useMutation 최적화가 괜찮아 보입니다만 이점과 주의사항이 있습니다.
useQueryClient와invalidateQueries호출을 제거함으로써 코드가 더 간결해졌습니다. 이 최적화는 상세 페이지에서 GET 요청을 통해 최신 상태를 보장한다는 가정 하에 유효합니다.주의할 점:
- 이 변경 후에는 mutation 성공 시 자동으로 캐시가 무효화되지 않습니다.
- 사용자가 클럽 설명을 업데이트한 후 캐시된 데이터를 보게 될 수 있으므로, UI 흐름이 사용자가 항상 새로운 GET 요청을 트리거하는 페이지로 이동하도록 설계되어 있는지 확인하세요.
성능 측면에서는 불필요한 리페치를 줄여 최적화가 있지만, 데이터 일관성을 유지하는 책임이 프론트엔드 흐름에 더 많이 의존하게 됩니다.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (8)
frontend/src/hooks/queries/club/useUpdateClubDescription.ts(1 hunks)frontend/src/hooks/queries/club/useUpdateClubDetail.ts(1 hunks)frontend/src/pages/AdminPage/components/ImagePreview/ImagePreview.tsx(1 hunks)frontend/src/pages/AdminPage/components/ImageUpload/ImageUpload.tsx(2 hunks)frontend/src/pages/AdminPage/tabs/RecruitEditTab/RecruitEditTab.styles.ts(1 hunks)frontend/src/pages/AdminPage/tabs/RecruitEditTab/RecruitEditTab.tsx(3 hunks)frontend/src/pages/ClubDetailPage/ClubDetailPage.tsx(2 hunks)frontend/src/types/club.ts(1 hunks)
🧰 Additional context used
🧬 Code Definitions (3)
frontend/src/pages/AdminPage/components/ImageUpload/ImageUpload.tsx (1)
frontend/src/types/club.ts (1)
ImageUploadProps(27-30)
frontend/src/pages/AdminPage/components/ImagePreview/ImagePreview.tsx (1)
frontend/src/types/club.ts (1)
ImagePreviewProps(32-35)
frontend/src/pages/AdminPage/tabs/RecruitEditTab/RecruitEditTab.tsx (3)
frontend/src/types/club.ts (1)
ClubDetail(12-20)frontend/src/apis/updateFeedImages.ts (1)
updateFeedImages(3-19)frontend/src/hooks/queries/club/useUpdateFeedImages.ts (1)
useUpdateFeedImages(4-9)
🔇 Additional comments (12)
frontend/src/pages/AdminPage/tabs/RecruitEditTab/RecruitEditTab.styles.ts (1)
105-105: 간격 조정에 대한 적절한 변경이네요.이미지 컨테이너의 gap을 37px에서 15px로 줄여 보다 콤팩트한 레이아웃을 만들었네요. 시각적으로 더 조밀한 UI를 만드는 데 도움이 될 것 같습니다.
frontend/src/hooks/queries/club/useUpdateClubDetail.ts (1)
1-14: useUpdateClubDescription와 동일한 방식으로 잘 최적화되었습니다.
useUpdateClubDescription훅과 일관된 방식으로useQueryClient와invalidateQueries호출을 제거하셨네요. 코드 일관성 측면에서 좋은 접근입니다.이 훅도 마찬가지로 다음 사항을 고려해야 합니다:
- 클럽 상세 정보 업데이트 후 자동 캐시 무효화가 더 이상 발생하지 않습니다.
- 사용자가 항상 새로운 GET 요청을 트리거하는 페이지 흐름을 유지해야 최신 데이터를 보장할 수 있습니다.
두 개의 관련 훅에서 동일한 패턴을 적용한 점이 좋습니다. 이렇게 하면 코드베이스 전체에서 일관된 데이터 관리 전략을 유지할 수 있습니다.
frontend/src/types/club.ts (1)
27-35: 타입 분리가 잘 이루어졌습니다.
ImageUploadProps와ImagePreviewProps인터페이스를 추가하여 컴포넌트의 props 타입을 중앙화한 접근법이 좋습니다. 이렇게 하면 다음과 같은 이점이 있습니다:
- 타입 일관성 유지
- 여러 컴포넌트에서 재사용 가능
- 코드 가독성 향상
- 유지보수 용이성 증가
PR 설명에서 언급하신 "특정 파일에서만 사용되는 인터페이스 분리"에 대해서는, 현재 접근법이 적절합니다. 이미지 업로드/미리보기는 클럽 기능과 밀접하게 관련되어 있으므로
club.ts에 정의하는 것이 논리적입니다.단일 파일에서만 사용되는 인터페이스라 하더라도, 관련 도메인 타입과 함께 그룹화하면 전체 코드베이스의 일관성과 유지보수성이 향상됩니다.
frontend/src/pages/ClubDetailPage/ClubDetailPage.tsx (1)
3-12: 컴포넌트 임포트 구조가 개선되었습니다.임포트 순서를 재배치하여 코드 가독성이 개선되었습니다. Styled 컴포넌트와 훅의 임포트 순서를 조정한 것은 일관성 측면에서 좋은 변화입니다.
frontend/src/pages/AdminPage/components/ImagePreview/ImagePreview.tsx (1)
3-5: 타입 정의 분리가 효과적으로 이루어졌습니다.인라인 타입 정의 대신
@/types/club에서 정의된ImagePreviewProps인터페이스를 활용함으로써 코드의 일관성과 유지보수성이 향상되었습니다. 이는 PR 목표 중 하나인 타입 분리에 부합하는 좋은 변경사항입니다.frontend/src/pages/AdminPage/components/ImageUpload/ImageUpload.tsx (2)
5-10: 타입 정의 분리 및 사용이 일관되게 적용되었습니다.인라인 타입 정의 대신
@/types/club에서 정의된ImageUploadProps인터페이스를 사용하여 코드 구조가 개선되었습니다. 이러한 접근 방식은ImagePreview컴포넌트와 일관되게 적용되어 전체적인 코드 품질이 향상되었습니다.
40-40: 기본 내보내기 추가로 일관성이 개선되었습니다.명명된 내보내기(
export const) 외에도 기본 내보내기(export default)를 추가하여 다른 컴포넌트들과의 일관성을 유지하고 있습니다. 이는 컴포넌트 임포트 방식의 유연성을 높이는 좋은 접근법입니다.frontend/src/pages/AdminPage/tabs/RecruitEditTab/RecruitEditTab.tsx (5)
2-15: 임포트 순서 재구성이 효과적으로 이루어졌습니다.임포트 구문의 순서를 논리적으로 재구성하여 코드 가독성이 향상되었습니다. 특히
ImageUpload와ImagePreview컴포넌트를 함께 그룹화한 것은 관련 컴포넌트들의 연관성을 명확히 해주는 좋은 방식입니다.
17-18: 상수 선언 위치 개선이 이루어졌습니다.
MAX_IMAGES와TEMP_CLUB_ID상수를 컴포넌트 상단으로 이동한 것은 코드 가독성과 유지보수성을 높이는 좋은 변화입니다. 이렇게 함으로써 중요한 설정값들을 한눈에 확인할 수 있게 되었습니다.
23-31: 상태 관리 로직 배치가 개선되었습니다.
updateFeedImagesmutation과imageList상태 선언을 컴포넌트 상단 부근으로 이동한 것은 관련 코드 블록을 더 논리적으로 그룹화하는 좋은 리팩토링입니다. 이를 통해 코드 흐름을 더 쉽게 파악할 수 있게 되었습니다.
135-135: 명확한 FIXME 주석이 추가되었습니다.
// [x]FIXME: div 컴포넌트 수정주석은 향후 개선이 필요한 부분을 명확히 표시하고 있습니다. 이런 주석은 코드의 다음 개선 단계를 계획하는 데 도움이 됩니다.이 FIXME 주석이 가리키는 구체적인 개선 내용을 명확히 하는 것이 좋을 것 같습니다. 어떤 div 컴포넌트를 어떻게 수정할 계획인지 더 상세한 설명을 추가하면 다른 개발자들이 이해하는 데 도움이 될 것입니다.
211-211: 제목 태그 일관성이 개선되었습니다.활동 사진 편집 섹션의 제목 태그를
<h2>에서<h3>로 변경한 것은 다른 섹션의 제목 태그와의 일관성을 유지하는 좋은 변화입니다. 이는 전체 UI의 일관성과 접근성을 향상시킵니다.
#️⃣연관된 이슈
📝작업 내용
useMutation 최적화
GET 요청으로 항상 최신 상태를 보장하고 있음
invalidateQueries(['clubDetail'])는 클럽 상세 데이터를 다시 불러오는 역할인데,queryKey는invalidateQueries에서만 사용됨queryKey는 특정 캐시 데이터를 무효화할 때 사용되므로,invalidateQueries를 제거하면queryKey도 필요 없습니다.타입 분리 b3b4c8f
활동사진 컴포넌트 리팩토링 54c851a
중점적으로 리뷰받고 싶은 부분(선택)
논의하고 싶은 부분(선택)
🫡 참고사항