ํฐ์คํ ๋ฆฌ ๋ทฐ
๐ฏ 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>
);
}
๐ ์ฝ๋ ์ค๋ช
- ์บ์ ์ค์
- fetch ํจ์์ next: { revalidate: 10 } ๋ถ๋ถ์ด ํต์ฌ์ด์์.
- ์ฌ๊ธฐ์ 10์ 10์ด๋ง๋ค ๋ฐ์ดํฐ๋ฅผ ์๋ก ๊ฐ์ ธ์ค๋ผ๋ ๋ป์ด์์.
- ๊ฒฐ๊ณผ:
- ์ฒซ ๋ฒ์งธ ์์ฒญ: ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ ์บ์์ ์ ์ฅํฉ๋๋ค.
- ์ดํ 10์ด ๋์์ ์บ์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํด์ ๋น ๋ฅด๊ฒ ํ๋ฉด์ ๋ณด์ฌ์ค๋๋ค.
- 10์ด๊ฐ ์ง๋๋ฉด ์บ์๋ฅผ ์๋ก ์ ๋ฐ์ดํธํฉ๋๋ค(๋ฆฌ๋ฐธ๋ฆฌ๋ฐ์ดํธ).
- ๋น ๋ฅธ ๋ก๋ฉ๊ณผ ์ต์ ๋ฐ์ดํฐ ์ ์ง
- ์ฌ์ฉ์๋ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ๋ณผ ์ ์๊ณ ,
- ์ผ์ ์๊ฐ์ด ์ง๋๋ฉด ๋ฐ์ดํฐ๊ฐ ์ต์ ์ํ๋ก ์ ์ง๋ฉ๋๋ค.
๐ Revalidate๋ฅผ ์ ์ฌ์ฉํ ๊น์?
- ์ฑ๋ฅ ํฅ์
- ์๋ฒ์ ๋งค๋ฒ ์์ฒญํ๋ ๋์ , ์บ์์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋๊น ๋ก๋ฉ์ด ๋น ๋ฆ ๋๋ค.
- ์ต์ ๋ฐ์ดํฐ ์ ์ง
- ์ผ์ ์๊ฐ์ด ์ง๋๋ฉด ๋ฐ์ดํฐ๋ฅผ ์๋ก ๊ฐ์ ธ์ค๊ธฐ ๋๋ฌธ์ ์ต์ ์ ๋ณด๋ฅผ ๋ณด์ฌ์ค ์ ์์ด์.
- ์ ์ฐํ ์ค์
- revalidate ๊ฐ(์ด)์ ์กฐ์ ํด์ ์ผ๋ง๋ ์์ฃผ ๋ฐ์ดํฐ๋ฅผ ์๋ก ๊ฐ์ ธ์ฌ์ง ์ ํ ์ ์์ด์.
โณ ์บ์ vs ๋ฆฌ๋ฐธ๋ฆฌ๋ฐ์ดํธ ๊ฐ๋จ ๋น๊ต
๊ฐ๋ ์ค๋ช
์บ์ | ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํด์ ๋น ๋ฅด๊ฒ ๋ณด์ฌ์ค๋๋ค. |
Revalidate | ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์ผ์ ์๊ฐ ํ์ ์๋ก ๊ณ ์นฉ๋๋ค. |
๐งฉ ์ค์ ์์ : ๋ธ๋ก๊ทธ ํ์ด์ง
์๋ฅผ ๋ค์ด, ์ฌ๋ฌ๋ถ์ด ๋ธ๋ก๊ทธ ์ฌ์ดํธ๋ฅผ ๋ง๋ค๊ณ ์์ด์.
- ๋ธ๋ก๊ทธ ๊ธ์ ์์ฃผ ๋ฐ๋์ง๋ง ๋งค์ด๋ง๋ค ๋ฐ๋์ง ์๊ฒ ์ฃ ?
- ์ด๋ด ๋ **revalidate**๋ฅผ ์ฌ์ฉํด์ 30์ด๋ง๋ค ๋ฐ์ดํฐ๋ฅผ ์๋ก ๊ณ ์น ์ ์์ด์.
const response = await fetch('https://api.example.com/posts', {
next: { revalidate: 30 }, // 30์ด๋ง๋ค ์บ์ ๊ฐฑ์
});
์ด๋ ๊ฒ ์ค์ ํ๋ฉด:
- ์ฌ์ฉ์๊ฐ ํ์ด์ง๋ฅผ ์ด ๋ ๋น ๋ฅด๊ฒ ๋ฐ์ดํฐ๋ฅผ ๋ณด์ฌ์ฃผ๊ณ ,
- 30์ด๋ง๋ค ๋ฐ์ดํฐ๋ฅผ ์๋ก ๊ฐ์ ธ์ค๋๊น ์ต์ ๋ฐ์ดํฐ๋ ์ ์งํ ์ ์์ด์.
๐ ํ ์ค ์์ฝ
revalidate๋ ์บ์๋ ๋ฐ์ดํฐ๋ฅผ ์ผ์ ์๊ฐ ํ์ ์๋ก ๊ฐฑ์ ํด์, ๋น ๋ฅธ ๋ก๋ฉ๊ณผ ์ต์ ๋ฐ์ดํฐ๋ฅผ ๋์์ ์ ์งํ๊ฒ ํด์ฃผ๋ ๊ธฐ๋ฅ์ด์์.
- Total
- Today
- Yesterday
- useformstatus
- useid
- state
- usedeferredvalue
- experimental
- ์ต์ ๋ฐ์ดํฐ
- ์ธ๋ถํฐํธ
- dns-prefetch
- finddomnode
- ๋ฒ ํ
- react dom
- flushsync
- zustand
- ์คํ์
- react hook
- Nextjs
- Store
- Props
- prefetchdns
- react dom hook
- component
- useinsertioneffect
- ์ ์ฅ์
- useRef
- preconnect
- ์ํ๊ด๋ฆฌ
- experimental_taintobjectreference
- react
- ๋ฐ์ดํฐ์ ์ง
- experimental_taintuniquevalue
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |