Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[강성구] sprint9 #263

Merged

Conversation

L1m3Kun
Copy link
Collaborator

@L1m3Kun L1m3Kun commented Aug 9, 2024

요구사항

체크리스트 [기본]

  • 자유 게시판 페이지 주소는 “/boards” 입니다.
  • 전체 게시글에서 드롭 다운으로 “최신 순” 또는 “좋아요 순”을 선택해서 정렬을 할 수 있습니다.
  • 게시글 목록 조회 api를 사용하여 베스트 게시글, 게시글을 구현합니다.
  • 게시글 title에 검색어가 일부 포함되면 검색이 됩니다.

체크리스트 [심화]

  • 반응형으로 보여지는 베스트 게시판 개수를 다르게 설정할때 서버에 보내는 pageSize값을 적절하게 설정합니다.
  • next의 prefetch 기능을 사용해봅니다.

주요 변경사항

  • axios 추가
  • tanstack/react-query 추가

미리보기

localhost_3000_boards

멘토에게

  • 반응형 기능 미완성입니다
  • ssr을 사용하고 싶은데 맞게 사용한지 궁금합니다
  • 검색어가 일부 포함되면 검색이 된다는 사항이 검색 텍스트 변경 시마다 검색이 된다는 의미일까요??
  • FSD Architecture 를 사용해봤습니다

@L1m3Kun L1m3Kun requested a review from wlgns2223 August 9, 2024 10:37
@L1m3Kun L1m3Kun added 매운맛🔥 뒤는 없습니다. 그냥 필터 없이 말해주세요. 책임은 제가 집니다. 미완성🫠 죄송합니다.. labels Aug 9, 2024
Comment on lines +16 to +17
<QueryClientProvider client={queryClient}>
<HydrationBoundary state={pageProps.dehydratedState}>
Copy link
Collaborator

Choose a reason for hiding this comment

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

👍

Copy link
Collaborator

Choose a reason for hiding this comment

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

allBoards, bestBoards 와 같은 스트링 쿼리키가 다른 곳에서도 좀 많이 쓰일 것 같아서 찾아보니 쿼리 키를 관리하는 전략이 있네요. tkdodo라고 리액트 코어 메인테이너일꺼에요. 리액트씬에서 유명하신 분입니다. 아래의 링크를 읽어보시면 될 것 같아요.

https://tkdodo.eu/blog/effective-react-query-keys#use-query-key-factories

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

항상 네이밍 관련해서 고민이 많았는데 좋은 참고자료 감사합니다 😊

return res.data;
})
.catch((e) => {
return e;
Copy link
Collaborator

Choose a reason for hiding this comment

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

Suggested change
return e;
throw e;

에러를 던져서 getBoards를 사용하는 측에서 에러를 처리 할 수 있도록 합시다.
react-query에서 에러 상태를 잘 캐치 해줄 것 같네요.

Copy link
Collaborator

Choose a reason for hiding this comment

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

날짜 다룰때 유용한 라이브러리를 소개합니다.

https://day.js.org

@wlgns2223
Copy link
Collaborator

ssr을 사용하고 싶은데 맞게 사용한지 궁금합니다

SSR을 잘 구현했는지 알아보기 위해 로컬에서 돌려봤습니다.
혹시 /boards로 접속하면 에러가 나지 않나요? 아래와 같은 에러가 나네요.
image

Comment on lines +6 to +12
const queryClient = new QueryClient();

export const getServerSideProps = async () => {
await queryClient.prefetchQuery({
queryKey: ['allBoards'],
queryFn: () => getBoards({ page: 1, pageSize: 10, orderBy: 'recent' }),
});
Copy link
Collaborator

Choose a reason for hiding this comment

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

이 부분을 궁금해서 찾아봤는데 서버 요청마다 새로운 쿼리 클라이언트를 생성해야한다고 합니다.
여러 유저로부터 오는 요청에 대해서 같은 클라이언트를 사용하게되면 캐쉬 데이터가 충돌이 날 수 있습니다.
SSR 방식으로 데이터를 가져올때는 요청마다 상태를 독립적으로 유지 할 필요가 있습니다.

Suggested change
const queryClient = new QueryClient();
export const getServerSideProps = async () => {
await queryClient.prefetchQuery({
queryKey: ['allBoards'],
queryFn: () => getBoards({ page: 1, pageSize: 10, orderBy: 'recent' }),
});
export const getServerSideProps = async () => {
const queryClient = new QueryClient();
await queryClient.prefetchQuery({
queryKey: ['allBoards'],
queryFn: () => getBoards({ page: 1, pageSize: 10, orderBy: 'recent' }),
});

@wlgns2223
Copy link
Collaborator

검색어가 일부 포함되면 검색이 된다는 사항이 검색 텍스트 변경 시마다 검색이 된다는 의미일까요??

디자인 시안상 요구사항이 명확하지 않아서 정답은 없지만 일반적으로는 엔터 혹은 검색 버튼을 눌렀을때 검색 API를 보내도록 하는게 적절할 것 같습니다. 텍스트 변경시마다 API 요청을 보내면 디바운스를 걸더라도 네트워크 요청이 많아서 좋지 않을 것 같습니다 !

@wlgns2223
Copy link
Collaborator

[FSD Architecture](https://emewjin.github.io/feature-sliced-design/) 를 사용해봤습니다

뭔지 대충 본적은 있는데 귀찮아서 굳이 안해보고 있었거든요 ! 새로운걸 바로바로 적용해나가는 자세를 보니 좋은 개발자가 될 것 같습니다 ㅎㅎㅎㅎ

@wlgns2223 wlgns2223 merged commit 3993e21 into codeit-bootcamp-frontend:Next-강성구 Aug 12, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
매운맛🔥 뒤는 없습니다. 그냥 필터 없이 말해주세요. 책임은 제가 집니다. 미완성🫠 죄송합니다..
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants