ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

web/nextjs

cache revalidate

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

cache revalidate

 

๐ŸŽฏ cache์™€ revalidate๋ž€ ๋ฌด์—‡์ผ๊นŒ์š”?

๋จผ์ € ๊ฐ„๋‹จํžˆ ์„ค๋ช…ํ• ๊ฒŒ์š”.

  • Cache(์บ์‹œ):
    ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฏธ๋ฆฌ ์ €์žฅํ•ด๋‘๊ณ  ๋น ๋ฅด๊ฒŒ ๋ณด์—ฌ์ฃผ๋Š” ๊ธฐ์ˆ ์ด์—์š”.
    ์˜ˆ๋ฅผ ๋“ค์–ด, ์—ฌ๋Ÿฌ๋ถ„์ด ์ž์ฃผ ๋ณด๋Š” ์›น์‚ฌ์ดํŠธ๋ฅผ ๋ฏธ๋ฆฌ ์ €์žฅํ•ด๋‘๊ณ  ๋‹ค์Œ์— ์—ด ๋•Œ ๋” ๋น ๋ฅด๊ฒŒ ๋ณด์—ฌ์ฃผ๋Š” ๊ฑฐ์ฃ .
  • Revalidate(๋ฆฌ๋ฐธ๋ฆฌ๋ฐ์ดํŠธ):
    ์ €์žฅ๋œ ์บ์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒˆ๋กญ๊ฒŒ ๊ฐฑ์‹ (์žฌ๊ฒ€์ฆ)ํ•˜๋Š” ์ž‘์—…์ด์—์š”.
    ๋ฐ์ดํ„ฐ๋ฅผ ํ•ญ์ƒ ์ตœ์‹  ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜๋ฉด์„œ๋„, ์†๋„์™€ ์„ฑ๋Šฅ์„ ์œ ์ง€ํ•˜๊ฒŒ ๋„์™€์ค˜์š”.

 

๐Ÿ” ํ–„๋ฒ„๊ฑฐ ๊ฐ€๊ฒŒ ์ด์•ผ๊ธฐ๋กœ ์ดํ•ดํ•˜๊ธฐ

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

  • ์บ์‹œ๋Š” ํ–„๋ฒ„๊ฑฐ๋ฅผ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด์„œ ๋ณด๊ด€ํ•˜๋Š” ๊ฑฐ์˜ˆ์š”.
    ์†๋‹˜์ด ์˜ค๋ฉด ๋ฐ”๋กœ ๊บผ๋‚ด์„œ ์ค„ ์ˆ˜ ์žˆ์–ด์„œ ์—„์ฒญ ๋น ๋ฅด๊ฒŒ ์„œ๋น„์Šคํ•  ์ˆ˜ ์žˆ์–ด์š”.
  • ํ•˜์ง€๋งŒ ํ–„๋ฒ„๊ฑฐ๋ฅผ ๋„ˆ๋ฌด ์˜ค๋ž˜ ๋‘๋ฉด ์‹ ์„ ๋„๊ฐ€ ๋–จ์–ด์ง€๊ฒ ์ฃ ?
    ๊ทธ๋ž˜์„œ ๊ฐ€๋” **ํ–„๋ฒ„๊ฑฐ๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์„œ ๊ต์ฒด(๋ฆฌ๋ฐธ๋ฆฌ๋ฐ์ดํŠธ)**ํ•ด์•ผ ํ•ด์š”.
    ์ด๊ฒŒ ๋ฐ”๋กœ **revalidate**์˜ˆ์š”.

ํ–„๋ฒ„๊ฑฐ๋ฅผ ๊ณ„์† ์ƒˆ๋กœ ๋งŒ๋“ค๋ฉด(์ตœ์‹  ๋ฐ์ดํ„ฐ ์œ ์ง€) ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ณ ,
๋„ˆ๋ฌด ์˜ค๋ž˜ ๋ณด๊ด€ํ•˜๋ฉด(์บ์‹œ๋งŒ ์‚ฌ์šฉ) ์†๋‹˜์ด ๋ง›์ด ์—†๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ์œผ๋‹ˆ๊นŒ,
์ ์ ˆํ•œ ์ฃผ๊ธฐ์— ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์„œ ๋น ๋ฅธ ์„œ๋น„์Šค์™€ ์‹ ์„ ๋„๋ฅผ ๋ชจ๋‘ ์œ ์ง€ํ•˜๋Š” ๊ฒŒ ์ค‘์š”ํ•ด์š”!

 

๐Ÿ› ๏ธ Next.js์—์„œ cache์™€ revalidate ์‚ฌ์šฉํ•˜๊ธฐ

Next.js 14์—์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹œ์— ์ €์žฅํ•˜๊ณ , ์ผ์ • ์‹œ๊ฐ„ ํ›„์— ์žฌ๊ฒ€์ฆ(revalidate) ํ•  ์ˆ˜ ์žˆ์–ด์š”.
๊ทธ๋Ÿผ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ์‚ดํŽด๋ณผ๊ฒŒ์š”!

 

1. API ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ ์บ์‹œ์™€ ๋ฆฌ๋ฐธ๋ฆฌ๋ฐ์ดํŠธ ์„ค์ •ํ•˜๊ธฐ

app/page.js:

import React from 'react';

export default async function Page() {
  // fetch ํ•จ์ˆ˜์— 'revalidate' ์˜ต์…˜ ์ถ”๊ฐ€
  const response = await fetch('https://api.example.com/posts', {
    next: { revalidate: 10 }, // 10์ดˆ๋งˆ๋‹ค ์บ์‹œ๋ฅผ ์ƒˆ๋กœ ๊ณ ์นจ
  });

  const posts = await response.json();

  return (
    <div>
      <h1>๋ธ”๋กœ๊ทธ ๊ธ€ ๋ชฉ๋ก</h1>
      <ul>
        {posts.map((post) => (
          <li key={post.id}>{post.title}</li>
        ))}
      </ul>
    </div>
  );
}

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

  1. ์บ์‹œ ์„ค์ •
    • fetch ํ•จ์ˆ˜์˜ next: { revalidate: 10 } ๋ถ€๋ถ„์ด ํ•ต์‹ฌ์ด์—์š”.
    • ์—ฌ๊ธฐ์„œ 10์€ 10์ดˆ๋งˆ๋‹ค ๋ฐ์ดํ„ฐ๋ฅผ ์ƒˆ๋กœ ๊ฐ€์ ธ์˜ค๋ผ๋Š” ๋œป์ด์—์š”.
    • ๊ฒฐ๊ณผ:
      • ์ฒซ ๋ฒˆ์งธ ์š”์ฒญ: ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€์„œ ์บ์‹œ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
      • ์ดํ›„ 10์ดˆ ๋™์•ˆ์€ ์บ์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋น ๋ฅด๊ฒŒ ํ™”๋ฉด์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
      • 10์ดˆ๊ฐ€ ์ง€๋‚˜๋ฉด ์บ์‹œ๋ฅผ ์ƒˆ๋กœ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค(๋ฆฌ๋ฐธ๋ฆฌ๋ฐ์ดํŠธ).
  2. ๋น ๋ฅธ ๋กœ๋”ฉ๊ณผ ์ตœ์‹  ๋ฐ์ดํ„ฐ ์œ ์ง€
    • ์‚ฌ์šฉ์ž๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ๋ณผ ์ˆ˜ ์žˆ๊ณ ,
    • ์ผ์ • ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ์ตœ์‹  ์ƒํƒœ๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

 

๐Ÿš€ Revalidate๋ฅผ ์™œ ์‚ฌ์šฉํ• ๊นŒ์š”?

  • ์„ฑ๋Šฅ ํ–ฅ์ƒ
    • ์„œ๋ฒ„์— ๋งค๋ฒˆ ์š”์ฒญํ•˜๋Š” ๋Œ€์‹ , ์บ์‹œ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋‹ˆ๊นŒ ๋กœ๋”ฉ์ด ๋น ๋ฆ…๋‹ˆ๋‹ค.
  • ์ตœ์‹  ๋ฐ์ดํ„ฐ ์œ ์ง€
    • ์ผ์ • ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ์ƒˆ๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์‹  ์ •๋ณด๋ฅผ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ์–ด์š”.
  • ์œ ์—ฐํ•œ ์„ค์ •
    • revalidate ๊ฐ’(์ดˆ)์„ ์กฐ์ ˆํ•ด์„œ ์–ผ๋งˆ๋‚˜ ์ž์ฃผ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒˆ๋กœ ๊ฐ€์ ธ์˜ฌ์ง€ ์ •ํ•  ์ˆ˜ ์žˆ์–ด์š”.

 

โณ ์บ์‹œ vs ๋ฆฌ๋ฐธ๋ฆฌ๋ฐ์ดํŠธ ๊ฐ„๋‹จ ๋น„๊ต

๊ฐœ๋…์„ค๋ช…

์บ์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ด์„œ ๋น ๋ฅด๊ฒŒ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
Revalidate ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ผ์ • ์‹œ๊ฐ„ ํ›„์— ์ƒˆ๋กœ ๊ณ ์นฉ๋‹ˆ๋‹ค.

 

๐Ÿงฉ ์‹ค์ „ ์˜ˆ์ œ: ๋ธ”๋กœ๊ทธ ํŽ˜์ด์ง€

์˜ˆ๋ฅผ ๋“ค์–ด, ์—ฌ๋Ÿฌ๋ถ„์ด ๋ธ”๋กœ๊ทธ ์‚ฌ์ดํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  ์žˆ์–ด์š”.

  • ๋ธ”๋กœ๊ทธ ๊ธ€์€ ์ž์ฃผ ๋ฐ”๋€Œ์ง€๋งŒ ๋งค์ดˆ๋งˆ๋‹ค ๋ฐ”๋€Œ์ง„ ์•Š๊ฒ ์ฃ ?
  • ์ด๋Ÿด ๋•Œ **revalidate**๋ฅผ ์‚ฌ์šฉํ•ด์„œ 30์ดˆ๋งˆ๋‹ค ๋ฐ์ดํ„ฐ๋ฅผ ์ƒˆ๋กœ ๊ณ ์น  ์ˆ˜ ์žˆ์–ด์š”.
const response = await fetch('https://api.example.com/posts', {
  next: { revalidate: 30 }, // 30์ดˆ๋งˆ๋‹ค ์บ์‹œ ๊ฐฑ์‹ 
});

์ด๋ ‡๊ฒŒ ์„ค์ •ํ•˜๋ฉด:

  1. ์‚ฌ์šฉ์ž๊ฐ€ ํŽ˜์ด์ง€๋ฅผ ์—ด ๋•Œ ๋น ๋ฅด๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ ,
  2. 30์ดˆ๋งˆ๋‹ค ๋ฐ์ดํ„ฐ๋ฅผ ์ƒˆ๋กœ ๊ฐ€์ ธ์˜ค๋‹ˆ๊นŒ ์ตœ์‹  ๋ฐ์ดํ„ฐ๋„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์–ด์š”.

 

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

revalidate๋Š” ์บ์‹œ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ผ์ • ์‹œ๊ฐ„ ํ›„์— ์ƒˆ๋กœ ๊ฐฑ์‹ ํ•ด์„œ, ๋น ๋ฅธ ๋กœ๋”ฉ๊ณผ ์ตœ์‹  ๋ฐ์ดํ„ฐ๋ฅผ ๋™์‹œ์— ์œ ์ง€ํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์ด์—์š”.

728x90
๋ฐ˜์‘ํ˜•
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
ยซ   2025/01   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
๊ธ€ ๋ณด๊ด€ํ•จ
๋ฐ˜์‘ํ˜•
250x250