cache
๐ฏ Cache(์บ์)๋ ๋ฌด์์ธ๊ฐ์?
์บ์๋ ์์ฃผ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ์ ๊ทผํ ์ ์๋๋ก ์ ์ฅํด๋๋ ์์ ์ ์ฅ์์์.
- ๋ฐ์ดํฐ๋ฅผ ๋ฏธ๋ฆฌ ์ ์ฅํด๋๊ณ ํ์ํ ๋ ๋น ๋ฅด๊ฒ ๊บผ๋ด ์ธ ์ ์๊ฒ ํด์ฃผ๋ ์ญํ ์ ํฉ๋๋ค.
- ์๋ฅผ ๋ค์ด, ์ธํฐ๋ท ๋ธ๋ผ์ฐ์ ๋ ์์ฃผ ๋ฐฉ๋ฌธํ๋ ์น์ฌ์ดํธ์ ๋ฐ์ดํฐ๋ฅผ ์บ์์ ์ ์ฅํด์ ๋ค์์ ๋ฐฉ๋ฌธํ ๋ ๋น ๋ฅด๊ฒ ๋ณด์ฌ์ค์.
๐ ๋น์ ๋ก ์ดํดํ๊ธฐ: ํผ์ ๊ฐ๊ฒ ์ด์ผ๊ธฐ
์ฌ๋ฌ๋ถ์ด ํผ์ ๊ฐ๊ฒ๋ฅผ ์ด์ํ๊ณ ์๋ค๊ณ ์๊ฐํด ๋ณด์ธ์. ๐
- ์บ์๊ฐ ์๋ ๊ฒฝ์ฐ
์๋์ด ํผ์๋ฅผ ์ฃผ๋ฌธํ ๋๋ง๋ค ๋ฐ์ฃฝ๋ถํฐ ๊ตฝ๊ณ , ์ฌ๋ฃ๋ฅผ ์ค๋นํด์ผ ํด์.
→ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๊ฒ ์ฃ ? - ์บ์๊ฐ ์๋ ๊ฒฝ์ฐ
์ธ๊ธฐ ๋ฉ๋ด์ธ ๋ง๋ฅด๊ฒ๋ฆฌํ ํผ์๋ฅผ **๋ฏธ๋ฆฌ ๋ง๋ค์ด์ ๋์ฅ๊ณ (์บ์)**์ ๋ณด๊ดํด๋ฌ์.
์๋์ด ๋ง๋ฅด๊ฒ๋ฆฌํ ํผ์๋ฅผ ์ฃผ๋ฌธํ๋ฉด ๋ฐ๋ก ๊บผ๋ด์ ์ ๊ณตํ ์ ์์ด์.
→ ํจ์ฌ ๋น ๋ฅด๊ฒ ์ ๊ณตํ ์ ์๊ฒ ์ฃ ?
React์ ์บ์๋ ์ด **"๋ฏธ๋ฆฌ ์ ์ฅํด๋๋ค"**๋ ๊ฐ๋
๊ณผ ๊ฐ์์.
์์ฃผ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฏธ๋ฆฌ ์ ์ฅํด๋๊ณ , ๋ค์ ์ฌ์ฉํ ๋ ๋น ๋ฅด๊ฒ ๊บผ๋ด์ค๋ ๊ฑฐ์ฃ .
๐ ๏ธ React์์ Cache๋ ์ด๋ป๊ฒ ์ฌ์ฉ๋ ๊น์?
React์์ ์บ์๋ ์ฃผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ๋(fetch) ์ฌ์ฉ๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด, ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ ํ๋ฉด์ ๋ณด์ฌ์ค ๋ ์บ์๋ฅผ ์ฌ์ฉํ๋ฉด ์ฑ๋ฅ์ด ํจ์ฌ ์ข์์ ธ์.
๐ฆ React Query๋ฅผ ํตํ ์บ์ ์์
React์ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค ํ๋์ธ React Query๋ฅผ ์ฌ์ฉํด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ณ ์บ์์ ์ ์ฅํ๋ ์์ ๋ฅผ ๋ณด์ฌ๋๋ฆด๊ฒ์.
1. ๋ฐ์ดํฐ๋ฅผ ์บ์ฑํ๋ ์ฝ๋
import { useQuery } from '@tanstack/react-query';
async function fetchPosts() {
const response = await fetch('https://jsonplaceholder.typicode.com/posts');
return response.json();
}
function Posts() {
// React Query๋ก ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ
const { data, isLoading, error } = useQuery({
queryKey: ['posts'], // ์บ์์ ์ ์ฅ๋ ํค
queryFn: fetchPosts, // ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ํจ์
staleTime: 1000 * 60 * 5, // 5๋ถ ๋์ ์บ์ ์ ์ง
});
if (isLoading) return <p>๋ก๋ฉ ์ค...</p>;
if (error) return <p>์๋ฌ ๋ฐ์: {error.message}</p>;
return (
<div>
<h1>ํฌ์คํธ ๋ชฉ๋ก</h1>
<ul>
{data.map((post) => (
<li key={post.id}>{post.title}</li>
))}
</ul>
</div>
);
}
export default Posts;
๐ ์ฝ๋ ์ค๋ช
- ๋ฐ์ดํฐ๋ฅผ ์บ์์ ์ ์ฅ
- queryKey: ['posts']: React Query๋ ์ด ํค๋ฅผ ์ฌ์ฉํด์ ๋ฐ์ดํฐ๋ฅผ ์บ์์ ์ ์ฅํฉ๋๋ค.
- ๊ฐ์ ํค๋ก ์์ฒญํ๋ฉด ์บ์๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํด ๋น ๋ฅด๊ฒ ํ๋ฉด์ ์ ๋ฐ์ดํธํด์.
- staleTime
- ์บ์์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ 5๋ถ(300์ด) ๋์ "์ ์ "ํ๋ค๊ณ ๊ฐ์ฃผ๋ผ์.
- ์ด ์๊ฐ ๋ด์๋ ์๋ฒ์ ๋ค์ ์์ฒญํ์ง ์๊ณ ์บ์๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ๋ก๋ฉ ๋ฐ ์๋ฌ ์ฒ๋ฆฌ
- ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๋์ **๋ก๋ฉ ์ค...**์ ํ์ํ๊ณ , ์๋ฌ๊ฐ ๋ฐ์ํ๋ฉด ๋ฉ์์ง๋ฅผ ๋ณด์ฌ์ค๋๋ค.
๐ ์บ์์ ์ฅ์
- ๋น ๋ฅธ ๋ก๋ฉ
- ์๋ฒ์ ๋งค๋ฒ ์์ฒญํ์ง ์๊ณ ์บ์์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋๊น ๋ก๋ฉ ์๋๊ฐ ๋น ๋ฆ ๋๋ค.
- ์๋ฒ ์์ฒญ ์ค์ด๊ธฐ
- ์บ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋ถํ์ํ๊ฒ ์๋ฒ์ ์์ฒญํ๋ ํ์๋ฅผ ์ค์ผ ์ ์์ด์ ์ฑ๋ฅ ์ต์ ํ์ ๋์์ด ๋ผ์.
- ์ ์ฐํ ๋ฐ์ดํฐ ๊ด๋ฆฌ
- staleTime๊ณผ ๊ฐ์ ์ค์ ์ ํตํด ์บ์์ ์ ํจ ์๊ฐ์ ์กฐ์ ํ ์ ์์ด์.
๐ ์บ์๊ฐ ์ ๋ฐ์ดํธ๋ ๋
์บ์๋ ๋ฐ์ดํฐ๊ฐ ์ค๋๋๋ฉด(์: staleTime์ด ์ง๋๋ฉด) ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ณ ์บ์๋ฅผ ์
๋ฐ์ดํธํฉ๋๋ค.
์ด ๊ณผ์ ์ด ์๋์ผ๋ก ์ผ์ด๋๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ์๋ ๋ณต์กํ ์ค์ ์ ํ ํ์ ์์ด ๋ฐ์ดํฐ๋ฅผ ์ ์ ํ๊ฒ ์ ์งํ ์ ์์ด์.
๐ ํ ์ค ์์ฝ
**Cache(์บ์)**๋ ์์ฃผ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฏธ๋ฆฌ ์ ์ฅํด์ ํ์ํ ๋ ๋น ๋ฅด๊ฒ ๊ฐ์ ธ์ค๋ ๊ธฐ์ ์ด์์.
React์์๋ ์ฃผ๋ก ๋ฐ์ดํฐ ๋ก๋ฉ ์๋๋ฅผ ๋์ด๊ณ ์๋ฒ ์์ฒญ์ ์ค์ด๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.