일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- react-hook-form
- css
- ToyProject
- TIL
- React-native
- Tanstack Query
- 문제
- wescanner
- 일본 우편번호 api
- 팀프로젝트
- 구조분해할당
- html
- 다음은 메인페이지
- miniproject
- toy project
- javascript
- teamproject
- project
- wecode
- 다중map
- useForm
- next.js
- 처음부터 배포까지
- useEffect
- 이중map
- React
- mini
- 리액트네이티브
- JS
- Threppa
- Today
- Total
블로그 이름을 입력해주세요
[Next.js] Tanstack Query로 SSR ??? 본문

들어가면서
코드를 설명하기 전 SSR(Server-Side Rendering)이 중요한 이유를 알아야 한다

리액트는 CSR방식을 채택함으로써 웹을 앱처럼 별도의 새로고침 과정이 없이 데이터를 동적으로 핸들링할 수 있게 하여 사용자는 깜빡이는 현상을 느끼지 않고 웹을 경험할 수 있게 만들었다
하지만 시간이 지날수록 다시 SEO가 중요해졌고 CSR은 페이지에서 보이는 데이터의 양이 많을수록 느리다는 단점이 있어 이를 보완하고자 나온 게 Next.js라고 할 수 있다
리액트로 개발을 즐겨했던 개발자라면 대부분 알고 있는 리액트와 리액트 쿼리(구)를 사용 했을텐데 Next.js에서 리액트 쿼리를 쓸 필요가 있나 하는 의견들도 간혹 있었지만 현재 Tanstack Query (구) react-query는 Next.js에서도 안되는거 없이 다된다는 Tanstack Query의 자신감과 함께 SSR을 사용할 수 있게 소개하고 있다
이를 통해 조금이나마 우리가 Next.js에서도 하는 리액트식 개발을 벗어날 수 있지 않을까 해서 공유 해본다
이제 'use client'선언은 제발 필요한 부분에서만 하고 SEO위해 SSR에게 양보하자!
이제 SEO에 친화적인 프로젝트로 만들어보자 생각보다 간단하다
Tanstack query에서 SSR을 구현하는 단계는 아래와 같다
✅ 서버에서 실행되는 단계
- 사용자가 /ssr-page를 요청하면 Next.js의 getServerSideProps가 실행됨
- QueryClient를 생성하고 prefetchQuery를 실행하여 데이터를 가져옴
- 데이터를 직렬화(dehydrate(queryClient))하여 props로 전달
✅ 클라이언트에서 실행되는 단계
- HydrationBoundary가 서버에서 받은 데이터를 React Query의 캐시로 복구
- useQuery가 실행될 때, 서버에서 받은 데이터를 바로 사용하여 불필요한 API 요청을 방지
- 이후 클라이언트에서 같은 데이터를 요청하면 React Query 캐시에서 데이터를 가져옴
Tanstack query를 설치하였다는 가정하에 그 이후 단계를 설명한다 만약 아직 설치를 하지 않았다면 공식문서를 통해 설치부터 하고 오면 된다
주의 : 최신버전을 권장한다 이유는 v5와 v4의 문법이 달라진 부분이 있다
설치
https://tanstack.com/query/latest/docs/framework/react/installation
Installation | TanStack Query React Docs
You can install React Query via , or a good ol' <script via . NPM bash npm i @tanstack/react-query or bash pnpm add @tanstack/react-query or bash yarn add @tanstack/react-query or bash bun add @tansta...
tanstack.com
예시 코드
1️⃣ app/ssr-page/page.tsx (SSR 적용)
import { HydrationBoundary, QueryClient, dehydrate } from "@tanstack/react-query";
import PostList from "./post-list";
import { fetchPosts } from "./fetchPosts";
export default async function SSRPage() {
const queryClient = new QueryClient();
// ✅ 서버에서 미리 데이터 가져오기 (SSR)
await queryClient.prefetchQuery({
queryKey: ["posts"],
queryFn: fetchPosts,
});
return (
<HydrationBoundary state={dehydrate(queryClient)}>
<PostList />
</HydrationBoundary>
);
}
2️⃣ app/ssr-page/post-list.tsx (클라이언트에서 데이터 사용)
"use client";
import { useQuery } from "@tanstack/react-query";
import { fetchPosts } from "./fetchPosts";
const usePosts = () => {
return useQuery({
queryKey: ["posts"],
queryFn: fetchPosts,
});
};
export default function PostList() {
const { data, isLoading } = usePosts();
if (isLoading) return <p>Loading...</p>;
return (
<ul>
{data.map((post: any) => (
<li key={post.id}>{post.title}</li>
))}
</ul>
);
}
정리
📌 SEO 최적화 (검색엔진에 유리)
- 서버에서 미리 데이터를 가져와 HTML을 생성하므로, Google, Bing과 같은 검색 엔진이 전체 페이지를 읽을 수 있다
📌 성능 최적화 (빠른 페이지 로딩)
- 서버에서 데이터를 미리 가져와 렌더링 하기 때문에, 브라우저에서 API 요청을 다시 하지도 된다
📌 이후 Tanstac Query의 캐싱을 활용
- 캐싱이 적용되면 같은 데이터에 대해 클라이언트에서 다시 요청할 필요 없음 → 불필요한 네트워크 비용을 절감할 수 있다
📌 사용자 경험 (UX) 향상
- 이후 클라이언트에서 데이터를 다시 요청할 때, React Query 캐시를 활용하여 부드러운 UX 제공
마치면서
Next.js와 Tanstack Query를 통해 SSR과 함께 사용하면 성능과 SEO, UX를 모두 개선할 수 있다는 장점이 있다.
'웹 개발' 카테고리의 다른 글
[Next.js] Tanstack Query Mutations (0) | 2025.04.09 |
---|---|
zustand(쥬스탠드)로 사용으로 전역상태 관리하기 (사용법) (0) | 2024.02.09 |
교차 출처 리소스 공유(CORS) (0) | 2022.12.11 |
Javascript 호이스팅에 대해 알고 계신가요? (0) | 2022.12.07 |
실행 컨텍스트에 대해 알고 계시나요? (0) | 2022.08.30 |