web/react

cache

dev_been94 2024. 12. 16. 11:34
728x90
๋ฐ˜์‘ํ˜•

cache

 

๐ŸŽฏ Cache(์บ์‹œ)๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?

์บ์‹œ๋Š” ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ์ €์žฅํ•ด๋‘๋Š” ์ž„์‹œ ์ €์žฅ์†Œ์˜ˆ์š”.

  • ๋ฐ์ดํ„ฐ๋ฅผ ๋ฏธ๋ฆฌ ์ €์žฅํ•ด๋‘๊ณ  ํ•„์š”ํ•  ๋•Œ ๋น ๋ฅด๊ฒŒ ๊บผ๋‚ด ์“ธ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค์–ด, ์ธํ„ฐ๋„ท ๋ธŒ๋ผ์šฐ์ €๋„ ์ž์ฃผ ๋ฐฉ๋ฌธํ•˜๋Š” ์›น์‚ฌ์ดํŠธ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹œ์— ์ €์žฅํ•ด์„œ ๋‹ค์Œ์— ๋ฐฉ๋ฌธํ•  ๋•Œ ๋น ๋ฅด๊ฒŒ ๋ณด์—ฌ์ค˜์š”.

 

๐Ÿ• ๋น„์œ ๋กœ ์ดํ•ดํ•˜๊ธฐ: ํ”ผ์ž ๊ฐ€๊ฒŒ ์ด์•ผ๊ธฐ

์—ฌ๋Ÿฌ๋ถ„์ด ํ”ผ์ž ๊ฐ€๊ฒŒ๋ฅผ ์šด์˜ํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ด ๋ณด์„ธ์š”. ๐Ÿ•

  1. ์บ์‹œ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ
    ์†๋‹˜์ด ํ”ผ์ž๋ฅผ ์ฃผ๋ฌธํ•  ๋•Œ๋งˆ๋‹ค ๋ฐ˜์ฃฝ๋ถ€ํ„ฐ ๊ตฝ๊ณ , ์žฌ๋ฃŒ๋ฅผ ์ค€๋น„ํ•ด์•ผ ํ•ด์š”.
    ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ฒ ์ฃ ?
  2. ์บ์‹œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ
    ์ธ๊ธฐ ๋ฉ”๋‰ด์ธ ๋งˆ๋ฅด๊ฒŒ๋ฆฌํƒ€ ํ”ผ์ž๋ฅผ **๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด์„œ ๋ƒ‰์žฅ๊ณ (์บ์‹œ)**์— ๋ณด๊ด€ํ•ด๋‘ฌ์š”.
    ์†๋‹˜์ด ๋งˆ๋ฅด๊ฒŒ๋ฆฌํƒ€ ํ”ผ์ž๋ฅผ ์ฃผ๋ฌธํ•˜๋ฉด ๋ฐ”๋กœ ๊บผ๋‚ด์„œ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์–ด์š”.
    ํ›จ์”ฌ ๋น ๋ฅด๊ฒŒ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๊ฒ ์ฃ ?

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;

๐Ÿ” ์ฝ”๋“œ ์„ค๋ช…

  1. ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹œ์— ์ €์žฅ
    • queryKey: ['posts']: React Query๋Š” ์ด ํ‚ค๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹œ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
    • ๊ฐ™์€ ํ‚ค๋กœ ์š”์ฒญํ•˜๋ฉด ์บ์‹œ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด ๋น ๋ฅด๊ฒŒ ํ™”๋ฉด์„ ์—…๋ฐ์ดํŠธํ•ด์š”.
  2. staleTime
    • ์บ์‹œ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋Š” 5๋ถ„(300์ดˆ) ๋™์•ˆ "์‹ ์„ "ํ•˜๋‹ค๊ณ  ๊ฐ„์ฃผ๋ผ์š”.
    • ์ด ์‹œ๊ฐ„ ๋‚ด์—๋Š” ์„œ๋ฒ„์— ๋‹ค์‹œ ์š”์ฒญํ•˜์ง€ ์•Š๊ณ  ์บ์‹œ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  3. ๋กœ๋”ฉ ๋ฐ ์—๋Ÿฌ ์ฒ˜๋ฆฌ
    • ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋™์•ˆ **๋กœ๋”ฉ ์ค‘...**์„ ํ‘œ์‹œํ•˜๊ณ , ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

 

๐Ÿš€ ์บ์‹œ์˜ ์žฅ์ 

  1. ๋น ๋ฅธ ๋กœ๋”ฉ
    • ์„œ๋ฒ„์— ๋งค๋ฒˆ ์š”์ฒญํ•˜์ง€ ์•Š๊ณ  ์บ์‹œ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋‹ˆ๊นŒ ๋กœ๋”ฉ ์†๋„๊ฐ€ ๋น ๋ฆ…๋‹ˆ๋‹ค.
  2. ์„œ๋ฒ„ ์š”์ฒญ ์ค„์ด๊ธฐ
    • ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ถˆํ•„์š”ํ•˜๊ฒŒ ์„œ๋ฒ„์— ์š”์ฒญํ•˜๋Š” ํšŸ์ˆ˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์–ด์„œ ์„ฑ๋Šฅ ์ตœ์ ํ™”์— ๋„์›€์ด ๋ผ์š”.
  3. ์œ ์—ฐํ•œ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ
    • staleTime๊ณผ ๊ฐ™์€ ์„ค์ •์„ ํ†ตํ•ด ์บ์‹œ์˜ ์œ ํšจ ์‹œ๊ฐ„์„ ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ์–ด์š”.

 

๐Ÿ”„ ์บ์‹œ๊ฐ€ ์—…๋ฐ์ดํŠธ๋  ๋•Œ

์บ์‹œ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์˜ค๋ž˜๋˜๋ฉด(์˜ˆ: staleTime์ด ์ง€๋‚˜๋ฉด) ์ƒˆ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ์บ์‹œ๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
์ด ๊ณผ์ •์ด ์ž๋™์œผ๋กœ ์ผ์–ด๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์ž๋Š” ๋ณต์žกํ•œ ์„ค์ •์„ ํ•  ํ•„์š” ์—†์ด ๋ฐ์ดํ„ฐ๋ฅผ ์‹ ์„ ํ•˜๊ฒŒ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์–ด์š”.

 

 

๐ŸŒŸ ํ•œ ์ค„ ์š”์•ฝ

**Cache(์บ์‹œ)**๋Š” ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฏธ๋ฆฌ ์ €์žฅํ•ด์„œ ํ•„์š”ํ•  ๋•Œ ๋น ๋ฅด๊ฒŒ ๊ฐ€์ ธ์˜ค๋Š” ๊ธฐ์ˆ ์ด์—์š”.
React์—์„œ๋Š” ์ฃผ๋กœ ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ ์†๋„๋ฅผ ๋†’์ด๊ณ  ์„œ๋ฒ„ ์š”์ฒญ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

728x90
๋ฐ˜์‘ํ˜•