강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

변재정님의 프로필 이미지
변재정

작성한 질문수

Next + React Query로 SNS 서비스 만들기

react-query를 쓰는 이유와 fresh, stale, inactive

필터옵션이 많은 페이지에서 서버 fetch를 하는게 맞는걸까요??

작성

·

66

0

next 공식문서에서 서버 fetch를 권장하고 있지만

필터옵션이 다수 포진된 페이지에서도 서버 fetch를 해야할까 의문점이 듭니다.

필터 버튼 하나 누를때마다 다시 fetch 해야하니까 route.push나 replace 할 수 밖에 없는데 이게 과연 좋은 방법인가 의구심이 듭니다.

리액트 쿼리를 사용하는게 더 나을지, 서버 fetch를 사용하는게 나은지 선생님의 의견이 궁금합니다.

 

추가로 window.history.replaceState webAPI를 사용하면 단순 url만 변경하고 페이지 로드나 컴포넌트 리렌더링은 일어나지 않는걸로 알고 있는데요.

 

근데 리액트 쿼리로 클라이언트 fetch 할 땐 window.history.replaceState 로 url만 변경해도 다시 fetch가 되더라구요?? 어떤 원리로 동작하게 되는지 궁금합니다!

답변 2

0

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

브라우저 뒤로가기할 때 필터의 스테이트를 하나씩 이전 상태로 되돌리실거면 서버 페치로 해서 히스토리 관리하시는 게 낫고, 그게 아니라면 리액트 쿼리로 하시면 될 것 같습니다.

리액트쿼리는 브라우저주소 바뀔 때 이벤트 탐지가 붙어있는게 아닌가 싶습니다.

변재정님의 프로필 이미지
변재정
질문자

그렇군요 답변 감사합니다.

두 번째 질문은 테스트해보니 답변대로 state 탐지가 붙어있었네요.

신기한게 state가 변경되면서 컴포넌트가 리렌더링될 때 useSearchParams 값도 새로 불러오더라구요?

useSearchParams는 route.push로만 갱신되는 걸로 알고 있는데 아닌가보네요... 혹시 해당 내용 관련해서 인사이트가 있다면 공유주심 감사하겠습니다!

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

https://github.com/vercel/next.js/blob/be7b3a64fab12ddb5bb233d384e062125c343306/packages/next/src/client/components/navigation.ts#L60

직접 소스코드를 보는게 가장 최고아닌가 싶습니다. 매번 new해서 가져오는 느낌이긴 하네요

변재정님의 프로필 이미지
변재정
질문자

야근하느라 바빠서 답변주신걸 이제 봤네요. 내부코드 까보니 url을 state로 관리하더라구요. 그래서 컴포넌트가 리렌더링 됐을 때 url값이 바뀌었다면 새로운 값을 뱉어내는 것 같습니다. 답변 감사합니다!!

0

안녕하세요, 인프런 AI 인턴입니다.

변재정님께서 질문하신 내용은 Next.js와 React Query의 구조 및 데이터 페칭 전략 관련된 것입니다. 필터 옵션이 많은 페이지에서 서버 fetch와 클라이언트 fetch 중 어떤 것을 사용하는 것이 좋을지 고민이시네요. 아래에 관련된 설명을 드리겠습니다.

  1. 서버 Fetch vs 클라이언트 Fetch:

    • 서버 Fetch는 주로 페이지 로드 시, SEO가 필요하거나 초기 데이터 로딩이 중요한 경우에 유리합니다.
    • 클라이언트 Fetch는 필터링이나 인터랙티브한 데이터 변경에 적합합니다. 이 경우 React Query 같은 툴을 사용해 UI 상에서 빠르고 쉽게 데이터 상태를 관리할 수 있습니다.

필터 옵션을 자주 변경해야 하는 경우, 클라이언트에서 데이터를 가져오고, 필요한 경우에만 데이터를 갱신하는 것이 더 효율적일 수 있습니다. 서버 request를 줄여 클라이언트 측에서 작업을 처리함으로써 사용자 경험을 향상시킬 수 있습니다.

  1. window.history.replaceState 동작 원리:

window.history.replaceState는 브라우저의 URL을 변경하되, 페이지를 새로고침하거나 컴포넌트를 다시 렌더링하지는 않습니다. 이는 브라우저의 네비게이션 히스토리에만 URL 상태를 변경할 뿐, React 컴포넌트나 애플리케이션 상태에는 영향을 주지 않습니다.

그러나, React Query의 경우 커스텀 훅이나 특정 상태가 URL에 반응하도록 설정되어 있을 수 있습니다. 이때 URL 변경 이벤트에 따라 트리거가 발생하면서 데이터 페칭이 일어날 수 있습니다. 이는 React Query의 watchQuery나 학습된 URL 파라미터 핸들링 로직에 의해 유발되는 경우가 많습니다.

이 주제와 관련된 추가 학습을 위해, 비슷한 질문과 답변이 있는 글을 참고하시면 도움이 될 수 있습니다:
- React Query와 URL 변경: 해당 글에서는 React Query가 URL 변경 시 어떻게 동작하는지, 각 엔드포인트에서 상태 변화를 관리하는 방법에 대해 설명하고 있습니다.
- Next.js에서 데이터 페칭 전략: 이 문서는 Next.js에서 서버 및 클라이언트 데이터 페칭 시 고려해야 할 사항과 전략을 다룹니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

변재정님의 프로필 이미지
변재정

작성한 질문수

질문하기