React์ experimental_useMemoCacheInvalidation์ ํ๊ตฌํ์ธ์. ๋ฉ๋ชจ์ด์ ์ด์ ์ ์ธ๋ฐํ๊ฒ ์ ์ดํ๋ ๊ฐ๋ ฅํ ๋๊ตฌ์ ๋๋ค. ์ ์ธ๊ณ ์ฌ์ฉ์๋ฅผ ์ํด React ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฑ๋ฅ์ ์ต์ ํํ๊ณ ์บ์ ๋ฌดํจํ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ฐ์ธ์.
React์ experimental_useMemoCacheInvalidation ๋ง์คํฐํ๊ธฐ: ๋ฉ๋ชจ ์บ์ ์ ์ด ์ฌ์ธต ๋ถ์
์ฌ์ฉ์ ์ธํฐํ์ด์ค ๊ตฌ์ถ์ ์ํ ๋๋ฆฌ ์ฑํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ React๋ ๊ฐ๋ฐ์์๊ฒ ์ฑ๋ฅ์ด ๋ฐ์ด๋๊ณ ์ ์ง ๊ด๋ฆฌ ๊ฐ๋ฅํ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ง๋๋ ๋ฐ ํ์ํ ๋๊ตฌ๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด ์ง์์ ์ผ๋ก ๋ฐ์ ํ๊ณ ์์ต๋๋ค. ํ์ฌ ์คํ ๋จ๊ณ์ ์๋ ์ด๋ฌํ ๋ฐ์ ์ค ํ๋๋ experimental_useMemoCacheInvalidation์
๋๋ค. ์ด ๊ฐ๋ ฅํ ํ
์ ๋ฉ๋ชจ์ด์ ์ด์
์ ๋ํ ์ธ๋ถํ๋ ์ ์ด๋ฅผ ์ ๊ณตํ์ฌ ๊ฐ๋ฐ์๊ฐ ์ฑ๋ฅ์ ๋ฏธ์ธ ์กฐ์ ํ๊ณ ์บ์ ๋ฌดํจํ ์ ๋ต์ ๋์ฑ ์ ํํ๊ฒ ๊ด๋ฆฌํ ์ ์๋๋ก ํฉ๋๋ค. ์ด ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์์๋ experimental_useMemoCacheInvalidation์ ๋ณต์ก์ฑ์ ์์ธํ ์ดํด๋ณด๊ณ , React ๊ฐ๋ฐ์์ ๊ธ๋ก๋ฒ ์ฌ์ฉ์๋ฅผ ์ํ ๊ธฐ๋ฅ ๋ฐ ์ค์ ์ ์ฉ ์ฌ๋ก์ ๋ํ ํฌ๊ด์ ์ธ ์ดํด๋ฅผ ์ ๊ณตํฉ๋๋ค.
๋ฉ๋ชจ์ด์ ์ด์ ์ ํ์์ฑ ์ดํด
experimental_useMemoCacheInvalidation์ ์์ธํ ์ดํด๋ณด๊ธฐ ์ ์ ๋ฉ๋ชจ์ด์ ์ด์
์ ๊ธฐ๋ณธ ๊ฐ๋
๊ณผ React ์ ํ๋ฆฌ์ผ์ด์
์ ํ์์ ์ธ ์ด์ ๋ฅผ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๋ฉ๋ชจ์ด์ ์ด์
์ ๋น์ฉ์ด ๋ง์ด ๋๋ ํจ์ ํธ์ถ์ ๊ฒฐ๊ณผ๋ฅผ ์บ์ฑํ๊ณ ๋์ผํ ์
๋ ฅ์ด ๋ค์ ๋ฐ์ํ ๋ ์ฌ์ฌ์ฉํ๋ ์ต์ ํ ๊ธฐ์ ์
๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ค๋ณต ๊ณ์ฐ์ ๋ฐฉ์งํ๊ณ , ํนํ ๋ณต์กํ ๊ณ์ฐ์ด๋ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ ์์
์ ์ฒ๋ฆฌํ ๋ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํต๋๋ค.
React์์ ๋ฉ๋ชจ์ด์ ์ด์
์ ์ฃผ๋ก useMemo์ React.memo(๊ฐ๊ฐ ํจ์ํ ๋ฐ ํด๋์ค ์ปดํฌ๋ํธ์ฉ)๋ฅผ ์ฌ์ฉํ์ฌ ์ํ๋ฉ๋๋ค. ์ด๋ฌํ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ๋ฐ์๊ฐ ์ข
์์ฑ์ด ๋ณ๊ฒฝ๋ ๋๋ง ์ปดํฌ๋ํธ๋ฅผ ๋ค์ ๋ ๋๋งํ๊ฑฐ๋ ๊ฐ์ ๋ค์ ๊ณ์ฐํ๋๋ก React์ ์ง์ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์
์์๋ ์ข
์์ฑ์ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ ์ ํํ ์บ์ ๋ฌดํจํ๋ฅผ ๋ณด์ฅํ๋ ๊ฒ์ด ์ด๋ ค์์ง ์ ์์ต๋๋ค. ์ด๊ฒ์ด experimental_useMemoCacheInvalidation์ด ์๋ํ๋ ๋ฐฉ์์
๋๋ค.
experimental_useMemoCacheInvalidation ์๊ฐ
experimental_useMemoCacheInvalidation์ ๋ฉ๋ชจ์ด์ ์ด์
์ ๋ํ ๋ณด๋ค ๋ช
์์ ์ธ ์ ์ด๋ฅผ ์ ๊ณตํ๋๋ก ์ค๊ณ๋ React ํ
์
๋๋ค. ๊ฐ๋ฐ์๊ฐ ์ข
์์ฑ ๋ฐฐ์ด์๋ง ์์กดํ์ง ์๊ณ ๋ฉ๋ชจ์ด์ ์ด์
๋ ๊ฐ์ ๋ฌดํจํํด์ผ ํ๋ ํน์ ์กฐ๊ฑด์ ์ ์ํ ์ ์๋๋ก ํฉ๋๋ค. ์ด๋ฌํ ๋ฏธ์ธํ ์์ค์ ์ ์ด๋ฅผ ํตํด ๋ณด๋ค ํจ์จ์ ์ธ ์บ์ ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ฉฐ ํน์ ์๋๋ฆฌ์ค์์ ์๋นํ ์ฑ๋ฅ ํฅ์์ ์ป์ ์ ์์ต๋๋ค.
experimental_useMemoCacheInvalidation์ ์ฃผ์ ๊ธฐ๋ฅ:
- ๋ช
์์ ๋ฌดํจํ: ์ข
์์ฑ์ด ๋ณ๊ฒฝ๋ ๋ ์บ์๋ ๊ฐ์ ์๋์ผ๋ก ๋ฌดํจํํ๋
useMemo์ ๋ฌ๋ฆฌexperimental_useMemoCacheInvalidation์ ์ฌ์ฉํ๋ฉด ๋ฌดํจํ์ ๋ํ ํน์ ์กฐ๊ฑด์ ์ ์ํ ์ ์์ต๋๋ค. - ์ธ๋ถํ๋ ์ ์ด: ์บ์๋ ๊ฐ์ ๋ค์ ๊ณ์ฐํด์ผ ํ๋ ์๊ธฐ๋ฅผ ๊ฒฐ์ ํ๊ธฐ ์ํด ์ฌ์ฉ์ ์ง์ ๋ก์ง์ ์ ์ํ ์ ์์ต๋๋ค. ์ด๋ ๋ณต์กํ ๋ฐ์ดํฐ ๊ตฌ์กฐ ๋๋ ์ํ ๋ณ๊ฒฝ์ ์ฒ๋ฆฌํ ๋ ํนํ ์ ์ฉํฉ๋๋ค.
- ํฅ์๋ ์ฑ๋ฅ: ์บ์ ๋ฌดํจํ ํ๋ก์ธ์ค๋ฅผ ์ ์ดํ์ฌ ๋ถํ์ํ ๋ค์ ๋ ๋๋ง ๋ฐ ๊ณ์ฐ์ ์ค์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ์ต์ ํํ ์ ์์ต๋๋ค.
์ฐธ๊ณ : ์ด๋ฆ์์ ์ ์ ์๋ฏ์ด experimental_useMemoCacheInvalidation์ ์์ง ์คํ ๋จ๊ณ์ ์์ต๋๋ค. API ๋ฐ ๋์์ ํฅํ React ๋ฆด๋ฆฌ์ค์์ ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค. ์ด ํ
์ ์ฌ์ฉํ ๋๋ ์ต์ React ์ค๋ช
์ ๋ฐ ์ปค๋ฎค๋ํฐ ํ ๋ก ์ ์ต์ ์ํ๋ก ์ ์งํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
experimental_useMemoCacheInvalidation ์ฌ์ฉ ๋ฐฉ๋ฒ
experimental_useMemoCacheInvalidation์ ๊ธฐ๋ณธ ๊ตฌ๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
import { experimental_useMemoCacheInvalidation as useMemoCacheInvalidation } from 'react';
function MyComponent(props) {
const [data, setData] = React.useState(null);
const [cacheKey, setCacheKey] = React.useState(0);
const memoizedValue = useMemoCacheInvalidation(
() => {
// Expensive computation or data fetching
console.log('Computing memoized value');
return computeExpensiveValue(props.input);
},
() => [cacheKey, props.input]
);
return (
<div>
<p>Memoized Value: {memoizedValue}</p>
<button onClick={() => setCacheKey(prev => prev + 1)}>Invalidate Cache</button>
</div>
);
}
์ด ์ฝ๋ ์กฐ๊ฐ์ ๋ถ์ํด ๋ณด๊ฒ ์ต๋๋ค.
- Import: 'react' ํจํค์ง์์
experimental_useMemoCacheInvalidation์ ๊ฐ์ ธ์ต๋๋ค. - ๊ณ์ฐ ํจ์: ์ฒซ ๋ฒ์งธ ์ธ์๋ ๋ฉ๋ชจ์ด์ ์ด์ ํ ๊ฐ์ ๋ฐํํ๋ ํจ์์ ๋๋ค. ์ฌ๊ธฐ์ ๋น์ฉ์ด ๋ง์ด ๋๋ ๊ณ์ฐ ๋๋ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ ๋ก์ง์ ๋ฐฐ์นํฉ๋๋ค.
- ๋ฌดํจํ ํจ์: ๋ ๋ฒ์งธ ์ธ์๋ ๊ฐ ๋ฐฐ์ด์ ๋ฐํํ๋ ํจ์์ ๋๋ค. React๋ ์ด๋ฌํ ๊ฐ ์ค ํ๋๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ์ฒซ ๋ฒ์งธ ํจ์๋ฅผ ๋ค์ ์คํํฉ๋๋ค.
- ์ข
์์ฑ: ๋ฌดํจํ ํจ์ ๋ด์์ ์บ์ ๋ฌดํจํ๋ฅผ ํธ๋ฆฌ๊ฑฐํด์ผ ํ๋ ์ข
์์ฑ์ ์ง์ ํฉ๋๋ค. ์ด๋
useMemo์ ์ข ์์ฑ ๋ฐฐ์ด๊ณผ ์ ์ฌํ์ง๋ง ๋ ํฐ ์ ์ฐ์ฑ์ ํ์ฉํฉ๋๋ค. - ์: ๋ฒํผ์ ์ฌ์ฉํ์ฌ ์ฆ๊ฐํ ๋ ๋ฉ๋ชจ์ด์ ์ด์ ๋ ๊ฐ์ ๋ฌดํจํ๋ฅผ ํธ๋ฆฌ๊ฑฐํ๋ cacheKey๊ฐ ์์ต๋๋ค. ๋ํ ๊ตฌ์ฑ ์์ ์์ฑ์ ์ข ์์ฑ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
์ค์ฉ์ ์ธ ์์ ๋ฐ ์ฌ์ฉ ์ฌ๋ก
experimental_useMemoCacheInvalidation์ด ํนํ ์ ์ฉํ ์ ์๋ ๋ช ๊ฐ์ง ์ค์ฉ์ ์ธ ์๋๋ฆฌ์ค๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
1. ๋ณต์กํ ๊ณ์ฐ ์ต์ ํ
์ฌ์ฉ์ ์
๋ ฅ์ ๊ธฐ๋ฐ์ผ๋ก ๊ณ์ฐ ์ง์ฝ์ ์ธ ๊ณ์ฐ์ ์ํํ๋ ๊ตฌ์ฑ ์์๋ฅผ ์์ํด ๋ณด์ธ์. ๋ฉ๋ชจ์ด์ ์ด์
์ด ์์ผ๋ฉด ์ด ๊ณ์ฐ์ ๊ตฌ์ฑ ์์๊ฐ ๋ค์ ๋ ๋๋ง๋ ๋๋ง๋ค ๋ค์ ์คํ๋์ด ์ ์ฌ์ ์ผ๋ก ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค. experimental_useMemoCacheInvalidation์ ์ฌ์ฉํ๋ฉด ๊ณ์ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ๋ชจ์ด์ ์ด์
ํ๊ณ ๊ด๋ จ ์
๋ ฅ ๊ฐ์ด ๋ณ๊ฒฝ๋ ๋๋ง ์บ์๋ฅผ ๋ฌดํจํํ ์ ์์ต๋๋ค.
import { experimental_useMemoCacheInvalidation as useMemoCacheInvalidation } from 'react';
function ComplexCalculationComponent(props) {
const { inputValue } = props;
const result = useMemoCacheInvalidation(
() => {
console.log('Performing complex calculation');
// Simulate a complex calculation
let sum = 0;
for (let i = 0; i < 1000000; i++) {
sum += i * inputValue;
}
return sum;
},
() => [inputValue]
);
return (
<div>
<p>Input Value: {inputValue}</p>
<p>Result: {result}</p>
</div>
);
}
2. API์์ ๊ฐ์ ธ์จ ๋ฐ์ดํฐ ์บ์ฑ
API์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ๋ ๋ถํ์ํ ๋คํธ์ํฌ ์์ฒญ์ ๋ฐฉ์งํ๊ธฐ ์ํด ๊ฒฐ๊ณผ๋ฅผ ์บ์ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. experimental_useMemoCacheInvalidation์ ์ฌ์ฉํ์ฌ ์ด ์บ์๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
import { experimental_useMemoCacheInvalidation as useMemoCacheInvalidation } from 'react';
import { useState, useEffect } from 'react';
function DataFetchingComponent(props) {
const [data, setData] = useState(null);
const [refreshKey, setRefreshKey] = useState(0);
const fetchData = useMemoCacheInvalidation(
async () => {
console.log('Fetching data from API...');
// Simulate an API call
const response = await fetch(`https://api.example.com/data?param=${props.param}`);
const jsonData = await response.json();
return jsonData;
},
() => [props.param, refreshKey]
);
useEffect(() => {
setData(fetchData);
}, [fetchData]);
if (!data) {
return <p>Loading...</p>;
}
return (
<div>
<p>Data: {JSON.stringify(data)}</p>
<button onClick={() => setRefreshKey(prevKey => prevKey + 1)}>Refresh Data</button>
</div>
);
}
3. ํ์ ์ํ ๋ฉ๋ชจ์ด์ ์ด์
experimental_useMemoCacheInvalidation์ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ ์ํ ๋ณ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ๋ณํ๋ ๋ฐ์ดํฐ์ ๊ฐ์ ํ์ ์ํ๋ฅผ ๋ฉ๋ชจ์ด์ ์ด์
ํ ์๋ ์์ต๋๋ค.
import { experimental_useMemoCacheInvalidation as useMemoCacheInvalidation } from 'react';
import { useState } from 'react';
function DerivedStateComponent() {
const [items, setItems] = useState([1, 2, 3, 4, 5]);
const [filterValue, setFilterValue] = useState('');
const filteredItems = useMemoCacheInvalidation(
() => {
console.log('Filtering items...');
return items.filter(item => String(item).includes(filterValue));
},
() => [items, filterValue]
);
return (
<div>
<input
type="text"
value={filterValue}
onChange={(e) => setFilterValue(e.target.value)}
placeholder="Filter items..."
/>
<ul>
{filteredItems.map(item => (
<li key={item}>{item}</li>
))}
</ul>
</div>
);
}
๋ชจ๋ฒ ์ฌ๋ก ๋ฐ ๊ณ ๋ ค ์ฌํญ
experimental_useMemoCacheInvalidation์ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง๋ง, ์ ์ฌ์ ์ธ ํจ์ ์ ํผํ๊ธฐ ์ํด ์ ์คํ๊ฒ ์ฌ์ฉํ๊ณ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
- ์ฑ๋ฅ ๋ณ๋ชฉ ํ์ ์๋ณ:
experimental_useMemoCacheInvalidation์ ์ฌ์ฉํ๊ธฐ ์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์คํ๊ฒ ๋ถ์ํ์ฌ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์๋ณํฉ๋๋ค. ๋ฉ๋ชจ์ด์ ์ด์ ์ ์ค์ ๋ก ํ์ํ ๊ฒฝ์ฐ์๋ง ์ ์ฉํด์ผ ํฉ๋๋ค. - ์ข ์์ฑ ์ต์ํ: ๋ฌดํจํ ํจ์์์ ์ข ์์ฑ์ ์ต์ํ์ผ๋ก ์ ์งํฉ๋๋ค. ๊ณผ๋ํ ์ข ์์ฑ์ ๋ถํ์ํ ์บ์ ๋ฌดํจํ๋ก ์ด์ด์ง๊ณ ๋ฉ๋ชจ์ด์ ์ด์ ์ ๋ชฉ์ ์ ๋ฌด๋๋จ๋ฆด ์ ์์ต๋๋ค.
- ๋์ ๊ณ ๋ ค:
experimental_useMemoCacheInvalidation์ ์ ํํ๊ธฐ ์ ์useMemo๋ฐReact.memo์ ๊ฐ์ ๋์ ์๋ฃจ์ ์ ํ์ํฉ๋๋ค. ์ด๋ฌํ ๋ ๊ฐ๋จํ ๋์์ ๋ง์ ์ฌ์ฉ ์ฌ๋ก์ ์ถฉ๋ถํ ์ ์์ต๋๋ค. - ์ฒ ์ ํ ํ
์คํธ:
experimental_useMemoCacheInvalidation์ ์ฌ์ฉํ์ฌ ๊ตฌ์ฑ ์์๋ฅผ ์๊ฒฉํ๊ฒ ํ ์คํธํ์ฌ ์บ์ ๋ฌดํจํ ๋ก์ง์ด ์์๋๋ก ์๋ํ๊ณ ์๊ธฐ์น ์์ ๋์์ ๋์ ํ์ง ์๋์ง ํ์ธํฉ๋๋ค. - ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง: ์ฑ๋ฅ ํ๋กํ์ผ๋ง ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ๋ํ ๋ฉ๋ชจ์ด์ ์ด์ ์ ์ํฅ์ ๋ชจ๋ํฐ๋งํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ฝ๋๋ฅผ ์ถ๊ฐ๋ก ์ต์ ํํ ์ ์๋ ์์ญ์ ์๋ณํ ์ ์์ต๋๋ค.
- ์ค๋ช
์ ๋ฐ ์ฝ๋ ์ฃผ์: ํญ์
experimental_useMemoCacheInvalidation์ ์ฌ์ฉํ๋ ์ด์ ๋ฅผ ๋ฌธ์ํํ๊ณ ์บ์ ๋ฌดํจํ ๋ก์ง์ ์ค๋ช ํ๊ธฐ ์ํด ๋ช ํํ ์ฝ๋ ์ฃผ์์ ์ ๊ณตํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ํนํ ์ ์ธ๊ณ์ ๋ถ์ฐ๋์ด ์๊ณ ๋ค์ํ ๋ฐฐ๊ฒฝ๊ณผ ์ฝ๋๋ฒ ์ด์ค์ ๋ํ ์น์๋ ์์ค์ ๊ฐ์ง ๊ฐ๋ฐ์๋ก ๊ตฌ์ฑ๋ ํ์ ์ ์ง ๊ด๋ฆฌ์ฑ์ด ํฌ๊ฒ ํฅ์๋ฉ๋๋ค. - ํธ๋ ์ด๋ ์คํ ์ดํด: ๋ฉ๋ชจ์ด์ ์ด์ ์๋ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋๊ณผ ์ฑ๋ฅ ๊ฐ์ ํธ๋ ์ด๋ ์คํ๊ฐ ํฌํจ๋ฉ๋๋ค. ํฐ ๋ฐ์ดํฐ ์ธํธ ๋๋ ๋ณต์กํ ๊ฐ์ฒด๋ฅผ ์ฒ๋ฆฌํ ๋ ํนํ ์บ์ฑ ๊ฐ๊ณผ ๊ด๋ จ๋ ์ ์ฌ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์ค๋ฒํค๋๋ฅผ ์ผ๋์ ๋์ญ์์ค. ์๋ฅผ ๋ค์ด, ์์ฃผ ๋ณ๊ฒฝ๋์ง ์๋ ๋ณต์กํ ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๋ ๊ฒ์ด ๋ค์ ๊ณ์ฐํ๋ ๊ฒ๋ณด๋ค ๋ ๋น์ ์ ์์ต๋๋ค.
- ์ปจํ ์คํธ ์ค์: ์ต์ ์ ๋ฉ๋ชจ์ด์ ์ด์ ์ ๋ต์ ํน์ ์ฌ์ฉ ์ฌ๋ก ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ํน์ฑ์ ๋ฐ๋ผ ๋ค๋ฅผ ์ ์์ต๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ์ปจํ ์คํธ๋ฅผ ์ ์คํ๊ฒ ๊ณ ๋ คํ๊ณ ์๊ตฌ ์ฌํญ์ ๊ฐ์ฅ ์ ํฉํ ๋ฉ๋ชจ์ด์ ์ด์ ๋ฐฉ์์ ์ ํํฉ๋๋ค. ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒฝ์ฐ ์ง์ญ ๊ฐ ๋คํธ์ํฌ ์๋ ๋ฐ ํ๋์จ์ด์ ์ฐจ์ด๋ฅผ ๊ณ ๋ คํ์ญ์์ค.
useMemo ๋ฐ React.memo์์ ๋น๊ต
experimental_useMemoCacheInvalidation, useMemo ๋ฐ React.memo ๊ฐ์ ๊ด๊ณ๋ฅผ ์ดํดํ๋ ๊ฒ์ด ๋์์ด ๋ฉ๋๋ค.
useMemo: ์ด ํ ์ ๊ฐ์ ๋ฉ๋ชจ์ด์ ์ด์ ํ๊ณ ์ข ์์ฑ์ด ๋ณ๊ฒฝ๋ ๋๋ง ๋ค์ ๊ณ์ฐํฉ๋๋ค. ์ข ์์ฑ์ด ๋ช ํํ๊ฒ ์ ์๋ ๊ฐ๋จํ ๋ฉ๋ชจ์ด์ ์ด์ ์๋๋ฆฌ์ค์ ์ ํฉํฉ๋๋ค.React.memo: ์ด ๊ณ ์ฐจ ์ปดํฌ๋ํธ๋ ๊ธฐ๋ฅ์ ์ปดํฌ๋ํธ๋ฅผ ๋ฉ๋ชจ์ด์ ์ด์ ํ์ฌ ํด๋น ์์ฑ์ด ๋ณ๊ฒฝ๋์ง ์์ ๊ฒฝ์ฐ ๋ค์ ๋ ๋๋ง์ ๋ฐฉ์งํฉ๋๋ค. ์ปดํฌ๋ํธ ์ ๋ฐ์ดํธ๋ฅผ ์ต์ ํํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค.experimental_useMemoCacheInvalidation: ์ด ํ ์ ์ฌ์ฉ์ ์ง์ ๋ฌดํจํ ๊ธฐ์ค์ ์ ์ํ ์ ์๋๋ก ํ์ฌ ๋ฉ๋ชจ์ด์ ์ด์ ์ ๋ํ ๋ณด๋ค ๋ช ์์ ์ธ ์ ์ด๋ฅผ ์ ๊ณตํฉ๋๋ค. ์บ์ ๋ฌดํจํ์ ๋ํ ์ธ๋ถํ๋ ์ ์ด๊ฐ ํ์ํ ์๋๋ฆฌ์ค๋ฅผ ์ํด ์ค๊ณ๋์์ต๋๋ค.
๋ณธ์ง์ ์ผ๋ก experimental_useMemoCacheInvalidation์ ๋ฌดํจํ ๋ก์ง์ ์ ์ํ๋ ๋ฐ ๋ ํฐ ์ ์ฐ์ฑ์ ์ ๊ณตํ์ฌ useMemo์ ๊ธฐ๋ฅ์ ํ์ฅํฉ๋๋ค. ๊ฐ๊ฐ ๋ค๋ฅธ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ฉฐ ํจ๊ป ์ฌ์ฉํ ์ ์์ต๋๋ค.
๊ธ๋ก๋ฒ ๊ณ ๋ ค ์ฌํญ ๋ฐ ์ ๊ทผ์ฑ
๊ธ๋ก๋ฒ ์ฌ์ฉ์๋ฅผ ์ํด ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ๋ ๋ค์ ์์๋ฅผ ๊ณ ๋ คํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
- ํ์งํ ๋ฐ ๊ตญ์ ํ(i18n): ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฌ๋ฌ ์ธ์ด๋ฅผ ์ง์ํ๊ณ ๋ค์ํ ๋ฌธํ์ ์ ํธ๋์ ์ ์ํ๋์ง ํ์ธํฉ๋๋ค. UI ์์๋ฅผ ๋ฒ์ญํ๊ณ , ๋ ์ง์ ์ซ์๋ฅผ ์ ์ ํ๊ฒ ์์์ ์ง์ ํ๊ณ , ํ ์คํธ ๋ฐฉํฅ์ฑ(์: ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ ์ธ์ด)์ ์ฒ๋ฆฌํฉ๋๋ค. React i18next ๋ฐ ์ ์ฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ด๋ฅผ ์ง์ํ ์ ์์ต๋๋ค.
- ๋ค์ํ ๋คํธ์ํฌ ์กฐ๊ฑด์ ๋ํ ์ฑ๋ฅ ์ต์ ํ: ์ ์ธ๊ณ ์ฌ์ฉ์๋ ๋ค์ํ ๋คํธ์ํฌ ์๋๋ฅผ ๊ฒฝํํฉ๋๋ค. ๋ค์์ ์ํํ์ฌ ๋ค์ํ ๋คํธ์ํฌ ์กฐ๊ฑด์ ๋ง๊ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ต์ ํํฉ๋๋ค.
- ์ฝ๋ ๋ถํ ๋ฐ ํธ๋ฆฌ ์์ดํน์ ์ฌ์ฉํ์ฌ ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์ค์ ๋๋ค.
- CDN(Content Delivery Network)์ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์์๊ฒ ๋ ๊ฐ๊น์ด ์๋ฒ์์ ์ ์ ์์ฐ์ ์ ๊ณตํฉ๋๋ค.
- ์น์ ๋ง๊ฒ ์ด๋ฏธ์ง๋ฅผ ์ต์ ํํ๊ณ ์ ์ ํ ํ์(์: WebP) ๋ฐ ํฌ๊ธฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ์ค์ํ์ง ์์ ๋ฆฌ์์ค์ ๋ํ ์ง์ฐ ๋ก๋ฉ์ ๊ตฌํํฉ๋๋ค.
- ์ ๊ทผ์ฑ: ์น ์ฝํ
์ธ ์ ๊ทผ์ฑ ์ง์นจ(WCAG)์ ์ค์ํ์ฌ ์ฅ์ ๊ฐ ์๋ ์ฌ์ฉ์๊ฐ ์ ๊ทผํ ์ ์๋๋ก ์ ํ๋ฆฌ์ผ์ด์
์ ์ค๊ณํฉ๋๋ค. ์๋งจํฑ HTML์ ์ ์ ํ๊ฒ ์ฌ์ฉํ๊ณ , ์ด๋ฏธ์ง์ ๋ํ ๋์ฒด ํ
์คํธ๋ฅผ ์ ๊ณตํ๊ณ , ํค๋ณด๋๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์
์ ํ์ํ ์ ์๋๋ก ํฉ๋๋ค.
react-aria์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ด๋ฅผ ์ง์ํ ์ ์์ต๋๋ค. - ๋ฌธํ์ ๋ฏผ๊ฐ์ฑ: ๋ฌธํ์ ์ฐจ์ด๋ฅผ ์ผ๋์ ๋๊ณ ํน์ ๋ฌธํ์์ ๊ณต๊ฒฉ์ ์ด๊ฑฐ๋ ๋ถ์ ์ ํ ์ ์๋ ์ฝํ ์ธ ๋๋ ๋์์ธ์ ์ฌ์ฉํ์ง ์๋๋ก ํฉ๋๋ค. ๋์ ์ฌ์ฉ์์ ๋ฌธํ์ ๋์์ค๋ฅผ ์กฐ์ฌํ๊ณ ์ดํดํฉ๋๋ค.
- ์๊ฐ๋ ๋ฐ ๋ ์ง: ์๋ก ๋ค๋ฅธ ์๊ฐ๋์ ์๋ ์ฌ์ฉ์๊ฐ ์ฝ๊ฒ ์ดํดํ ์ ์๋ ํ์์ผ๋ก ๋ ์ง์ ์๊ฐ์ ํ์ํฉ๋๋ค. ์ฌ์ฉ์๊ฐ ์ ํธํ๋ ์๊ฐ๋๋ฅผ ์ง์ ํ ์ ์๋ ์ต์
์ ์ ๊ณตํ๋ ๊ฒ์ ๊ณ ๋ คํ์ญ์์ค.
date-fns๋๋ ์ ์ฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ด๋ฅผ ์ง์ํ ์ ์์ต๋๋ค. - ์ ๋ ฅ ๋ฐฉ์: ํค๋ณด๋ ์ ๋ ฅ, ํฐ์น ์ ๋ ฅ ๋ฐ ์์ฑ ์ ๋ ฅ์ ํฌํจํ ๋ค์ํ ์ ๋ ฅ ๋ฐฉ์์ ์ง์ํฉ๋๋ค. ์คํฌ๋ฆฐ ๋ฆฌ๋์ ๊ฐ์ ์ ๊ทผ์ฑ ๋๊ตฌ๋ฅผ ๊ณ ๋ คํ์ญ์์ค.
์ด๋ฌํ ์์๋ฅผ ๊ณ ๋ คํ์ฌ ์์น๋ ๋ฐฐ๊ฒฝ์ ๊ด๊ณ์์ด ๋ชจ๋ ์ฌ๋์๊ฒ ์ํํ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๋ ์ง์ ํ ๊ธ๋ก๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ์ ์์ต๋๋ค.
๊ฒฐ๋ก
experimental_useMemoCacheInvalidation์ ์ฑ๋ฅ์ ์ต์ ํํ๊ณ ์บ์ ๋ฌดํจํ๋ฅผ ๋์ฑ ์ ํํ๊ฒ ๊ด๋ฆฌํ๋ ค๋ React ๊ฐ๋ฐ์์๊ฒ ์ ์ฉํ ๋๊ตฌ์
๋๋ค. ๊ธฐ๋ฅ์ ์ดํดํ๊ณ ์ ์คํ๊ฒ ์ ์ฉํ๋ฉด React ์ ํ๋ฆฌ์ผ์ด์
์ ํจ์จ์ฑ์ ํฌ๊ฒ ํฅ์์์ผ ์ ์ธ๊ณ ์ฌ์ฉ์๋ฅผ ์ํด ๋์ฑ ๋ฐ์์ ์ด๊ณ ์ฆ๊ฑฐ์ด ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ ์ ์์ต๋๋ค. ์ด ํ
์ ์คํ์ ์ธ ํน์ฑ์ ๋ํด ๊ณ์ ์ ๋ณด๋ฅผ ์ป๊ณ ํน์ ํ๋ก์ ํธ์ ์ปจํ
์คํธ์์ ์ฌ์ฉ์ ์ ์คํ๊ฒ ๊ณ ๋ คํ์ญ์์ค.
React ์ํ๊ณ๊ฐ ๊ณ์ ๋ฐ์ ํจ์ ๋ฐ๋ผ experimental_useMemoCacheInvalidation๊ณผ ๊ฐ์ ๋๊ตฌ๋ ์ ์ธ๊ณ ์ฌ์ฉ์๋ฅผ ๋์์ผ๋ก ๊ณ ์ฑ๋ฅ, ํ์ฅ ๊ฐ๋ฅํ๊ณ ์ ์ง ๊ด๋ฆฌ ๊ฐ๋ฅํ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ตฌ์ถํ ์ ์๋๋ก ํ๋ ๋ฐ ์ ์ ๋ ์ค์ํ ์ญํ ์ ํ ๊ฒ์
๋๋ค. ์ต์ ์ ์ฑ๋ฅ์ ๋ณด์ฅํ๊ณ ์ ์ฌ์ ์ธ ๋ฌธ์ ๋ฅผ ํผํ๊ธฐ ์ํด ํญ์ ์ฒ ์ ํ ํ
์คํธ๋ฅผ ์ฐ์ ์ํ๊ณ ๋ฉ๋ชจ์ด์ ์ด์
์ ๋ํ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ค์ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ฃผ์ ๋ฐ ๋ช
ํํ ๋ช
๋ช
๊ท์น๊ณผ ๊ฐ์ ์ฐ์ํ ์ํํธ์จ์ด ์์ง๋์ด๋ง์ ์์น์ ๋ค์ํ ์ธ์ด์ ํ๋ ์์ํฌ์ ์ต์ํด์ง ์ ์๋ ๊ธ๋ก๋ฒ ๊ฐ๋ฐ์ ์ฌ์ฉ์๋ฅผ ์ ์ง ๊ด๋ฆฌํ๋ ๋ฐ ๋์ฑ ์ค์ํฉ๋๋ค.