ํ๋ก์ ํธ์์ React Query์ Hydration๊ณผ prefetchQuery
๋ฅผ ํ์ฉํ์ฌ SSR(Server-Side Rendering)์ ๊ตฌํํ๋ค.
https://new-development.tistory.com/13
React Query์ SSR: ์๋ฒ ์ฌ์ด๋ ๋ฐ์ดํฐ ๊ด๋ฆฌ์ Hydration ํ์ฉ
ํ์ฌ ํ๋ก์ ํธ๋ ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง(SSR)๊ณผ ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ๋ ๋๋ง(CSR)์ด ํผํฉ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ค.์ ์ ์ธ ํ์ด์ง: ๋ฐ์ดํฐ ๋ณํ๊ฐ ์ ์ด ์ ์ ์ฝํ ์ธ ๋ก ์ ๊ณต (e.g. ๋ฉ์ธ ํ๋ฉด)๋์ ์ธ ํ์ด์ง: ๋ฐ
new-development.tistory.com
์ด ๊ณผ์ ์์ ํ์๋ค๊ณผ ๋ค์ํ ์๊ฒฌ์ ๋๋ด๋๋ฐ, ๊ทธ์ค fetchQuery
์ ๋ํ ๋
ผ์๊ฐ ์์๋ค.
์๊ฒฌ 1.
"๋ถ๋ชจ ์ปดํฌ๋ํธ์์ SSR์ ํตํด ๋ฐ์ดํฐ๋ฅผ ํจ์นญํ ๋ค, ์ด๋ฅผ ์์ ์ปดํฌ๋ํธ์ props๋ก ์ ๋ฌํ๋ฉด ์์ ์ปดํฌ๋ํธ๊ฐ ์๋ฒ ์ปดํฌ๋ํธ๋ก ๋์ํ ์ ์์ง ์์๊น์? SEO ๊ด์ ์์ ๋ ์ ๋ฆฌํ ๊ฒ ๊ฐ์ต๋๋ค."
์๊ฒฌ 2.
"fetchQuery๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ props๋ก ๋๊ฒจ์ฃผ๋ ๋ฐฉ์์ ์ด๋จ๊น์? ์๋๋ฉด์์ ์ฅ์ ์ด ์์ ๊ฒ ๊ฐ์ต๋๋ค."
์ด ๋
ผ์์์ ๋๋ ๋ฆฌ์กํธ์ฟผ๋ฆฌ ๊ณต์ ๋ฌธ์๊ฐ prefetchQuery
์ useQuery
๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ ์ด์ ์ ์๋ฌธ์ด ๋ค์ด ๊ด๋ จ ๋ด์ฉ์ ์กฐ์ฌํ๊ณ ์ ๋ฆฌํ๋ค.
fetchQuery์ ๋ฌธ์ ์
์์ ์ฝ๋
// fetchQuery ์ฌ์ฉ ์์
const ParentComponent = async () => {
const data = await fetchQuery(queryClient, ['posts'], fetchPosts);
return <ChildComponent posts={data} />;
};
๋ฌธ์ 1: ์บ์ ์ง์์ฑ ๋ถ์กฑfetchQuery
๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ ์ฆ์ ์ฌ์ฉํ๋ ์ผํ์ฑ ์์
์ ์ ํฉํ๋ค. ํ์ง๋ง React Query์ ์บ์์ ์๋ฒฝํ ํตํฉ๋์ง ์์ ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
- ๋ฐ์ดํฐ๊ฐ ์บ์๋๋๋ผ๋ ๋ค๋ฅธ ์ปดํฌ๋ํธ์์ ์ด๋ฅผ ํ์ฉํ์ง ๋ชปํจ.
- ์๋ก๊ณ ์นจ, ํ์ด์ง ์ด๋ ์ ์บ์๋ ๋ฐ์ดํฐ๋ฅผ ์์ด๋ฒ๋ฆผ.
๋ฌธ์ 2: ๋ฆฌํจ์นญ ๋ฌธ์ fetchQuery
๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์จ ํ, ์์ ์ปดํฌ๋ํธ์์ useQuery
๋ฅผ ์ฌ์ฉํ๋ฉด ๋์ผํ ์ฟผ๋ฆฌ ํค์๋ ๋ถ๊ตฌํ๊ณ ์ค๋ณต ์์ฒญ์ด ๋ฐ์ํ ์ ์๋ค.
const ChildComponent = ({ posts }) => {
// ๋ถํ์ํ ๋คํธ์ํฌ ์์ฒญ ๋ฐ์ ๊ฐ๋ฅ
const { data } = useQuery(['posts'], fetchPosts);
return <div>{/* ... */}</div>;
};
๋ฌธ์ 3: React Query์ ๊ณ ๊ธ ๊ธฐ๋ฅ ํ์ฉ ์ ํ
React Query์ ๊ณ ๊ธ ๊ธฐ๋ฅ๋ค์ ์ฌ์ฉํ ์ ์๋ค.
- ๋ฐ์ดํฐ ์ ์ ๋ ๊ด๋ฆฌ
- ์๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ๋ฆฌํจ์นญ
- ์๋ฌ ์ฒ๋ฆฌ ๋ฐ ์ฌ์๋
- ๋๊ด์ ์ ๋ฐ์ดํธ Optimistic UI
prefetchQuery์ useQuery์ ์กฐํฉ
prefetchQuery
๋ SSR์์ ๋ฐ์ดํฐ๋ฅผ ๋ฏธ๋ฆฌ ๊ฐ์ ธ์ React Query ์บ์์ ์ ์ฅํ๊ณ , ํด๋ผ์ด์ธํธ์์ ์ด๋ฅผ ํ์ฉํด Hydration์ ์ํํ๋ค. ์ด ๋ฐฉ์์ fetchQuery
์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ฉฐ, ๋ค์๊ณผ ๊ฐ์ ์ด์ ์ ์ ๊ณตํ๋ค.
- ๋ฐ์ดํฐ ์ ์ ๋ ๊ด๋ฆฌ: staleTime๊ณผ cacheTime ์ค์ ๊ฐ๋ฅ
- ์บ์ ํ์ฉ: ์ฌ๋ฌ ์ปดํฌ๋ํธ์์ ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ๊ณต์
- ์ฑ๋ฅ ์ต์ ํ: ๋ถํ์ํ ๋คํธ์ํฌ ์์ฒญ ๋ฐฉ์ง
- ์ ์ง๋ณด์ ์ฉ์ด์ฑ: React Query์ ์ํ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ์ ๊ทน ํ์ฉ
์ค์ ํ๋ก์ ํธ ์ ์ฉ
- ๋ฉ์ธ ํ์ด์ง
- ์ค์๊ฐ์ฑ์ด ์ค์ํ ์ธ๊ธฐ ์ฌํ/๋ฆฌ๋ทฐ ์ปดํฌ๋ํธ์์ prefetchQuery์ useQuery ์กฐํฉ์ ์ฌ์ฉํด ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌ
- ์ด์ : ๋ฐ์ดํฐ ์ ์ ๋ ๊ด๋ฆฌ๊ฐ ์ค์ํ๋ฉฐ, React Query์ ์๋ ๋ฆฌํจ์นญ ๊ธฐ๋ฅ์ ํ์ฉํ ์ ์๊ธฐ ๋๋ฌธ
- ์์ธ ํ์ด์ง
- ์ฌํ ์์ธ ํ์ด์ง์ฒ๋ผ ์ ์ ๋ฐ์ดํฐ ์์ฃผ์ ํ๋ฉด์์๋ fetchQuery๋ฅผ ์ฌ์ฉํด๋ ๋ฌด๋ฐฉํ์ง๋ง, ๋์ ์์(์: ๋ถ๋งํฌ, ๋ํ ์ ์ฒญ ๋ฒํผ)์์๋ ๋ฐ์ดํฐ ๋ถ์ผ์น ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์์ด ๋ง์ฐฌ๊ฐ์ง๋ก prefetchQuery ์ฌ์ฉ
fetchQuery vs prefetchQuery: ์ ๋ฆฌ
์ ํ๊ธฐ์ค | fetchQuery | prefetchQuery |
๋ฐ์ดํฐ ์ฑ๊ฒฉ | ์ ์ ๋ฐ์ดํฐ | ๋์ ๋ฐ์ดํฐ, ์ ์ ๋ ๊ด๋ฆฌ ํ์ |
SEO | ํ์ | ํ์ |
์บ์ ํ์ฉ | ์ ํ์ | ํจ๊ณผ์ |
React Query ๊ธฐ๋ฅ ํ์ฉ | ๋ถ๊ฐ๋ฅ | ๊ฐ๋ฅ |
prefetchQuery์ SSR/CSR์ ๋ํ ์๋ฌธ์
prefetchQuery๋ฅผ ์ฌ์ฉํ๋ฉด ์์ ์ปดํฌ๋ํธ๊ฐ useQuery๋ฅผ ์ฌ์ฉํด์ผ ํ๋ฏ๋ก, ์์ ์ปดํฌ๋ํธ๊ฐ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๊ฐ ๋์ด SSR์ด ์ ๋๋ก ๋์ํ์ง ์๋ ๊ฒ์ด ์๋๊ฐ?
SSR์ด ๋์ํ๋ ์ด์
1. ์๋ฒ ์ญํ
- ์๋ฒ๋ ํด๋ผ์ด์ธํธ๊ฐ ํ์๋ก ํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฏธ๋ฆฌ ๊ฐ์ ธ์ React Query์ ์บ์์ ์ ์ฅํ๋ค.
- ์ ์ฅ๋ ์บ์๋ dehydrate๋ฅผ ํตํด JSON ํํ๋ก ์ง๋ ฌํ๋๋ค. ์ด ์ง๋ ฌํ๋ ๋ฐ์ดํฐ๋ HTML์ ์ฝ์ ๋์ด ํด๋ผ์ด์ธํธ๋ก ์ ๋ฌ๋๋ค.
2. ์๋ฒ์์ ์์ ํ HTML ์ ๊ณต
- ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฏธ๋ฆฌ ํจ์นญํ๊ธฐ ๋๋ฌธ์, ๋ธ๋ผ์ฐ์ ๋ ์ด ๋ฐ์ดํฐ๋ฅผ ํฌํจํ ์์ ํ HTML์ ๋ฐ์ ๊ฒ์์์ง์ด ์ด๋ฅผ ๋ฐ๋ก ์ฝ์ ์ ์๊ฒ ๋๋ค.
3. ์ด๊ธฐ ๋ ๋๋ง
- ์์ ์ปดํฌ๋ํธ๊ฐ useQuery๋ฅผ ์ฌ์ฉํ๋๋ผ๋, ํด๋ผ์ด์ธํธ๋ ์ด๋ฏธ Hydration์ ํตํด ๋ฐ์ดํฐ๋ฅผ ๋ณด์ ํ๊ณ ์๋ค. ์ฆ, ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ Hydration๋ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฆ์ ๋ ๋๋งํ๋ฏ๋ก ์ถ๊ฐ ๋คํธ์ํฌ ์์ฒญ์ด ๋ฐ์ํ์ง ์๋๋ค.
์ ๋ฆฌํ๋ค๋ณด๋ ๋ฌด์กฐ๊ฑด prefetchQuery
๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ๊ฒ ์ฒ๋ผ ๋งํ์ง๋ง, ํ๋ก์ ํธ์ ์ ํฉ์ฑ์ ๋ฐ๋ผ ๊ณ ๋ คํด์ผ ํ ์ ์ด ๋ง์ ๊ฒ ๊ฐ๋ค.
์ฐธ๊ณ ์๋ฃ
fetchQuery vs prefetchQuery
fetchQuery vs prefetchQuery
jgjgill-blog.netlify.app
๊ณ ๊ธ ์๋ฒ ๋ ๋๋ง
๊ณ ๊ธ ์๋ฒ ๋ ๋๋ง ์์ฑ์ผ: 2024-03-30 ์์ ์ผ: 2024-03-30 ์ด ๋ฌธ์๋ React Query๋ฅผ ์ฌ์ฉํ์ฌ ์คํธ๋ฆฌ๋ฐ, ์๋ฒ ์ปดํฌ๋ํธ, Next.js ์ฑ ๋ผ์ฐํฐ๋ฅผ ํ์ฉํ๋ ๋ฐฉ๋ฒ์ ์๊ฐํ๋ ๊ณ ๊ธ ์๋ฒ ๋ ๋๋ง ๊ฐ์ด๋๋ค. ์ด ๊ฐ์ด
www.vigorously.xyz
'Project' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Material Theme - Dark ๋ชจ๋ ๋์ฒด ํ ๋ง (0) | 2025.03.04 |
---|---|
์ด๋ฏธ์ง ์์ถ์ ํ์์ฑ๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ํ (1) | 2024.12.25 |
JWT ํ ํฐ ์ด๋์ ์ ์ฅํ๋๊ฒ ์ข์๊น? (1) | 2024.12.16 |
SVGR jest ํ ์คํ ์๋ฌ (0) | 2024.12.07 |
React Query์ SSR: ์๋ฒ ์ฌ์ด๋ ๋ฐ์ดํฐ ๊ด๋ฆฌ์ Hydration ํ์ฉ (1) | 2024.12.07 |