inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

react-query SSR 설정하기

fetch가 force-cache여도 qn의 invalidateQueries가 가능한가요?

해결된 질문

175

squirrel PARK

작성한 질문수 14

0

안녕하세요.

강의를 복습하다가 캐싱 기능에 대해 질문이 생겼습니다.

 

 Next에서 fetch의 cache: 'force-cache'를 설정하면, 데이터가 공적 캐싱으로 처리된다고 알고 있습니다.

 

여기서 게시판을 예로 들어보면,

게시물을 새로 포스팅하면 전체 게시물 목록을 갱신해야 하기 때문에 서버에서는 cache: 'no-store'를 설정하여 항상 최신 데이터를 가져오고, 클라이언트에서는 qn을 이용해서 staleTime을 설정하여 데이터를 일정 시간 동안 캐싱하고 있습니다.

 

"force-cache"와 "useQuery" 내 두 번의 캐싱이 발생하여 비 효율적일 수 있다고 생각되어 cache: 'no-store'를 사용하여 클라이언트에서만 캐싱하고 있었는데요.

 

생각해보니 fetch를 이용해서 공적으로 캐싱하는게 성능적으로 우월할거 같아서 "force-cache"로 변경하고 invalidateQueries를 이용하여 클라이언트에서 post되면 데이터를 갱신하도록 변경하고 테스트를 해보았는데 잘되는게 이해가 되질 않습니다.

 

서버는 초기 항상 캐싱된 데이터를 반환하기 때문에 데이터가 상이할줄 알았는데 터미널을 봐도

post하고 리스트를 갱신할때만 Api 호출하고 이후엔 캐싱된 데이터를 잘 사용합니다.

 

이 경우, 사용자가 데이터를 갱신하면 서버의 캐시가 자동으로 업데이트되고, 공적 캐싱을 사용하여 효율적으로 데이터를 관리할 수 있는 건가요?

 

 

 

 

 

 

react next.js react-query next-auth msw

답변 2

0

제로초(조현영)

프론트에서 사용하는 invalidateQueries의 fetch와 Next SSR의 fetch는 서로 다른 fetch라서 캐시가 업데이트 될 것입니다. 첫 페이지 진입만 Next SSR의 fetch가 돌고 그 다음부터는 클라이언트 react-query의 fetch가 돌게 됩니다.

0

squirrel PARK

아.. 다른거였군요 새로고침하니까 되돌아가네요.ㅠ 감사합니다

0

인프런 AI 인턴

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

Next.js와 React Query에서 캐싱과 데이터 갱신에 대해 좋은 질문을 주셨습니다.

먼저, Next.js의 cache: 'force-cache' 설정은 클라이언트 측에서는 데이터를 공적으로 캐싱하여 요청이 발생할 때마다 네트워크를 통해 최신 데이터를 요청하지 않고, 캐시된 데이터를 사용하도록 합니다. 이러한 설정이 클라이언트 측에서 성능을 개선하는 데 기여할 수 있습니다.

그러나 클라이언트 측에서 데이터를 효율적으로 갱신하기 위해 invalidateQueries를 사용하시는 부분에 대해서는 다음과 같은 점을 유의하셔야 합니다:

  1. InvalidateQueries와 Force-Cache 간의 공조:

    • 클라이언트에서 invalidateQueries를 호출하면 React Query는 클라이언트 측 캐시를 무효화하고 새 데이터를 가져오게 됩니다. 이때 네트워크 요청이 발생하며, fetch는 서버에 데이터를 요청하게 됩니다.
    • cache: 'force-cache' 설정은 서버가 이미 캐싱된 데이터를 제공하도록 하지만, 새로운 데이터를 가져오려면 서버 측에서 추가적인 캐시 무효화 로직이 필요할 수 있습니다. 일반적으로 서버의 캐시를 갱신하는 로직은 캐시 기간이 지난 경우나 특정 이벤트(예: 새 게시물 포스팅)가 발생할 때 트리거됩니다.
  2. 클라이언트 측에서 최대한 최신 데이터 유지:

    • 클라이언트에서 데이터를 최신으로 유지하려면 staleTime, cacheTime과 같은 React Query의 옵션을 적절히 설정하고, 그리고 prefetchQueryrefetch 메소드를 이용하여 데이터가 사용될 시점에 최신 데이터를 미리 가져오는 방식을 권장합니다.

아래는 관련하여 참고하실 수 있는 유사한 질문과 답변입니다:

이 질문에서 Next.js와 React Query의 useQueryprefetchQuery를 사용하는 경우 서로 다른 페이지에서 캐시 데이터를 공유하고 갱신하는 방법에 대해 다루고 있습니다.

다른 관련된 Q&A 글들도 참고해 보시면, squirrel PARK님께서 언급하신 문제의 이해를 더 넓히실 수 있을 것입니다.

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

캡처링부분 질문있습니다.

0

76

2

깃에 소스코드를 찾을 수 없습니다.

0

113

2

useInfiniteQuery promise와 react use 사용시 페이지 무한 로딩

0

98

1

import 파일 경로를 찾지 못 해서 에러가 발생합니다.

0

111

2

css 라이브러리 추천 부탁드립니다

0

141

2

팔로우 추천 목록이 빈 배열로 들어옵니다.

0

133

1

게시물 업로드 시 userId가 undefined로 들어가는 오류

0

119

1

useSuspenseQuery 사용 시 SSR 401 이슈 관련

0

172

1

리액트 쿼리 useinfinitequery 무한스크롤 구현 시 페이지가 이동할 경우 데이터가 보존되게 할 수 있나요??

0

184

3

폴링이 필요없는 이유

0

93

2

next Request Memoization과 react cache

0

110

2

seo 최적화 기준은 데이터 fetching인가요 아님 데이터 렌더링인가요?

0

84

2

next.js 서버fetch 에러 fallback ui 구현 방법

0

173

2

프레임워크 여론 파악법

0

125

2

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

0

103

2

서버 fetch suspense 로 감싸고 새로고침 시 잠시 빈 화면이 노출된 후 fallback ui가 노출됩니다.

0

102

2

template.tsx 내 서버fetch 응답값과 클라이언트 컴포넌트 상태값 싱크가 맞지 않는 이슈

0

66

2

Auth.js 사용 시 authorize 함수가 호출되지 않습니다

0

132

2

next.js 에서 로그인에 관하여

0

139

1

Next의 route handler에 대한 질문이 있습니다.

0

101

2

게시판 리스트 만들때 use client를 어디서부터 집어넣어야할지 모르겠습니다

0

98

2

프라이빗 폴더를 해야 하는 이유가 모호한 것 같아요.

0

85

2

vanilla-extract 못찾는 문제

0

230

2

fetch 캐싱과 revalidate 관련

0

85

2