React์ experimental_useCache ํ ์ ํ์ํ์ธ์: ๋ชฉ์ , ์ด์ , Suspense์์ ์ฌ์ฉ๋ฒ, ์ต์ ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ์ ์ํ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ ์ ๋ต์ ๋ํ ์ ์ฌ์ ์ํฅ ์ดํด.
React์ experimental_useCache๋ก ์ฑ๋ฅ ์ ๊ธ ํด์ : ์ข ํฉ ๊ฐ์ด๋
React๋ ๋์์์ด ๋ฐ์ ํ๋ฉฐ ์ฑ๋ฅ๊ณผ ๊ฐ๋ฐ์ ๊ฒฝํ์ ๊ฐ์ ํ๊ธฐ ์ํ ์๋ก์ด ๊ธฐ๋ฅ๊ณผ ์คํ์ ์ธ API๋ฅผ ๋์
ํ๊ณ ์์ต๋๋ค. ๊ทธ๋ฌํ ๊ธฐ๋ฅ ์ค ํ๋๊ฐ experimental_useCache
ํ
์
๋๋ค. ์์ง ์คํ ๋จ๊ณ์ด์ง๋ง, ํนํ Suspense ๋ฐ React Server Components์ ๊ฒฐํฉ๋ ๋ React ์ ํ๋ฆฌ์ผ์ด์
๋ด์์ ์บ์ฑ์ ๊ด๋ฆฌํ ์ ์๋ ๊ฐ๋ ฅํ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. ์ด ์ข
ํฉ ๊ฐ์ด๋์์๋ experimental_useCache
์ ๋ณต์ก์ฑ์ ๊น์ด ํ๊ณ ๋ค์ด ๊ทธ ๋ชฉ์ , ์ด์ , ์ฌ์ฉ๋ฒ ๋ฐ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ ์ ๋ต์ ๋ํ ์ ์ฌ์ ์ํฅ์ ํ๊ตฌํ ๊ฒ์
๋๋ค.
React์ experimental_useCache๋ ๋ฌด์์ธ๊ฐ์?
experimental_useCache
๋ ๋น์ฉ์ด ๋ง์ด ๋๋ ์์
์ ๊ฒฐ๊ณผ๋ฅผ ์บ์ฑํ๋ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํ๋ React ํ
(ํ์ฌ ์คํ์ ์ด๋ฉฐ ๋ณ๊ฒฝ๋ ์ ์์)์
๋๋ค. ์ฃผ๋ก ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ์ ํจ๊ป ์ฌ์ฉํ๋๋ก ์ค๊ณ๋์์ผ๋ฉฐ, ์ฌ๋ฌ ๋ ๋, ์ปดํฌ๋ํธ ๋๋ ์๋ฒ ์์ฒญ์ ๊ฑธ์ณ ์ด์ ์ ๊ฐ์ ธ์จ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฌ์ฉํ ์ ์๊ฒ ํด์ค๋๋ค. ์ปดํฌ๋ํธ ์์ค ์ํ ๊ด๋ฆฌ ๋๋ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์กดํ๋ ๊ธฐ์กด ์บ์ฑ ์๋ฃจ์
๊ณผ ๋ฌ๋ฆฌ experimental_useCache
๋ React์ ๋ ๋๋ง ํ์ดํ๋ผ์ธ ๋ฐ Suspense์ ์ง์ ํตํฉ๋ฉ๋๋ค.
๋ณธ์ง์ ์ผ๋ก experimental_useCache
๋ฅผ ์ฌ์ฉํ๋ฉด ๋น์ฉ์ด ๋ง์ด ๋๋ ์์
(API์์ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ ๋ฑ)์ ์ํํ๋ ํจ์๋ฅผ ๋ํํ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์๋์ผ๋ก ์บ์ฑํ ์ ์์ต๋๋ค. ๋์ผํ ์ธ์๋ก ๋์ผํ ํจ์์ ๋ํ ํ์ ํธ์ถ์ ์บ์๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ์ฌ ๋น์ฉ์ด ๋ง์ด ๋๋ ์์
์ ๋ถํ์ํ ์ฌ์คํ์ ๋ฐฉ์งํฉ๋๋ค.
์ experimental_useCache๋ฅผ ์ฌ์ฉํด์ผ ํ ๊น์?
experimental_useCache
์ ์ฃผ์ ์ด์ ์ ์ฑ๋ฅ ์ต์ ํ์
๋๋ค. ๋น์ฉ์ด ๋ง์ด ๋๋ ์์
์ ๊ฒฐ๊ณผ๋ฅผ ์บ์ฑํจ์ผ๋ก์จ React๊ฐ ๋ ๋๋ง ์ค์ ์ํํด์ผ ํ๋ ์์
๋์ ํฌ๊ฒ ์ค์ฌ ๋ก๋ ์๊ฐ ๋จ์ถ๊ณผ ๋ ๋ฐ์์ ์ธ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค. experimental_useCache
๊ฐ ํนํ ์ ์ฉํ ์ ์๋ ๋ช ๊ฐ์ง ๊ตฌ์ฒด์ ์ธ ์๋๋ฆฌ์ค๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ: API ์๋ต์ ์บ์ฑํ์ฌ ์ค๋ณต ๋คํธ์ํฌ ์์ฒญ์ ๋ฐฉ์งํฉ๋๋ค. ์ด๋ ์์ฃผ ๋ณ๊ฒฝ๋์ง ์๊ฑฐ๋ ์ฌ๋ฌ ์ปดํฌ๋ํธ์์ ์ก์ธ์คํ๋ ๋ฐ์ดํฐ์ ํนํ ์ ์ฉํฉ๋๋ค.
- ๋น์ฉ์ด ๋ง์ด ๋๋ ๊ณ์ฐ: ๋ณต์กํ ๊ณ์ฐ ๋๋ ๋ณํ์ ๊ฒฐ๊ณผ๋ฅผ ์บ์ฑํฉ๋๋ค. ์๋ฅผ ๋ค์ด,
experimental_useCache
๋ฅผ ์ฌ์ฉํ์ฌ ๊ณ์ฐ ์ง์ฝ์ ์ธ ์ด๋ฏธ์ง ์ฒ๋ฆฌ ํจ์์ ๊ฒฐ๊ณผ์ ์บ์ฑํ ์ ์์ต๋๋ค. - React Server Components (RSCs): RSC์์
experimental_useCache
๋ ์๋ฒ ์ธก ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ์ต์ ํํ์ฌ ์ฌ๋ฌ ์ปดํฌ๋ํธ๊ฐ ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ํ์๋ก ํ๋๋ผ๋ ์์ฒญ๋น ํ ๋ฒ๋ง ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋๋ก ๋ณด์ฅํฉ๋๋ค. ์ด๋ ์๋ฒ ๋ ๋๋ง ์ฑ๋ฅ์ ๊ทน์ ์ผ๋ก ํฅ์์ํฌ ์ ์์ต๋๋ค. - ๋๊ด์ ์ ๋ฐ์ดํธ: ์ฌ์ฉ์์๊ฒ ์ฆ์ ์ ๋ฐ์ดํธ๋ UI๋ฅผ ํ์ํ๊ณ ๋์ค์ ์๋ฒ ์ ๋ฐ์ดํธ ๊ฒฐ๊ณผ๋ฅผ ์บ์ฑํ์ฌ ๊น๋ฐ์์ ๋ฐฉ์งํ๋ ๋๊ด์ ์ ๋ฐ์ดํธ๋ฅผ ๊ตฌํํฉ๋๋ค.
์์ฝ๋ ์ด์ :
- ํฅ์๋ ์ฑ๋ฅ: ๋ถํ์ํ ์ฌ๋ ๋๋ง ๋ฐ ๊ณ์ฐ์ ์ค์ ๋๋ค.
- ๋คํธ์ํฌ ์์ฒญ ๊ฐ์: ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ ์ค๋ฒํค๋๋ฅผ ์ต์ํํฉ๋๋ค.
- ๊ฐ์ํ๋ ์บ์ฑ ๋ก์ง: React ๋ด์์ ์ ์ธ์ ์ด๊ณ ํตํฉ๋ ์บ์ฑ ์๋ฃจ์ ์ ์ ๊ณตํฉ๋๋ค.
- Suspense์์ ์ํํ ํตํฉ: Suspense์ ์ํํ๊ฒ ์๋ํ์ฌ ๋ฐ์ดํฐ ๋ก๋ฉ ์ค ๋ ๋์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํฉ๋๋ค.
- ์ต์ ํ๋ ์๋ฒ ๋ ๋๋ง: React Server Components์ ์๋ฒ ๋ ๋๋ง ์ฑ๋ฅ์ ๊ฐ์ ํฉ๋๋ค.
experimental_useCache๋ ์ด๋ป๊ฒ ์๋ํ๋์?
experimental_useCache
๋ ํน์ ํจ์์ ํด๋น ์ธ์์ ๋ํ ์บ์๋ฅผ ์ฐ๊ฒฐํ์ฌ ์๋ํฉ๋๋ค. ์ธ์๋ก ์บ์๋ ํจ์๋ฅผ ํธ์ถํ๋ฉด experimental_useCache
๋ ํด๋น ์ธ์์ ๋ํ ๊ฒฐ๊ณผ๊ฐ ์ด๋ฏธ ์บ์์ ์๋์ง ํ์ธํฉ๋๋ค. ์๋ ๊ฒฝ์ฐ ์บ์๋ ๊ฒฐ๊ณผ๊ฐ ์ฆ์ ๋ฐํ๋ฉ๋๋ค. ์๋ ๊ฒฝ์ฐ ํจ์๊ฐ ์คํ๋๊ณ ๊ฒฐ๊ณผ๊ฐ ์บ์์ ์ ์ฅ๋ ๋ค์ ๊ฒฐ๊ณผ๊ฐ ๋ฐํ๋ฉ๋๋ค.
์บ์๋ ๋ ๋๋ง ๋ฐ ์๋ฒ ์์ฒญ(React Server Components์ ๊ฒฝ์ฐ)์ ๊ฑธ์ณ ์ ์ง๋ฉ๋๋ค. ์ด๋ ํ ์ปดํฌ๋ํธ์์ ๊ฐ์ ธ์จ ๋ฐ์ดํฐ๊ฐ ๋ค์ ๊ฐ์ ธ์ค์ง ์๊ณ ๋ ๋ค๋ฅธ ์ปดํฌ๋ํธ์์ ์ฌ์ฌ์ฉ๋ ์ ์์์ ์๋ฏธํฉ๋๋ค. ์บ์์ ์๋ช ์ ์ฌ์ฉ๋๋ React ์ปจํ ์คํธ์ ์ฐ๊ฒฐ๋์ด ์ปจํ ์คํธ๊ฐ ๋ง์ดํธ ํด์ ๋๋ฉด ์๋์ผ๋ก ๊ฐ๋น์ง ์์ง๋ฉ๋๋ค.
experimental_useCache ์ฌ์ฉ: ์ค์ฉ์ ์ธ ์
API์์ ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ์ค์ฉ์ ์ธ ์์ ๋ฅผ ํตํด experimental_useCache
์ฌ์ฉ ๋ฐฉ๋ฒ์ ์ค๋ช
ํด ๋ณด๊ฒ ์ต๋๋ค.
import React, { experimental_useCache, Suspense } from 'react';
// API ํธ์ถ ์๋ฎฌ๋ ์ด์
(์ค์ API ์๋ํฌ์ธํธ๋ก ๋์ฒด)
const fetchUserData = async (userId) => {
console.log(`Fetching user data for user ID: ${userId}`);
await new Promise(resolve => setTimeout(resolve, 1000)); // ๋คํธ์ํฌ ์ง์ฐ ์๋ฎฌ๋ ์ด์
const response = await fetch(`https://jsonplaceholder.typicode.com/users/${userId}`);
if (!response.ok) {
throw new Error(`Failed to fetch user data: ${response.status}`);
}
return response.json();
};
// fetchUserData ํจ์์ ์บ์๋ ๋ฒ์ ์์ฑ
const getCachedUserData = experimental_useCache(fetchUserData);
function UserProfile({ userId }) {
const userData = getCachedUserData(userId);
return (
User Profile
Name: {userData.name}
Email: {userData.email}
);
}
function App() {
return (
Loading user data...
์ค๋ช :
experimental_useCache
๊ฐ์ ธ์ค๊ธฐ: React์์ ํ์ํ ํ ์ ๊ฐ์ ธ์ต๋๋ค.fetchUserData
์ ์: ์ด ํจ์๋ API์์ ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์ ์๋ฎฌ๋ ์ด์ ํฉ๋๋ค. ๋ชจ์ API ํธ์ถ์ ์ค์ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ ๋ก์ง์ผ๋ก ๋ฐ๊พธ์ธ์.await new Promise
๋ ๋คํธ์ํฌ ์ง์ฐ์ ์๋ฎฌ๋ ์ด์ ํ์ฌ ์บ์ฑ ํจ๊ณผ๋ฅผ ๋ ๋ช ํํ๊ฒ ํฉ๋๋ค. ํ๋ก๋์ ์ค๋น๋ฅผ ์ํด ์ค๋ฅ ์ฒ๋ฆฌ๊ฐ ํฌํจ๋์์ต๋๋ค.getCachedUserData
์์ฑ:experimental_useCache
๋ฅผ ์ฌ์ฉํ์ฌfetchUserData
ํจ์์ ์บ์๋ ๋ฒ์ ์ ๋ง๋ญ๋๋ค. ์ด๊ฒ์ด ์ค์ ๋ก ์ปดํฌ๋ํธ์์ ์ฌ์ฉํ ํจ์์ ๋๋ค.UserProfile
์์getCachedUserData
์ฌ์ฉ:UserProfile
์ปดํฌ๋ํธ๋getCachedUserData
๋ฅผ ํธ์ถํ์ฌ ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํฉ๋๋ค.experimental_useCache
๋ฅผ ์ฌ์ฉํ๊ณ ์์ผ๋ฏ๋ก ๋ฐ์ดํฐ๊ฐ ์ด๋ฏธ ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฒฝ์ฐ ์บ์์์ ๋ฐ์ดํฐ๊ฐ ๊ฒ์๋ฉ๋๋ค.Suspense
๋ก ๋ํ:UserProfile
์ปดํฌ๋ํธ๋Suspense
๋ก ๋ํ๋์ด ๋ฐ์ดํฐ๊ฐ ๋ก๋๋๋ ๋์ ๋ก๋ฉ ์ํ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ฐ์ดํฐ ๋ก๋์ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋๋ผ๋ ๋ถ๋๋ฌ์ด ์ฌ์ฉ์ ๊ฒฝํ์ ๋ณด์ฅํ ์ ์์ต๋๋ค.- ์ฌ๋ฌ ๋ฒ ํธ์ถ:
App
์ปดํฌ๋ํธ๋ ๋์ผํuserId
(1)๋ฅผ ๊ฐ์ง ๋ ๊ฐ์UserProfile
์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํฉ๋๋ค. ๋ ๋ฒ์งธUserProfile
์ปดํฌ๋ํธ๋ ์บ์๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ๋ ๋ฒ์งธ API ํธ์ถ์ ๋ฐฉ์งํฉ๋๋ค. ๋ํ ์บ์๋์ง ์์ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ์์ฐํ๊ธฐ ์ํด ๋ค๋ฅธ ID๋ฅผ ๊ฐ์ง ๋ค๋ฅธ ์ฌ์ฉ์ ํ๋กํ๋ ํฌํจ๋์ด ์์ต๋๋ค.
์ด ์์ ์์ ์ฒซ ๋ฒ์งธ UserProfile
์ปดํฌ๋ํธ๋ API์์ ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ ๋ฒ์งธ UserProfile
์ปดํฌ๋ํธ๋ ์บ์๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ๋ ๋ฒ์งธ API ํธ์ถ์ ๋ฐฉ์งํฉ๋๋ค. API ํธ์ถ์ด ๋น์ฉ์ด ๋ง์ด ๋ค๊ฑฐ๋ ์ฌ๋ฌ ์ปดํฌ๋ํธ์์ ๋ฐ์ดํฐ์ ์ก์ธ์คํ๋ ๊ฒฝ์ฐ ์ด๋ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค.
Suspense์ ํตํฉ
experimental_useCache
๋ React์ Suspense ๊ธฐ๋ฅ๊ณผ ์ํํ๊ฒ ์๋ํ๋๋ก ์ค๊ณ๋์์ต๋๋ค. Suspense๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ ๋ก๋ฉ์ ๊ธฐ๋ค๋ฆฌ๋ ์ปดํฌ๋ํธ์ ๋ก๋ฉ ์ํ๋ฅผ ์ ์ธ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. experimental_useCache
๋ฅผ Suspense์ ํจ๊ป ์ฌ์ฉํ๋ฉด React๋ ๋ฐ์ดํฐ๊ฐ ์บ์์์ ์ฌ์ฉ ๊ฐ๋ฅํด์ง๊ฑฐ๋ ๋ฐ์ดํฐ ์์ค์์ ๊ฐ์ ธ์ฌ ๋๊น์ง ์ปดํฌ๋ํธ ๋ ๋๋ง์ ์๋์ผ๋ก ์ผ์ ์ค๋จํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ฐ์ดํฐ๊ฐ ๋ก๋๋๋ ๋์ ๋์ฒด UI(์: ๋ก๋ฉ ์คํผ๋)๋ฅผ ํ์ํ์ฌ ๋ ๋์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
์์ ์์์ Suspense
์ปดํฌ๋ํธ๋ UserProfile
์ปดํฌ๋ํธ๋ฅผ ๋ํํ๊ณ fallback
prop์ ์ ๊ณตํฉ๋๋ค. ์ด ๋์ฒด UI๋ ์ฌ์ฉ์ ๋ฐ์ดํฐ๊ฐ ๊ฐ์ ธ์์ง๋ ๋์ ํ์๋ฉ๋๋ค. ๋ฐ์ดํฐ๊ฐ ์ฌ์ฉ ๊ฐ๋ฅํด์ง๋ฉด UserProfile
์ปดํฌ๋ํธ๊ฐ ๊ฐ์ ธ์จ ๋ฐ์ดํฐ๋ก ๋ ๋๋ง๋ฉ๋๋ค.
React Server Components (RSCs) ๋ฐ experimental_useCache
experimental_useCache
๋ React Server Components์ ํจ๊ป ์ฌ์ฉํ ๋ ๋น์ ๋ฐํฉ๋๋ค. RSC์์๋ ์๋ฒ์์ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ๊ฐ ๋ฐ์ํ๊ณ ๊ฒฐ๊ณผ๊ฐ ํด๋ผ์ด์ธํธ๋ก ์คํธ๋ฆฌ๋ฐ๋ฉ๋๋ค. experimental_useCache
๋ ์ฌ๋ฌ ์ปดํฌ๋ํธ๊ฐ ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ํ์๋ก ํ๋๋ผ๋ ์์ฒญ๋น ํ ๋ฒ๋ง ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋๋ก ๋ณด์ฅํจ์ผ๋ก์จ ์๋ฒ ์ธก ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ํฌ๊ฒ ์ต์ ํํ ์ ์์ต๋๋ค.
์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ UI์ ์ฌ๋ฌ ๋ถ๋ถ์ ํ์ํด์ผ ํ๋ ์๋ฒ ์ปดํฌ๋ํธ๊ฐ ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. experimental_useCache
๊ฐ ์์ผ๋ฉด ๋นํจ์จ์ ์ผ ์ ์๋ ์ฌ๋ฌ ๋ฒ ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. experimental_useCache
๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ์ฉ์ ๋ฐ์ดํฐ๊ฐ ํ ๋ฒ๋ง ๊ฐ์ ธ์์ง๊ณ ๋์ผํ ์๋ฒ ์์ฒญ ๋ด์์ ํ์ ์ฉ๋๋ก ์บ์ฑ๋๋๋ก ๋ณด์ฅํ ์ ์์ต๋๋ค.
์์ (๊ฐ๋ ์ RSC ์์ ):
// Server Component
import { experimental_useCache } from 'react';
async function fetchUserData(userId) {
// ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฌ์ฉ์ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ ์๋ฎฌ๋ ์ด์
await new Promise(resolve => setTimeout(resolve, 500)); // ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ ์ง์ฐ ์๋ฎฌ๋ ์ด์
return { id: userId, name: `User ${userId}`, email: `user${userId}@example.com` };
}
const getCachedUserData = experimental_useCache(fetchUserData);
export default async function UserDashboard({ userId }) {
const userData = await getCachedUserData(userId);
return (
Welcome, {userData.name}!
);
}
async function UserInfo({ userId }) {
const userData = await getCachedUserData(userId);
return (
User Information
Email: {userData.email}
);
}
async function UserActivity({ userId }) {
const userData = await getCachedUserData(userId);
return (
Recent Activity
{userData.name} viewed the homepage.
);
}
์ด ๋จ์ํ๋ ์์ ์์ UserDashboard
, UserInfo
, UserActivity
๋ ๋ชจ๋ ์๋ฒ ์ปดํฌ๋ํธ์
๋๋ค. ๋ชจ๋ ์ฌ์ฉ์ ๋ฐ์ดํฐ์ ์ก์ธ์คํด์ผ ํฉ๋๋ค. experimental_useCache
๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ๋ฌ ์ปดํฌ๋ํธ์์ ์ฌ์ฉ๋๋๋ผ๋ ์๋ฒ ์์ฒญ๋น fetchUserData
ํจ์๊ฐ ํ ๋ฒ๋ง ํธ์ถ๋๋๋ก ๋ณด์ฅํฉ๋๋ค.
๊ณ ๋ ค ์ฌํญ ๋ฐ ์ ์ฌ์ ๋จ์
experimental_useCache
๋ ์๋นํ ์ด์ ์ ์ ๊ณตํ์ง๋ง, ๊ทธ ํ๊ณ์ ์ ์ฌ์ ๋จ์ ์ ์ธ์งํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
- ์คํ์ ์ํ: ์คํ์ ์ธ API๋ก์
experimental_useCache
๋ ํฅํ React ๋ฆด๋ฆฌ์ค์์ ๋ณ๊ฒฝ๋๊ฑฐ๋ ์ ๊ฑฐ๋ ์ ์์ต๋๋ค. ํ๋ก๋์ ํ๊ฒฝ์์๋ ์ฃผ์ํด์ ์ฌ์ฉํ๊ณ ํ์ํ ๊ฒฝ์ฐ ์ฝ๋๋ฅผ ์กฐ์ ํ ์ค๋น๋ฅผ ํ์ญ์์ค. ์ ๋ฐ์ดํธ์ ๋ํ React์ ๊ณต์ ๋ฌธ์ ๋ฐ ๋ฆด๋ฆฌ์ค ๋ ธํธ๋ฅผ ๋ชจ๋ํฐ๋งํ์ญ์์ค. - ์บ์ ๋ฌดํจํ:
experimental_useCache
๋ ์บ์ ๋ฌดํจํ๋ฅผ ์ํ ๋ด์ฅ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํ์ง ์์ต๋๋ค. ๊ธฐ๋ณธ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋ ๋ ์บ์๋ฅผ ๋ฌดํจํํ๊ธฐ ์ํ ์์ฒด ์ ๋ต์ ๊ตฌํํด์ผ ํฉ๋๋ค. ์ด๋ ์ฌ์ฉ์ ์ ์ ํ ๋๋ ์ปจํ ์คํธ ์ ๊ณต์๋ฅผ ์ฌ์ฉํ์ฌ ์บ์ ์๋ช ์ ๊ด๋ฆฌํ๋ ๊ฒ์ ํฌํจํ ์ ์์ต๋๋ค. - ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋: ๋ฐ์ดํฐ ์บ์ฑ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ๋๋ฆด ์ ์์ต๋๋ค. ์บ์ฑํ๋ ๋ฐ์ดํฐ์ ํฌ๊ธฐ๋ฅผ ์ผ๋์ ๋๊ณ ์บ์ ์ ๊ฑฐ ๋๋ ๋ง๋ฃ์ ๊ฐ์ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ ์๋น๋ฅผ ์ ํํ๋ ๊ฒ์ ๊ณ ๋ คํ์ญ์์ค. ํนํ ์๋ฒ ์ธก ํ๊ฒฝ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ๋ชจ๋ํฐ๋งํ์ญ์์ค.
- ์ธ์ ์ง๋ ฌํ: ์บ์๋ ํจ์์ ์ ๋ฌ๋๋ ์ธ์๋ ์ง๋ ฌํ ๊ฐ๋ฅํด์ผ ํฉ๋๋ค. ์ด๋
experimental_useCache
๊ฐ ์บ์ ํค๋ฅผ ์์ฑํ๊ธฐ ์ํด ์ธ์๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ธ์๊ฐ ์ง๋ ฌํ ๊ฐ๋ฅํ์ง ์์ผ๋ฉด ์บ์๊ฐ ์ ๋๋ก ์๋ํ์ง ์์ ์ ์์ต๋๋ค. - ๋๋ฒ๊น
: ์บ์ฑ ๋ฌธ์ ๋๋ฒ๊น
์ ์ด๋ ค์ธ ์ ์์ต๋๋ค. ๋ก๊น
๋ฐ ๋๋ฒ๊น
๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์บ์๋ฅผ ๊ฒ์ฌํ๊ณ ์์๋๋ก ์๋ํ๋์ง ํ์ธํ์ญ์์ค. ์บ์๊ฐ ์ฑ์์ง๊ณ ์บ์์์ ๊ฒ์๋ ๋๋ฅผ ์ถ์ ํ๊ธฐ ์ํด
fetchUserData
ํจ์์ ์ฌ์ฉ์ ์ ์ ๋๋ฒ๊ทธ ๋ก๊น ์ ์ถ๊ฐํ๋ ๊ฒ์ ๊ณ ๋ คํ์ญ์์ค. - ์ ์ญ ์ํ: ์บ์๋ ํจ์ ๋ด์์ ์ ์ญ ๊ฐ๋ณ ์ํ๋ฅผ ์ฌ์ฉํ์ง ๋ง์ญ์์ค. ์ด๋ ์์์น ๋ชปํ ๋์์ ์ ๋ฐํ๊ณ ์บ์๋ฅผ ์ดํดํ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋ค ์ ์์ต๋๋ค. ์ผ๊ด๋ ์ํ๋ฅผ ์ ์งํ๊ธฐ ์ํด ํจ์ ์ธ์ ๋ฐ ์บ์๋ ๊ฒฐ๊ณผ์ ์์กดํ์ญ์์ค.
- ๋ณต์กํ ๋ฐ์ดํฐ ๊ตฌ์กฐ: ํนํ ์ํ ์ฐธ์กฐ๊ฐ ํฌํจ๋ ๋ณต์กํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์บ์ฑํ ๋๋ ์ฃผ์ํ์ญ์์ค. ์ํ ์ฐธ์กฐ๋ ์ง๋ ฌํ ์ค์ ๋ฌดํ ๋ฃจํ ๋๋ ์คํ ์ค๋ฒํ๋ก ์ค๋ฅ๋ฅผ ์ ๋ฐํ ์ ์์ต๋๋ค.
์บ์ ๋ฌดํจํ ์ ๋ต
experimental_useCache
๋ ๋ฌดํจํ๋ฅผ ์ฒ๋ฆฌํ์ง ์์ผ๋ฏ๋ก ๋ค์๊ณผ ๊ฐ์ ์ ๋ต์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ์๋ ๋ฌดํจํ: ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ ์ถ์ ํ๊ธฐ ์ํ ์ฌ์ฉ์ ์ ์ ํ
๋๋ ์ปจํ
์คํธ ์ ๊ณต์๋ฅผ ๊ตฌํํฉ๋๋ค. ๋ณ๊ฒฝ์ด ๋ฐ์ํ๋ฉด ์บ์๋ ํจ์๋ฅผ ์ฌ์ค์ ํ์ฌ ์บ์๋ฅผ ๋ฌดํจํํฉ๋๋ค. ์ฌ๊ธฐ์๋ ๋ณ๊ฒฝ ์ ๋ณ๊ฒฝ๋๋ ๋ฒ์ ๋๋ ํ์์คํฌํ๋ฅผ ์ ์ฅํ๊ณ `fetch` ํจ์ ๋ด์์ ์ด๋ฅผ ํ์ธํ๋ ๊ฒ์ด ํฌํจ๋ฉ๋๋ค.
import React, { createContext, useContext, useState, experimental_useCache } from 'react'; const DataVersionContext = createContext(null); export function DataVersionProvider({ children }) { const [version, setVersion] = useState(0); const invalidate = () => setVersion(v => v + 1); return (
{children} ); } async function fetchData(version) { console.log("Fetching data with version:", version) await new Promise(resolve => setTimeout(resolve, 500)); return { data: `Data for version ${version}` }; } const useCachedData = () => { const { version } = useContext(DataVersionContext); return experimental_useCache(() => fetchData(version))(); // ์บ์ ํธ์ถ }; export function useInvalidateData() { return useContext(DataVersionContext).invalidate; } export default useCachedData; // ์์ ์ฌ์ฉ๋ฒ: function ComponentUsingData() { const data = useCachedData(); return{data?.data}
; } function ComponentThatInvalidates() { const invalidate = useInvalidateData(); return } // App์ DataVersionProvider๋ก ๋ํ //// // // - ์๊ฐ ๊ธฐ๋ฐ ๋ง๋ฃ: ํน์ ์๊ฐ์ด ์ง๋ ํ ์บ์๋ฅผ ์๋์ผ๋ก ๋ฌดํจํํ๋ ์บ์ ๋ง๋ฃ ๋ฉ์ปค๋์ฆ์ ๊ตฌํํฉ๋๋ค. ์ด๋ ๋น๊ต์ ์ ์ ์ด์ง๋ง ๋๋๋ก ๋ณ๊ฒฝ๋ ์ ์๋ ๋ฐ์ดํฐ์ ์ ์ฉํ ์ ์์ต๋๋ค.
- ํ๊ทธ ๊ธฐ๋ฐ ๋ฌดํจํ: ์บ์๋ ๋ฐ์ดํฐ์ ํ๊ทธ๋ฅผ ์ฐ๊ฒฐํ๊ณ ์ด๋ฌํ ํ๊ทธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์บ์๋ฅผ ๋ฌดํจํํฉ๋๋ค. ์ด๋ ํน์ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋ ๋ ๊ด๋ จ ๋ฐ์ดํฐ๋ฅผ ๋ฌดํจํํ๋ ๋ฐ ์ ์ฉํ ์ ์์ต๋๋ค.
- ์น์์ผ ๋ฐ ์ค์๊ฐ ์ ๋ฐ์ดํธ: ์ ํ๋ฆฌ์ผ์ด์ ์ด ์น์์ผ ๋๋ ๊ธฐํ ์ค์๊ฐ ์ ๋ฐ์ดํธ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ด๋ฌํ ์ ๋ฐ์ดํธ๋ฅผ ์ฌ์ฉํ์ฌ ์บ์ ๋ฌดํจํ๋ฅผ ํธ๋ฆฌ๊ฑฐํ ์ ์์ต๋๋ค. ์ค์๊ฐ ์ ๋ฐ์ดํธ๊ฐ ์์ ๋๋ฉด ์ํฅ์ ๋ฐ๋ ๋ฐ์ดํฐ์ ๋ํ ์บ์๋ฅผ ๋ฌดํจํํฉ๋๋ค.
experimental_useCache ์ฌ์ฉ์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
experimental_useCache
๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ๊ณ ์ ์ฌ์ ํจ์ ์ ํผํ๋ ค๋ฉด ๋ค์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด์ญ์์ค.
- ๋น์ฉ์ด ๋ง์ด ๋๋ ์์
์ ์ฌ์ฉ: ์ค์ ๋ก ๋น์ฉ์ด ๋ง์ด ๋๋ ์์
(์: ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ ๋๋ ๋ณต์กํ ๊ณ์ฐ)์๋ง
experimental_useCache
๋ฅผ ์ฌ์ฉํ์ญ์์ค. ๋น์ฉ์ด ์ ์ ์์ ์ ์บ์ฑํ๋ฉด ์บ์ ๊ด๋ฆฌ์ ์ค๋ฒํค๋๋ก ์ธํด ์ค์ ๋ก ์ฑ๋ฅ์ด ์ ํ๋ ์ ์์ต๋๋ค. - ๋ช ํํ ์บ์ ํค ์ ์: ์บ์๋ ํจ์์ ์ ๋ฌ๋๋ ์ธ์๊ฐ ์บ์๋๋ ๋ฐ์ดํฐ๋ฅผ ๊ณ ์ ํ๊ฒ ์๋ณํ๋์ง ํ์ธํ์ญ์์ค. ์ด๋ ์บ์๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๊ณ ๋ฐ์ดํฐ๊ฐ ์ค์๋ก ์ฌ์ฌ์ฉ๋์ง ์๋๋ก ํ๋ ๋ฐ ์ค์ํฉ๋๋ค. ๊ฐ์ฒด ์ธ์์ ๊ฒฝ์ฐ ์ง๋ ฌํ ๋ฐ ํด์ฑํ์ฌ ์ผ๊ด๋ ํค๋ฅผ ์์ฑํ๋ ๊ฒ์ ๊ณ ๋ คํ์ญ์์ค.
- ์บ์ ๋ฌดํจํ ์ ๋ต ๊ตฌํ: ์์ ์ธ๊ธํ๋ฏ์ด ๊ธฐ๋ณธ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋ ๋ ์บ์๋ฅผ ๋ฌดํจํํ๊ธฐ ์ํ ์์ฒด ์ ๋ต์ ๊ตฌํํด์ผ ํฉ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ๋ฐ ๋ฐ์ดํฐ์ ์ ํฉํ ์ ๋ต์ ์ ํํ์ญ์์ค.
- ์บ์ ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง: ์บ์ ์ฑ๋ฅ์ ๋ชจ๋ํฐ๋งํ์ฌ ์์๋๋ก ์๋ํ๋์ง ํ์ธํ์ญ์์ค. ๋ก๊น ๋ฐ ๋๋ฒ๊น ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์บ์ ํํธ ๋ฐ ๋ฏธ์ค๋ฅผ ์ถ์ ํ๊ณ ์ ์ฌ์ ๋ณ๋ชฉ ํ์์ ์๋ณํ์ญ์์ค.
- ๋์ ๊ณ ๋ ค:
experimental_useCache
๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ ๋ค๋ฅธ ์บ์ฑ ์๋ฃจ์ ์ด ํ์์ ๋ ์ ํฉํ ์ ์๋์ง ๊ณ ๋ คํ์ญ์์ค. ์๋ฅผ ๋ค์ด, ์บ์ ๋ฌดํจํ ๋ฐ ์ ๊ฑฐ์ ๊ฐ์ ๋ด์ฅ ๊ธฐ๋ฅ์ด ์๋ ๋ณด๋ค ๊ฐ๋ ฅํ ์บ์ฑ ์๋ฃจ์ ์ด ํ์ํ ๊ฒฝ์ฐ ์ ์ฉ ์บ์ฑ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ณ ๋ คํ ์ ์์ต๋๋ค.react-query
,SWR
๊ณผ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋๋localStorage
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๋ ๋๋ก๋ ๋ ์ ์ ํ ์ ์์ต๋๋ค. - ์๊ฒ ์์: ์ ํ๋ฆฌ์ผ์ด์
์
experimental_useCache
๋ฅผ ์ ์ง์ ์ผ๋ก ๋์ ํฉ๋๋ค. ๋ช ๊ฐ์ง ํต์ฌ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ ์์ ์ ์บ์ฑํ๋ ๊ฒ๋ถํฐ ์์ํ๊ณ ๊ฒฝํ์ ์์ผ๋ฉด์ ์ฌ์ฉ์ ์ ์ฐจ ํ๋ํ์ญ์์ค. - ์บ์ฑ ์ ๋ต ๋ฌธ์ํ: ์ด๋ค ๋ฐ์ดํฐ๊ฐ ์บ์๋๊ณ ์๋์ง, ์บ์๊ฐ ์ด๋ป๊ฒ ๋ฌดํจํ๋๊ณ ์๋์ง, ์ ์ฌ์ ํ๊ณ๋ ๋ฌด์์ธ์ง ๋ฑ ์บ์ฑ ์ ๋ต์ ๋ช ํํ๊ฒ ๋ฌธ์ํํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ค๋ฅธ ๊ฐ๋ฐ์๊ฐ ์ฝ๋๋ฅผ ๋ ์ฝ๊ฒ ์ดํดํ๊ณ ์ ์ง ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
- ์ฒ ์ ํ ํ ์คํธ: ์บ์ฑ ๊ตฌํ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๊ณ ์์์น ๋ชปํ ๋ฒ๊ทธ๋ฅผ ๋์ ํ์ง ์๋์ง ํ์ธํ๊ธฐ ์ํด ์ฒ ์ ํ ํ ์คํธํ์ญ์์ค. ์บ์๊ฐ ์์๋๋ก ์ฑ์์ง๊ณ ๋ฌดํจํ๋๋์ง ํ์ธํ๊ธฐ ์ํด ๋จ์ ํ ์คํธ๋ฅผ ์์ฑํ์ญ์์ค.
experimental_useCache์ ๋์
experimental_useCache
๋ React ๋ด์์ ์บ์ฑ์ ๊ด๋ฆฌํ๋ ํธ๋ฆฌํ ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ง๋ง ์ ์ผํ ์ต์
์ ์๋๋๋ค. React ์ ํ๋ฆฌ์ผ์ด์
์์ ์ฌ์ฉํ ์ ์๋ ๋ช ๊ฐ์ง ๋ค๋ฅธ ์บ์ฑ ์๋ฃจ์
์ด ์์ผ๋ฉฐ, ๊ฐ๊ฐ ๊ณ ์ ํ ์ฅ๋จ์ ์ด ์์ต๋๋ค.
useMemo
:useMemo
ํ ์ ๋น์ฉ์ด ๋ง์ด ๋๋ ๊ณ์ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ๋ชจ์ด์ ์ด์ ํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ ๋๋ง ์ ๋ฐ์ ๊ฑธ์ณ ์ง์ ํ ์บ์ฑ์ ์ ๊ณตํ์ง๋ ์์ง๋ง ๋จ์ผ ์ปดํฌ๋ํธ ๋ด์์ ์ฑ๋ฅ์ ์ต์ ํํ๋ ๋ฐ ์ ์ฉํ ์ ์์ต๋๋ค. ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ ๋๋ ๋ฐ์ดํฐ๊ฐ ์ปดํฌ๋ํธ ๊ฐ์ ๊ณต์ ๋์ด์ผ ํ๋ ์๋๋ฆฌ์ค์๋ ๋ ์ ํฉํฉ๋๋ค.React.memo
:React.memo
๋ ํจ์ํ ์ปดํฌ๋ํธ๋ฅผ ๋ฉ๋ชจ์ด์ ์ด์ ํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ๊ณ ์ฐจ ์ปดํฌ๋ํธ์ ๋๋ค. props๊ฐ ๋ณ๊ฒฝ๋์ง ์์ ๊ฒฝ์ฐ ์ปดํฌ๋ํธ์ ์ฌ๋ ๋๋ง์ ๋ฐฉ์งํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ผ๋ถ ๊ฒฝ์ฐ์ ์ฑ๋ฅ์ด ํฅ์๋ ์ ์์ง๋ง ๋ฐ์ดํฐ ์บ์ฑ์ ์ ๊ณตํ์ง ์์ต๋๋ค.- ์ธ๋ถ ์บ์ฑ ๋ผ์ด๋ธ๋ฌ๋ฆฌ (
react-query
,SWR
):react-query
๋ฐSWR
๊ณผ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ React ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ํฌ๊ด์ ์ธ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ ๋ฐ ์บ์ฑ ์๋ฃจ์ ์ ์ ๊ณตํฉ๋๋ค. ์ด๋ฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์๋ ์บ์ ๋ฌดํจํ, ๋ฐฑ๊ทธ๋ผ์ด๋ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ, ๋๊ด์ ์ ๋ฐ์ดํธ์ ๊ฐ์ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ๊ณ ๊ธ ๊ธฐ๋ฅ์ด ์๋ ๋ณด๋ค ๊ฐ๋ ฅํ ์บ์ฑ ์๋ฃจ์ ์ด ํ์ํ ๊ฒฝ์ฐ ์ข์ ์ ํ์ด ๋ ์ ์์ต๋๋ค. - ๋ก์ปฌ ์คํ ๋ฆฌ์ง / ์ธ์
์คํ ๋ฆฌ์ง: ๋ ๊ฐ๋จํ ์ฌ์ฉ ์ฌ๋ก ๋๋ ์ธ์
์ ๋ฐ์ ๊ฑธ์ณ ๋ฐ์ดํฐ๋ฅผ ์ ์งํ๊ธฐ ์ํด
localStorage
๋๋sessionStorage
๋ฅผ ํ์ฉํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ง๋ ฌํ, ๋ฌดํจํ ๋ฐ ์ ์ฅ์ ์ ํ์ ์๋์ผ๋ก ๊ด๋ฆฌํด์ผ ํฉ๋๋ค. - ์ฌ์ฉ์ ์ ์ ์บ์ฑ ์๋ฃจ์ : React์ ์ปจํ ์คํธ API ๋๋ ๊ธฐํ ์ํ ๊ด๋ฆฌ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ์ ์ ์บ์ฑ ์๋ฃจ์ ์ ๊ตฌ์ถํ ์๋ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์บ์ฑ ๊ตฌํ์ ๋ํ ์์ ํ ์ ์ด๋ฅผ ์ ๊ณตํ์ง๋ง ๋ ๋ง์ ๋ ธ๋ ฅ๊ณผ ์ ๋ฌธ์ฑ์ด ํ์ํฉ๋๋ค.
๊ฒฐ๋ก
React์ experimental_useCache
ํ
์ React ์ ํ๋ฆฌ์ผ์ด์
๋ด์์ ์บ์ฑ์ ๊ด๋ฆฌํ๋ ๊ฐ๋ ฅํ๊ณ ํธ๋ฆฌํ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. ๋น์ฉ์ด ๋ง์ด ๋๋ ์์
์ ๊ฒฐ๊ณผ๋ฅผ ์บ์ฑํจ์ผ๋ก์จ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํค๊ณ , ๋คํธ์ํฌ ์์ฒญ์ ์ค์ด๋ฉฐ, ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ ๋ก์ง์ ๋จ์ํํ ์ ์์ต๋๋ค. Suspense ๋ฐ React Server Components์ ํจ๊ป ์ฌ์ฉํ๋ฉด experimental_useCache
๋ ์ฌ์ฉ์ ๊ฒฝํ์ ๋์ฑ ํฅ์์ํค๊ณ ์๋ฒ ๋ ๋๋ง ์ฑ๋ฅ์ ์ต์ ํํ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ experimental_useCache
์ ํ๊ณ์ ์ ์ฌ์ ๋จ์ , ์๋ฅผ ๋ค์ด ๋ด์ฅ ์บ์ ๋ฌดํจํ ๋ถ์กฑ ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ์ฆ๊ฐ ๊ฐ๋ฅ์ฑ์ ์ ์ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ด ๊ฐ์ด๋์ ์ค๋ช
๋ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด๊ณ ์ ํ๋ฆฌ์ผ์ด์
์ ํน์ ์๊ตฌ ์ฌํญ์ ์ ์คํ๊ฒ ๊ณ ๋ คํจ์ผ๋ก์จ experimental_useCache
๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ์ฌ ์๋นํ ์ฑ๋ฅ ํฅ์์ ๋ฌ์ฑํ๊ณ ๋ ๋์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
React์ ์คํ์ API์ ๋ํ ์ต์ ์
๋ฐ์ดํธ์ ๋ํ ์ ๋ณด๋ฅผ ์ป๊ณ ํ์ํ ๊ฒฝ์ฐ ์ฝ๋๋ฅผ ์กฐ์ ํ ์ค๋น๋ฅผ ํ์ญ์์ค. React๊ฐ ๊ณ์ ๋ฐ์ ํจ์ ๋ฐ๋ผ experimental_useCache
์ ๊ฐ์ ์บ์ฑ ๊ธฐ์ ์ ๊ณ ์ฑ๋ฅ ๋ฐ ํ์ฅ ๊ฐ๋ฅํ ์น ์ ํ๋ฆฌ์ผ์ด์
๊ตฌ์ถ์์ ์ ์ ๋ ์ค์ํ ์ญํ ์ ํ ๊ฒ์
๋๋ค.