๊ณ ๊ธ ์บ์ ๊ด๋ฆฌ๋ฅผ ํตํด ์ฑ๋ฅ์ ์ต์ ํํ๋ ๊ฐ๋ ฅํ ๋๊ตฌ์ธ React์ experimental_useMemoCacheInvalidation API๋ฅผ ์ดํด๋ณด์ธ์. ์ค์ ์์ ๋ฅผ ํตํด ์ ๋ต, ์ด์ , ์ค์ ๊ตฌํ์ ์ดํดํฉ๋๋ค.
React์ experimental_useMemoCacheInvalidation ์ ๋ต: ์บ์ ๊ด๋ฆฌ์ ๋ํ ์ฌ์ธต ๋ถ์
React๋ ์ ํ๋ฆฌ์ผ์ด์
์ฑ๋ฅ์ ์ต์ ํํ๊ธฐ ์ํ ์ฌ๋ฌ ๋๊ตฌ๋ฅผ ์ ๊ณตํ๋ฉฐ, ๊ทธ์ค ๋ ๋ฐ์ ๋ ์คํ์ ์ต์
์ค ํ๋๋ experimental_useMemoCacheInvalidation API์
๋๋ค. ์ด API๋ ๋ฉ๋ชจ์ด์ ์ด์
๊ณผ ์บ์ ๋ฌดํจํ์ ๋ํ ์ธ๋ฐํ ์ ์ด๋ฅผ ์ ๊ณตํ์ฌ ๊ฐ๋ฐ์๊ฐ ๋งค์ฐ ํจ์จ์ ์ด๊ณ ๋ฐ์์ฑ์ด ๋ฐ์ด๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌ์ถํ ์ ์๊ฒ ํด์ค๋๋ค. ์ด ๊ธ์์๋ ์ด API์ ๊ธฐ๋ณธ ๊ฐ๋
, ์ ์ฌ์ ์ด์ , ๊ทธ๋ฆฌ๊ณ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ด
๋๋ค.
React์ ๋ฉ๋ชจ์ด์ ์ด์ ๊ณผ ์บ์ฑ ์ดํดํ๊ธฐ
experimental_useMemoCacheInvalidation์ ์ธ๋ถ ์ฌํญ์ ์ดํด๋ณด๊ธฐ ์ ์, React์ ๋ฉ๋ชจ์ด์ ์ด์
๊ณผ ์บ์ฑ์ ๊ธฐ๋ณธ ๊ฐ๋
์ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๋ฉ๋ชจ์ด์ ์ด์
์ ๋น์ฉ์ด ๋ง์ด ๋๋ ํจ์ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅ(์บ์)ํ๋ค๊ฐ ๋์ผํ ์
๋ ฅ์ด ๋ค์ ๋ฐ์ํ ๋ ์ฌ์ฌ์ฉํ๋ ๊ธฐ์ ์
๋๋ค. React์ ๋ด์ฅ ํ
์ธ useMemo์ useCallback์ ๋ฉ๋ชจ์ด์ ์ด์
์ ํ์ฉํ์ฌ ๋ถํ์ํ ๋ฆฌ๋ ๋๋ง๊ณผ ์ฌ๊ณ์ฐ์ ๋ฐฉ์งํฉ๋๋ค.
๋ฉ๋ชจ์ด์ ์ด์
(Memoization)์ ์ฃผ๋ก ๋จ์ผ ์ปดํฌ๋ํธ ์ธ์คํด์ค ๋ด ์ต์ ํ์ ์ค์ ์ ๋๋ ๋ฐ๋ฉด, ์บ์ฑ(Caching)์ ์ฌ๋ฌ ์ปดํฌ๋ํธ ์ธ์คํด์ค๋ ๋ค๋ฅธ ๋ ๋๋ง ์ฃผ๊ธฐ ์ ๋ฐ์ ๊ฑธ์ณ ๋ฐ์ดํฐ์ ๊ณ์ฐ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๋ ๊ฒ์ ํฌํจํฉ๋๋ค. experimental_useMemoCacheInvalidation์ useMemo๊ฐ ์ ํต์ ์ผ๋ก ์ ๊ณตํ๋ ๊ฒ ์ด์์ ์บ์ฑ ๊ธฐ๋ฅ์ ํฅ์์ํค๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค.
ํ์ค useMemo์ ํ๊ณ
useMemo๋ ์ ์ฉํ ๋๊ตฌ์ด์ง๋ง ๋ค์๊ณผ ๊ฐ์ ํ๊ณ๊ฐ ์์ต๋๋ค:
- ์์ ์์กด์ฑ ๋น๊ต:
useMemo๋ ์์กด์ฑ ๋ฐฐ์ด์ ์์ ๋๋ฑ์ฑ ๊ฒ์ฌ์ ์์กดํฉ๋๋ค. ๊ตฌ์กฐ์ ์ผ๋ก๋ ๊ฐ์ง๋ง ์ฐธ์กฐ์ ์ผ๋ก๋ ๋ค๋ฅธ ๋ณต์กํ ๊ฐ์ฒด๋ ๋ฐฐ์ด์ ์ฌ์ ํ ์ฌ๊ณ์ฐ์ ์ ๋ฐํฉ๋๋ค. - ์ธ๋ฐํ ๋ฌดํจํ์ ๋ถ์ฌ: ๋ฉ๋ชจ์ด์ ์ด์ ๋ ๊ฐ์ ๋ฌดํจํํ๋ ค๋ฉด ์์กด์ฑ ๋ฐฐ์ด์ ์์กด์ฑ ์ค ํ๋๊ฐ ๋ณ๊ฒฝ๋์ด์ผ ํฉ๋๋ค. ๋ค๋ฅธ ์ ํ๋ฆฌ์ผ์ด์ ๋ก์ง์ ๊ธฐ๋ฐํ์ฌ ์ ํ์ ์ผ๋ก ์บ์๋ฅผ ๋ฌดํจํํ ์ง์ ์ ์ธ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
- ์ปดํฌ๋ํธ ํ์ : ๋ฉ๋ชจ์ด์ ์ด์
๋ ๊ฐ์ ๋ฒ์๋
useMemo๊ฐ ์ฌ์ฉ๋ ์ปดํฌ๋ํธ๋ก ์ ํ๋ฉ๋๋ค. ์ปดํฌ๋ํธ ๊ฐ์ ๋ฉ๋ชจ์ด์ ์ด์ ๋ ๊ฐ์ ๊ณต์ ํ๋ ค๋ฉด ์ถ๊ฐ์ ์ธ ๋ฉ์ปค๋์ฆ์ด ํ์ํฉ๋๋ค.
experimental_useMemoCacheInvalidation ์๊ฐ
experimental_useMemoCacheInvalidation API๋ ์บ์ ๊ด๋ฆฌ๋ฅผ ์ํ ๋ ์ ์ฐํ๊ณ ๊ฐ๋ ฅํ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํ์ฌ ์ด๋ฌํ ํ๊ณ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ๋ค์์ ์ํํ ์ ์์ต๋๋ค:
- ์ฌ์ฉ์ ์ ์ ๋ฌดํจํ ์ ๋ต ์ ์: ๋จ์ํ ์์กด์ฑ ๋ฐฐ์ด ๊ฒ์ฌ๋ฅผ ๋์ด ์บ์๋ฅผ ์ธ์ ๋ฌดํจํํด์ผ ํ ์ง ๊ฒฐ์ ํ๋ ์ฌ์ฉ์ ์ ์ ๋ก์ง์ ์์ฑํฉ๋๋ค.
- ์บ์ ๋ฒ์ ๊ด๋ฆฌ: ์ ์ฌ์ ์ผ๋ก ๋จ์ผ ์ปดํฌ๋ํธ๋ฅผ ๋์ด ์บ์ ๋ฒ์๋ฅผ ๊ด๋ฆฌํ์ฌ ๋ฉ๋ชจ์ด์ ์ด์ ๋ ๊ฐ์ ๋ ํจ์จ์ ์ผ๋ก ๊ณต์ ํ ์ ์์ต๋๋ค. (์ฐธ๊ณ : ์ปดํฌ๋ํธ ๊ฐ ๊ณต์ ์ ๋ํ ์ธ๋ถ ์ฌํญ์ ์คํ์ ์ด๋ฉฐ ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค).
- ๋ณต์กํ ๊ณ์ฐ ์ต์ ํ: ๋ฌดํจํ ๋ก์ง์ด ๋ณต์กํ๊ณ ์ฌ๋ฌ ์์ธ์ ์์กดํ๋ ๊ณ์ฐ ๋น์ฉ์ด ๋์ ์์ ์ด ํฌํจ๋ ์๋๋ฆฌ์ค์์ ์ฑ๋ฅ์ ๊ฐ์ ํฉ๋๋ค.
์ค์ ์ฐธ๊ณ : ์ด๋ฆ์์ ์ ์ ์๋ฏ์ด, experimental_useMemoCacheInvalidation์ ์คํ์ ์ธ API์
๋๋ค. ์ด๋ ํฅํ React ๋ฆด๋ฆฌ์ค์์ ๋์ ๋ฐ API ์ธํฐํ์ด์ค๊ฐ ๋ณ๊ฒฝ๋ ์ ์์์ ์๋ฏธํฉ๋๋ค. ์ฃผ์ํด์ ์ฌ์ฉํ๊ณ ํ์ํ ๊ฒฝ์ฐ ์ฝ๋๋ฅผ ์์ ํ ์ค๋น๋ฅผ ํด์ผ ํฉ๋๋ค.
experimental_useMemoCacheInvalidation์ ์๋ ๋ฐฉ์
experimental_useMemoCacheInvalidation API๋ ๋ช ๊ฐ์ง ํต์ฌ ๊ฐ๋
์ ์ค์ฌ์ผ๋ก ์๋ํฉ๋๋ค:
- ์บ์: ๋ฉ๋ชจ์ด์ ์ด์ ๋ ๊ฐ์ ์ํ ์ ์ฅ ๋ฉ์ปค๋์ฆ์ ๋๋ค.
- ๋ฌดํจํ ํค: ํน์ ์บ์ ํญ๋ชฉ์ ์๋ณํ๊ณ ๋ฌดํจํํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๊ฐ์ ๋๋ค.
- ๋ฌดํจํ ๋ก์ง: ๋ฌดํจํ ํค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์บ์ ํญ๋ชฉ์ ์ธ์ ๋ฌดํจํํด์ผ ํ ์ง ๊ฒฐ์ ํ๋ ์ฌ์ฉ์ ์ ์ ์ฝ๋์ ๋๋ค.
๊ตฌ์ฒด์ ์ธ ๊ตฌํ ์ธ๋ถ ์ฌํญ์ ๋ณ๊ฒฝ๋ ์ ์์ง๋ง, ์ผ๋ฐ์ ์ธ ์์ด๋์ด๋ ์บ์๋ฅผ ์์ฑํ๊ณ , ํค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ทธ ์์ ๊ฐ์ ์ ์ฅํ ๋ค์, ์ฌ์ฉ์ ์ ์ ๋ก์ง์ ๋ฐ๋ผ ํด๋น ๊ฐ์ ์ ํ์ ์ผ๋ก ๋ฌดํจํํ๋ ๊ฒ์
๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ์ ํต์ ์ธ useMemo๋ณด๋ค ๋ ๋ชฉํ ์งํฅ์ ์ด๊ณ ํจ์จ์ ์ธ ์บ์ ๊ด๋ฆฌ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
์ค์ฉ์ ์ธ ์์ ๋ฐ ์ฌ์ฉ ์ฌ๋ก
experimental_useMemoCacheInvalidation์ด ์ค์ ์๋๋ฆฌ์ค์์ ์ด๋ป๊ฒ ์ฌ์ฉ๋ ์ ์๋์ง ๋ณด์ฌ์ฃผ๋ ๋ช ๊ฐ์ง ์ค์ฉ์ ์ธ ์์ ๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์ฐธ๊ณ : ์ด ์์ ๋ค์ ํต์ฌ ์์น์ ์ค๋ช
ํ๊ธฐ ์ํด ๊ฐ๋
์ ์ด๊ณ ๋จ์ํ๋์์ต๋๋ค. ์ต์ ์ ๋ณด ๋ฐ API ์ธ๋ถ ์ ๋ณด๋ ํญ์ ๊ณต์ React ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
์์ 1: ์ฌ์ฉ์ ์ ์ ๋ฌดํจํ๋ฅผ ํตํ API ์๋ต ์บ์ฑ
์๊ฒฉ API์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ํด ๋ณด์ธ์. ๋คํธ์ํฌ ์์ฒญ์ ์ค์ด๊ณ ์ฑ๋ฅ์ ํฅ์์ํค๊ธฐ ์ํด API ์๋ต์ ์บ์ฑํ๊ณ ์ถ์ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ API์ ์ ๋ฐ์ดํฐ๊ฐ ๊ฒ์๋๋ ๋ฑ ํน์ ์กฐ๊ฑด์์๋ ์บ์๊ฐ ๋ฌดํจํ๋์ด์ผ ํฉ๋๋ค.
๋ค์์ ๋จ์ํ๋ ๊ฐ๋ ์ ์์์ ๋๋ค:
// ๊ฐ๋
์ ์์ - ์ค์ API์ ๋ง์ถฐ ์กฐ์ ํ์ธ์
// ๋ฐ ํฅํ ์คํ์ API ๋ณ๊ฒฝ ์ฌํญ.
import React, { useState, useEffect } from 'react';
// ๊ฐ์์ ์ธ ์คํ์ API๋ฅผ ๊ฐ์ ํฉ๋๋ค
// import { unstable_useMemoCache as useMemoCache, unstable_useCacheKey as useCacheKey } from 'react';
function useCachedData(url, dataVersion) {
const [data, setData] = useState(null);
const [loading, setLoading] = useState(true);
const [error, setError] = useState(null);
useEffect(() => {
async function fetchData() {
setLoading(true);
try {
// ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ ์๋ฎฌ๋ ์ด์
const response = await fetch(url);
if (!response.ok) {
throw new Error(`HTTP error! Status: ${response.status}`);
}
const jsonData = await response.json();
setData(jsonData);
} catch (error) {
setError(error);
} finally {
setLoading(false);
}
}
fetchData();
}, [url, dataVersion]); // dataVersion์ ๊ฐ๋จํ ๋ฌดํจํ ํธ๋ฆฌ๊ฑฐ ์ญํ ์ ํฉ๋๋ค
return { data, loading, error };
}
function MyComponent() {
const [version, setVersion] = useState(0); // ๋ฐ์ดํฐ ๋ฒ์ ๊ด๋ฆฌ๋ฅผ ์ํ ์์ ์ํ
const { data, loading, error } = useCachedData('/api/data', version);
const handleUpdateData = () => {
// ์๋ฒ์์ ๋ฐ์ดํฐ ์
๋ฐ์ดํธ ์๋ฎฌ๋ ์ด์
// ๊ทธ ๋ค์, ๋ฒ์ ์ ์ฆ๊ฐ์์ผ ์บ์๋ฅผ ๋ฌดํจํํฉ๋๋ค
setVersion(prevVersion => prevVersion + 1);
};
if (loading) return ๋ก๋ฉ ์ค...
;
if (error) return ์ค๋ฅ: {error.message}
;
return (
๋ฐ์ดํฐ: {JSON.stringify(data)}
);
}
export default MyComponent;
์ค๋ช :
useCachedDataํ ์ API์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ ์ํ์ ์ ์ฅํฉ๋๋ค.dataVersionprop์ ๋ฌดํจํ ํค ์ญํ ์ ํฉ๋๋ค. ๋ฒ์ ์ด ๋ณ๊ฒฝ๋ ๋๋ง๋คuseEffectํ ์ด ๋ฐ์ดํฐ๋ฅผ ๋ค์ ๊ฐ์ ธ์ต๋๋ค.handleUpdateDataํจ์๋ ์๋ฒ์์ ๋ฐ์ดํฐ ์ ๋ฐ์ดํธ๋ฅผ ์๋ฎฌ๋ ์ด์ ํ ๋ค์ ๋ฒ์ ์ ์ฆ๊ฐ์์ผ ํจ๊ณผ์ ์ผ๋ก ์บ์๋ฅผ ๋ฌดํจํํฉ๋๋ค.
์ฐธ๊ณ : ์ด ์์ ๋ ๋จ์ํ๋ ๊ฒ์
๋๋ค. ์ค์ experimental_useMemoCacheInvalidation API๊ฐ ์์ ํ๋๋ฉด, ์บ์๋ฅผ ์์ฑํ๊ณ API ์๋ต์ ์บ์์ ์ ์ฅํ ๋ค์ dataVersion์ด๋ ๋ค๋ฅธ ๊ด๋ จ ์์๋ฅผ ๋ฌดํจํ ํค๋ก ์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค. handleUpdateData๊ฐ ํธ์ถ๋๋ฉด, ๋ฌดํจํ ํค๋ฅผ ์ฌ์ฉํ์ฌ ์บ์๋ API ์๋ต์ ํน์ ํ์ฌ ๋ฌดํจํํ ๊ฒ์
๋๋ค.
์์ 2: ์ฌ์ฉ์ ์ ๋ ฅ ๊ธฐ๋ฐ์ ๋ณต์กํ ๊ณ์ฐ ์บ์ฑ
์ฌ์ฉ์ ์ ๋ ฅ์ ๊ธฐ๋ฐ์ผ๋ก ๋ณต์กํ ๊ณ์ฐ์ ์ํํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๊ฐํด ๋ณด์ธ์. ์ค๋ณต ๊ณ์ฐ์ ํผํ๊ธฐ ์ํด ์ด๋ฌํ ๊ณ์ฐ ๊ฒฐ๊ณผ๋ฅผ ์บ์ฑํ๊ณ ์ถ์ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ฌ์ฉ์๊ฐ ์ ๋ ฅ ๋งค๊ฐ๋ณ์๋ฅผ ๋ณ๊ฒฝํ๋ฉด ์บ์๊ฐ ๋ฌดํจํ๋์ด์ผ ํฉ๋๋ค.
// ๊ฐ๋
์ ์์ - ์ค์ API์ ๋ง์ถฐ ์กฐ์ ํ์ธ์
// ๋ฐ ํฅํ ์คํ์ API ๋ณ๊ฒฝ ์ฌํญ.
import React, { useState } from 'react';
function ExpensiveCalculation({ input }) {
// ๋น์ฉ์ด ๋ง์ด ๋๋ ๊ณ์ฐ ์๋ฎฌ๋ ์ด์
const result = useMemo(() => {
console.log('๊ณ์ฐ ์ค...');
let sum = 0;
for (let i = 0; i < input * 100000; i++) {
sum += i;
}
return sum;
}, [input]);
return ๊ฒฐ๊ณผ: {result}
;
}
function MyComponent() {
const [inputValue, setInputValue] = useState(1);
const handleChange = (event) => {
setInputValue(parseInt(event.target.value, 10) || 1);
};
return (
);
}
export default MyComponent;
์ค๋ช :
ExpensiveCalculation์ปดํฌ๋ํธ๋inputprop์ ๊ธฐ๋ฐ์ผ๋ก ๊ณ์ฐ ์ง์ฝ์ ์ธ ๊ณ์ฐ์ ์ํํฉ๋๋ค.useMemoํ ์input์์กด์ฑ์ ๋ฐ๋ผ ๊ณ์ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ๋ชจ์ด์ ์ด์ ํฉ๋๋ค.inputValue๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋คExpensiveCalculation์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง๋๊ณ ,useMemo๊ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ค์ ๊ณ์ฐํฉ๋๋ค.
์ฐธ๊ณ : experimental_useMemoCacheInvalidation์ ์ฌ์ฉํ๋ฉด ์บ์๋ฅผ ์์ฑํ๊ณ input ๊ฐ์ ๋ฌดํจํ ํค๋ก ์ฌ์ฉํ์ฌ ๊ณ์ฐ ๊ฒฐ๊ณผ๋ฅผ ์บ์์ ์ ์ฅํ ์ ์์ต๋๋ค. inputValue๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์ด์ input ๊ฐ๊ณผ ๊ด๋ จ๋ ์บ์ ํญ๋ชฉ์ ๋ฌดํจํํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ์ฌ์ฉ์ ์
๋ ฅ์ ์ํฅ์ ๋ฐ๋ ์บ์ ํญ๋ชฉ๋ง ์ ํ์ ์ผ๋ก ๋ฌดํจํํ ์ ์์ต๋๋ค.
experimental_useMemoCacheInvalidation ์ฌ์ฉ์ ์ด์
experimental_useMemoCacheInvalidation์ ์ฌ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ฌ๋ฌ ์ด์ ์ ์ป์ ์ ์์ต๋๋ค:
- ์ฑ๋ฅ ํฅ์: ๋น์ฉ์ด ๋ง์ด ๋๋ ๊ณ์ฐ๊ณผ API ์๋ต์ ์บ์ฑํจ์ผ๋ก์จ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ํํด์ผ ํ๋ ์์ ๋์ ์ค์ฌ ์๋ต ์๊ฐ์ ๋จ์ถํ๊ณ ๋ ๋ถ๋๋ฌ์ด ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
- ๋คํธ์ํฌ ์์ฒญ ๊ฐ์: API ์๋ต์ ์บ์ฑํ๋ฉด ๋คํธ์ํฌ ์์ฒญ ์๋ฅผ ํฌ๊ฒ ์ค์ผ ์ ์์ผ๋ฉฐ, ์ด๋ ๋์ญํญ์ด ์ ํ์ ์ด๊ฑฐ๋ ์ธํฐ๋ท ์ฐ๊ฒฐ์ด ๋๋ฆฐ ์ฌ์ฉ์์๊ฒ ํนํ ์ ์ฉํฉ๋๋ค.
- ์ธ๋ฐํ ์ ์ด: ์ฌ์ฉ์ ์ ์ ๋ฌดํจํ ์ ๋ต์ ์ ์ํ ์ ์๋ ๊ธฐ๋ฅ์ ์บ์ ๊ด๋ฆฌ์ ๋ํ ๋ ํฐ ์ ์ด๊ถ์ ์ ๊ณตํ์ฌ ํน์ ์ฌ์ฉ ์ฌ๋ก์ ๋ง๊ฒ ์บ์ฑ ๋์์ ์ต์ ํํ ์ ์์ต๋๋ค.
- ์ต์ ํ๋ ๋ฆฌ์์ค ํ์ฉ: ์ค๋ณต ๊ณ์ฐ๊ณผ ๋คํธ์ํฌ ์์ฒญ์ ํผํจ์ผ๋ก์จ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ฒด ๋ฆฌ์์ค ์๋น๋ฅผ ์ค์ฌ ์๋ฒ ๋น์ฉ์ ๋ฎ์ถ๊ณ ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ์ ๋ฐฐํฐ๋ฆฌ ์๋ช ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
๊ณ ๋ ค ์ฌํญ ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก
experimental_useMemoCacheInvalidation์ ์๋นํ ์ด์ ์ ์ ๊ณตํ์ง๋ง ๋ค์ ์ฌํญ์ ๊ณ ๋ คํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค:
- ๋ณต์ก์ฑ: ์ฌ์ฉ์ ์ ์ ์บ์ ๋ฌดํจํ ๋ก์ง์ ๊ตฌํํ๋ฉด ์ฝ๋์ ๋ณต์ก์ฑ์ด ์ถ๊ฐ๋ ์ ์์ต๋๋ค. ์ด์ ์ด ์ถ๊ฐ๋ ๋ณต์ก์ฑ์ ์์ํ๋์ง ์ ์คํ๊ฒ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
- ์บ์ ์ผ๊ด์ฑ: ์ค๋๋๊ฑฐ๋ ์ผ๊ด์ฑ ์๋ ๋ฐ์ดํฐ๊ฐ ์ ๊ณต๋๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์บ์ ๋ฌดํจํ ๋ก์ง์ด ์ฌ๋ฐ๋ฅธ์ง ํ์ธํด์ผ ํฉ๋๋ค. ์ ๋ขฐ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ์บ์ฑ ๊ตฌํ์ ์ฒ ์ ํ ํ ์คํธํ์ญ์์ค.
- ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ: ์บ์์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ ์ํด์ผ ํฉ๋๋ค. ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ์ค๋๋๊ฑฐ๋ ์ฌ์ฉ๋์ง ์๋ ์บ์ ํญ๋ชฉ์ ์ ๊ฑฐํ๋ ์ ๋ต์ ๊ตฌํํ์ญ์์ค.
- API ์์ ์ฑ:
experimental_useMemoCacheInvalidation์ ์คํ์ ์ธ API์์ ๊ธฐ์ตํ์ญ์์ค. ํฅํ React ๋ฆด๋ฆฌ์ค์์ API๊ฐ ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ ์ฝ๋๋ฅผ ์์ ํ ์ค๋น๋ฅผ ํด์ผ ํฉ๋๋ค. ์ ๋ฐ์ดํธ ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก์ ๋ํ React ๊ณต์ ๋ฌธ์์ ์ปค๋ฎค๋ํฐ ํ ๋ก ์ ์ฃผ์ํ์ญ์์ค. - ๋์ฒด ์๋ฃจ์
:
experimental_useMemoCacheInvalidation์ ์์กดํ๊ธฐ ์ ์useMemo๋ฐuseCallback๊ณผ ๊ฐ์ ๋ ๊ฐ๋จํ ์บ์ฑ ๋ฉ์ปค๋์ฆ์ด ์๊ตฌ ์ฌํญ์ ์ถฉ๋ถํ์ง ๊ณ ๋ คํ์ญ์์ค.
experimental_useMemoCacheInvalidation์ ์ฌ์ฉํด์ผ ํ ๋
experimental_useMemoCacheInvalidation์ ๋ค์๊ณผ ๊ฐ์ ์๋๋ฆฌ์ค์์ ํนํ ์ ์ฉํฉ๋๋ค:
- ๋ณต์กํ ๊ณ์ฐ: ๋ฉ๋ชจ์ด์ ์ด์ ํด์ผ ํ๋ ๊ณ์ฐ ๋น์ฉ์ด ๋ง์ด ๋๋ ์์ ์ด ์์ ๋.
- ์ฌ์ฉ์ ์ ์ ๋ฌดํจํ ๋ก์ง: ๋ฌดํจํ ๋ก์ง์ด ๋ณต์กํ๊ณ ๋จ์ํ ์์กด์ฑ ๋ฐฐ์ด ๋ณ๊ฒฝ ์ด์์ ์ฌ๋ฌ ์์ธ์ ์์กดํ ๋.
- ์ฑ๋ฅ ๋ณ๋ชฉ ํ์: ์บ์ฑ์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ ๋.
- API ๋ฐ์ดํฐ: ์์ฃผ ๊ฐ์ ธ์ค๋ API ๋ฐ์ดํฐ๋ฅผ ์บ์ฑํ์ฌ ์๋ฒ ๋ถํ๋ฅผ ์ค์ด๊ณ ์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐ์ ํด์ผ ํ ๋.
๊ฒฐ๋ก
React์ experimental_useMemoCacheInvalidation API๋ ๊ณ ๊ธ ์บ์ ๊ด๋ฆฌ๋ฅผ ํตํด ์ ํ๋ฆฌ์ผ์ด์
์ฑ๋ฅ์ ์ต์ ํํ๋ ๊ฐ๋ ฅํ ๋๊ตฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด API์ ๊ธฐ๋ณธ ๊ฐ๋
์ ์ดํดํ๊ณ ์ฌ์ฉ์ ์ ์ ๋ฌดํจํ ์ ๋ต์ ๊ตฌํํจ์ผ๋ก์จ ๊ฐ๋ฐ์๋ ๋งค์ฐ ํจ์จ์ ์ด๊ณ ๋ฐ์์ฑ์ด ๋ฐ์ด๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌ์ถํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด API๋ ์คํ์ ์ด๋ฉฐ ๋ณ๊ฒฝ๋ ์ ์์ผ๋ฏ๋ก ์ฃผ์ํด์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ํญ์ ๋ช
ํํ๊ณ ์ ์ง ๊ด๋ฆฌ ๊ฐ๋ฅํ ์ฝ๋๋ฅผ ์ฐ์ ์ํ๊ณ , ์ ๋ขฐ์ฑ๊ณผ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ์บ์ฑ ๊ตฌํ์ ์ฒ ์ ํ ํ
์คํธํด์ผ ํฉ๋๋ค.
React ์ํ๊ณ๊ฐ ๊ณ์ ๋ฐ์ ํจ์ ๋ฐ๋ผ, experimental_useMemoCacheInvalidation๊ณผ ๊ฐ์ ์คํ์ ๊ธฐ๋ฅ์ ๋ํ ์ ๋ณด๋ฅผ ๊ณ์ ํ์
ํ๋ ๊ฒ์ ๊ณ ์ฑ๋ฅ์ ํ์ฅ ๊ฐ๋ฅํ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ตฌ์ถํ๋ ๋ฐ ํ์์ ์
๋๋ค. ์ด ๊ธ์์ ์ค๋ช
ํ ์ฅ๋จ์ ๊ณผ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ ์คํ๊ฒ ๊ณ ๋ คํจ์ผ๋ก์จ ์ด API์ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ React ์ ํ๋ฆฌ์ผ์ด์
์ ์ต์ ํํ๊ณ ๋ฐ์ด๋ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ ์ ์์ต๋๋ค. experimental_useMemoCacheInvalidation์ ๊ดํ ์ต์ ์
๋ฐ์ดํธ ๋ฐ ๊ฐ์ด๋๋ผ์ธ์ ๋ํด์๋ ๊ณต์ React ๋ฌธ์์ ์ปค๋ฎค๋ํฐ ๋ฆฌ์์ค๋ฅผ ๊ณ์ ์ฃผ์ํ๋ ๊ฒ์ ์์ง ๋ง์ญ์์ค.