HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
🤎
프론트엔드 데브코스 5기 교육생
/
소인성팀
소인성팀
/
팀프로젝트-모모
팀프로젝트-모모
/
🛠️
리팩토링
🛠️

리팩토링

스프린트

  • 1차: 24.04.06 ~ 24.04.09
    • Get 요청 관련 부분들을 모두 공부 후 코드에 적용시켜보며 공부했던 부분들을 공유하기
  • 240409
    • useQuery isFetching 얼리리턴 해결! ⇒ state.userInfo 전부 쿼리로 이동…
    • prefetch !!?!?! 혹은 queryKey에 240408 등..
  • 2차 24.04.09 ~ 24.04.15
    • useQuery 로 캐싱할 데이터 찾아보고 적용해보기
    • mutation 부분까지 공부하고 가능한만큼 적용해보기 ~.~
  • 240415
    • detailPost staleTime 1분으로둡시다!
    • 글수정, 타임테이블 투표 등 변경mutation후에 refetch!
    • 쿼리훅 컨벤션
      현재) /hooks/queryHooks 안에서 모든 쿼리훅들 다 관리 중
      컨벤션) /hooks/query/use@@@.ts 로 개별파일만들기!
      쿼리 키 컨벤션
      src/constants/queryKeys
      src/constants/@@,,, url 등..
    • props 규칙
      • 2단계 이상 props drilling인 경우 각 컴포넌트에서 캐싱데이터에 접근
  • 3차 24.04.16 ~ 24.04.19 20시
    • DetailPage
      • DetailPage에서 쿼리캐싱 → props로 넘기기, 다만 2단계 드릴링이 필요한 경우 컨벤션처럼 자식 컴포넌트에서 캐싱데이터에 접근하게끔 수정.
      • useMutation 공부 ….^^,,,
      • 본문수정/타임테이블 수정 시 useMutation → invalidateQueries
    • useQuery의 select 함수!?!?!?
      • 응답데이터 중 일부 필드만 골라 반환시킬수있음!
      • 지금 response가 무거운데, 이를 활용해서 drilling을 좀 막을 수 있지않을가..!
  • 240419
    • DetailPage
      • 게시글 좋아요 클릭하는 데이터를 ‘클라이언트’ ⇒ ‘서버’ 데이터를 사용함으로써 불필요한 리렌더링을 줄여보자.
    • DetailPage 만의 전역상태 postId
      • 일단, context API 적용
  • 4차 24.04.20 ~ 24.04.25 오전 (목 오전에 진행 상황 DM 보내기)
    • 건호님) 폴더구조 바뀐거 반영 → refactor/tanstackQuery 브랜치에 PR
    • Suspense 규칙 생각해보기
      • DetailPage에서 suspense를 적용할 부분이 크게 post / comment 2가지이다.
        • → 본문이 완료되기 전까진 본문+댓글 전체에 로딩
          <전체Suspense> !!!! <본문>x <댓글suspense> <댓글>o </댓글suspense> </전체Suspesne>
      • 메인 : <접속중 > <~Card>영역
    • query & mutation 남은거
      • 좋아요
      • card
      • 로그인쪽,,, ((((
    • useQuery vs useQueryClient
      • 어떤 차이가 있을까? 알아보기
  • 240426
    • Unschedueld → useSuspenseQuery
    • Scheduled → useSuspenseQuries
    • Mainarea.tsx에서 둘을 감싸는 <Suspense>
  • 5차 24.04.27 ~ 24.05.01 20시
    • useSuspenseQuries, 4차 해온거 정리해서 tanstackQuery 브랜치로 PR → 이후 Release로 PR
    • 성능최적화 종류 / 방법 찾아오기 !!
  • 240502
    • 배포!
  • 6차 24.05.03 ~ 24.05.12 일요일 20시
    • 접근성, SEO 올릴 방안 + 시도 해오기
    • 이날모일래 mutation적용
      • 이날 모일래를 그냥 탠스택없이 axios만 쓰고 있음
      • ⇒ 캐싱안되고있음 → 새로 카드 만드는 등 일어났을 때 반영이 안됨..
      • invalid쓰려면 mutation,query가 있어야함
  • 7차 24.05.13 ~ 24.05.17 금 (20시)
    • 공통 컴포넌트 추상화
    • 반응형
      • Main Page
      • Detail Page
      • Profile Page
        • 탭, 카드 겹침
        • 프로필 수정 컴포넌트에 margin-left 부여하기
    • 기타 버그
      • DetailPage textarea 크기 조절 기능 (좌우로는 안되게끔 막기)
      • 🐞
        ㅇㅅㅇ
    • 코드스플리팅
      • 코드스플리팅 정리
  • 7차 24.05.18 ~ 24.05.23 목 (20시)
    • 공통 컴포넌트 추상화 ( 참고 : https://www.youtube.com/watch?v=edWbHp_k_9Y 진유림님 클린 코드)
    • feather-icons import 방식 수정 알아보기
    • 로직이나 컴포넌트 분리 등 코드 리팩토링 할거 리스트업
    • 리팩토링2
      깃허브 위키 정리
  • 8차 24.05.24 ~ 24.05.31 금 (20시)
    • 위키 초안 써오겠습니다 ㅎ
    • 개발일지에 적을거 정리해두기
    • 리팩토링2 할만 한것들 바로바로 시작해서 이슈 올리고 작업하기
context말고 그냥 param..?
📝
공부 기록&공유

Redux-Thunk를 Tanstack-Query로 교체하기

Redux Thunk fetch 코드
상태
경로
함수명
설명
개선 사항
완료
src/_redux/slices/userSlice.ts
getUserInfo
본인확인
MainPage에서 한 번 get 요청으로 fetch 하게끔 설정하였습니다. 또한 staleTime을 infinity로 둠으로써 캐싱된 데이터의 재사용, 네트워크 요청의 최소화, 사용자 경험의 개선 등 여러 이점을 얻을 수 있습니다
src/_redux/slices/allUsersSlice.ts
setAllUserList
사용자목록
src/pages/MainPage/SideBar/SearchBox.tsx
fetchUser
모임 검색
설계 되어있는 API 특성 상, 모임 제목과 작성자 명을 동시에 가져올 수 없음. 때문에 모임 제목을 검색하고, 또 해당 모임 제목을 작성한 유저 이름을 가져와야 하는 상황. 이를 아래와 같이 개선
src/pages/MainPage/CardsArea/UnsheduledCards.tsx
16번째 라인 getApi 함수
‘언제 모일래’ 채널 데이터 posts 호출
src/pages/MainPage/CardsArea/ScheduledMain.tsx
getCardsOfWeek
‘이날 모일래’ 채널 데이터 get 호출
현재 /search/all/{query} 사용해서 정규표현식으로 검색요청 사용중. 전체목록받아온거에서 filter 하는 방법 VS 현재처럼 검색요청인데 reactquery 사용 고민
완료
src/pages/DetailPage/DetailPage.tsx 37번 라인
getPostDetail
특정포스트 상세
src/_redux/slices/postSlices/getPostSlice.ts 79번 라인
postComment
댓글작성
src/_redux/slices/postSlices/getPostSlice.ts 107번 라인
deleteComment
댓글삭제
src/_redux/slices/postSlices/getPostSlice.ts 96번 라인
putPost
댓글 업데이트
중복 두개있음 하나로 통일!!! 현재
src/pages/ProfilePage/MyCards.tsx 13번 라인
13번째 라인 getApi 함수
특정유저글목록검색
특정유저가 본인일때와 다른 유저일때 두가지가 있음! 사용함수는 같음
src/pages/ProfilePage/MyLikesCards.tsx 14번 라인
14번째 라인 useEffect 내부 getPostData
좋아요 누른 포스트
마이페이지에서 본인이 좋아요 눌렀던 페이지를 가져오는 함수입니다. 이를 post 요청을 사용하지 않고, 기존에 캐싱되어있던 전체 포스트 데이터를 활용하는 방식으로 개선 예정입니다.
  • TanstackQuery사용하면서 Errorboundary, Suspense 적용하면 좋을듯
 

axios 훅 개선

일부에선
const { response, error, isLoading } = useAxios<IPost[]>(() => getApi(`/posts/channel/${unscheduledChannelId}`), );
일부에선
const res = await getApi<IUser[] | IPost[]>(`/search/all/${values}`);
이런식으로 useAxios, getApi 사용이 혼재되어있음 …
 
 

클라이언트 상태관리 이사가볼까