ํ ์ ํฌ๊ธฐ๋ก ์๋ผ๋จน๋ Next.js ํ์ต์ ๋ฆฌ์ฉ์ ๋๋ค.
2.17) ISR 1. ์๊ฐ ๋ฐ ์ค์ต
2.18) ISR 2. ์ฃผ๋ฌธํ ์ฌ ๊ฒ์ฆ
2.17 ISR 1. ์๊ฐ ๋ฐ ์ค์ต
ISR์ด๋?
ISR (Incremental Static Regeneration : ์ฆ๋ถ ์ ์ ์ฌ์์ฑ)
SSG ๋ฐฉ์์ผ๋ก ์์ฑ๋ ์ ์ ํ์ด์ง๋ฅผ ์ผ์ ์๊ฐ์ ์ฃผ๊ธฐ๋ก ๋ค์ ์์ฑํ๋ ๊ธฐ์
๊ธฐ์กด SSG ๋ฐฉ์์์๋ ๋น๋ ํ์์ ๋ฏธ๋ฆฌ ์์ฑํ ํ์ด์ง๊ฐ ์ด ์๊ฐ ์ดํ์๋ ๋ค์ ์์ฑ๋์ง ์๊ธฐ ๋๋ฌธ์ ํ์ด์ง๋ฅผ ๋ค์ ์์ฒญํด๋ ๋์ผํ ํ์ด์ง๋ง ๊ณ์ ๋ฐํ๋์๋๋ฐ, ISR ๋ฐฉ์์ผ๋ก ํ์ด์ง๋ฅผ ๋ค์ ์์ฑํจ์ผ๋ก์จ ์๋ก์ด ์์ฒญ์ด ๋ฐ์ํ์ ๋ ์๋ก ์์ฑ๋ ํ์ด์ง๋ฅผ ๋ณด์ฌ์ค ์ ์๋ค.
ISR์ ์ฅ์
1. ๋ฏธ๋ฆฌ ์์ฑํด๋ ์ ์ ํ์ด์ง๋ฅผ ์๋ตํ๊ธฐ ๋๋ฌธ์ ๋งค์ฐ ๋น ๋ฅธ ์๋๋ก ๋์ํ๋ค. (SSG์ ์ฅ์ )
2. ํน์ ์๊ฐ์ ์ฃผ๊ธฐ๋ก ํ์ด์ง๋ฅผ ๋ค์ ์์ฑํด์ ์ต์ ๋ฐ์ดํฐ๊น์ง ํจ๊ป ๋ฐ์ํ ์ ์๋ค. (SSR์ ์ฅ์ )
ISR ์ค์ ๋ฐฉ๋ฒ
export const getStaticProps = async () => {
console.log("์ธ๋ฑ์ค ํ์ด์ง");
const [allBooks, recoBooks] = await Promise.all([
fetchBooks(),
fetchRandomBooks(),
]);
return {
props: { allBooks, recoBooks },
revalidate: 3, // ์ถ๊ฐ๋ ๋ถ๋ถ (์ด ์ค์ )
};
};
์ ์ฉํ ํ์ด์ง๋ index ํ์ด์ง ์ธ๋ฐ ์ฌ๊ธฐ์์ '์ง๊ธ ์ถ์ฒํ๋ ๋์' ๋ถ๋ถ์ ๋๋คํ๊ฒ 3๊ฐ์ ๋์๋ฅผ ๋ณด์ฌ์ฃผ๋ ํ์ด์ง์ด๋ค.
ISR์ ์ ์ฉํ๊ธฐ ์ ๊น์ง๋ ๋น๋ํ์์์ ์์ฑ๋ ํ์ด์ง๋ง ๋ณด์ด๊ธฐ ๋๋ฌธ์ ์๋ก๊ณ ์นจ์ ํด๋ ๋์ผํ ํ๋ฉด์ด ๋ณด์๋๋ฐ,
ISR์ ์ ์ฉํ ์ดํ์๋ ์๋ก์ด ํ์ด์ง๊ฐ ์ ์ฉ๋์ด ๋ค๋ฅธ ์ถ์ฒ ๋์๋ค์ด ๋จ๋ ๊ฒ์ ํ์ธํ ์ ์์๋ค.
๊ฐ์์์๋ 3์ด์ revalidate๋ฅผ ์ค์ ํ์ง๋ง, ํ์ด์ง ์์ฑ์ ์ฃผ๊ธฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ช ํํ๊ฒ ํ์ธํ๊ธฐ ์ํด์ 60์ด๋ก ์ค์ ํ๊ณ ํ์ด์ง๋ฅผ ๋ค์ ๋น๋ํด๋ดค๋ค. 60์ด๊ฐ ๋๊ธฐ ์ ๊น์ง๋ ์๋ก๊ณ ์นจํด๋ ๋น๋ํ์์ ์์ฑ๋ ํ์ด์ง๊ฐ ๋ฐํ๋์์ง๋ง, 60์ด๊ฐ ์ง๋๊ณ 60์ด ์ฃผ๊ธฐ๋ก ์๋ก์ด ํ์ด์ง๊ฐ ์ฌ์์ฑ ๋๋ ๊ฒ์ ํ์ธํ ์ ์์๋ค.
2.18 ISR 2. ์ฃผ๋ฌธํ ์ฌ ๊ฒ์ฆ
ISR ๋ฐฉ์์ ์ ์ฉํ๊ธฐ ์ด๋ ค์ด ์ผ์ด์ค
์ฌ์ฉ์์ ํ๋์ ๊ธฐ๋ฐ์ผ๋ก ๋ฐ์ดํฐ๊ฐ ์ ๋ฐ์ดํธ ๋๋ ํ์ด์ง
์์ 1. revalidate๋ฅผ 60๋ถ์ผ๋ก ์ค์ ๋์ด ์๋ ํ์ด์ง์์ ์ ์ ๊ฐ 60๋ถ์ด ๋๊ธฐ ์ ์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ ๊ฒฝ์ฐ, ์์ง ์ฌ์์ฑ๋๋ ์๊ฐ์ธ 60๋ถ์ด ๋๊ธฐ ์ ์ด๊ธฐ ๋๋ฌธ์ ์์ ํ ๋ด์ฉ์ ํ์ด์ง์ ๋ฐํํ ์ ์๋ค.
์์ 2. revalidate๋ฅผ 60์ด๋ก ์ค์ ๋์ด ์๋ ํ์ด์ง์์ ์ ์ ๊ฐ ํ๋ฃจ ๋ค์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋ค๋ฉด, ์์ ๋ ๋ด์ฉ์ด ์๋๋ฐ๋ ํ์ด์ง๋ 60์ด๋ง๋ค ๋ถํ์ํ๊ฒ ์ฌ์์ฑ๋๋ค.
On-Demand ISR
์์ฒญ์ ๋ฐ์ ๋๋ง๋ค ํ์ด์ง๋ฅผ ๋ค์ ์์ฑํ๋ ISR
On-Demand ISR์ ํ์ฉํ๋ฉด ์๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก ๋ถํ์ํ๊ฑฐ๋ ๋๋ ๋๋ฌด ๋ฆ๊ฒ ํ์ด์ง๋ฅผ ์ฌ์์ฑํ๋ ์ผ์ด์ค๋ค์ ์ ๊ฑฐ๋๊ณ ์ค์ ๋ก ์ ์ ๊ฐ ๊ฒ์๊ธ์ ์์ ํด์ ํ์ด์ง์ ์ ๋ฐ์ดํธ๊ฐ ํ์ํด์ก์ ๋ revalidate ์์ฒญ์ ๋ณด๋ด์ ํ์ด์ง๋ฅผ ์ฌ์์ฑ ํ ์ ์๋ค.
์ฆ, ํ์ด์ง์ ์ ๋ฐ์ดํธ๋ฅผ ์ง์ ํธ๋ฆฌ๊ฑฐ ํ ์ ์๋ค๋ ๋ป์ด๋ค.
revalidate trigger API
๊ธฐ์กด์ index์ ์ ์ฉํ๋ revalidate๋ฅผ ์ ๊ฑฐํ๊ณ , ์๋ API๋ฅผ ์์ฑํจ์ผ๋ก์จ On-Demand ISR์ ์ํํ ์ ์๋ค.
import { NextApiRequest, NextApiResponse } from "next";
export default async function handler(
req: NextApiRequest,
res: NextApiResponse
) {
try {
await res.revalidate("/");
return res.json({ revalidated: true });
} catch {
res.status(500).send("Revalidation failed");
}
}
๋น๋ํ๊ณ ํ์ด์ง๋ฅผ ์์ฒญํ๊ณ ์๋ก๊ณ ์นจ์ ํด๋ ๋น๋ํ์์ ๋ง๋ค์ด์ง ํ์ด์ง๊ฐ ๋์ผํ๊ฒ ๋ณด์ธ๋ค.
localhost:3000/api/revalidate ๋ก api ์์ฒญ์ ๋ณด๋ด๊ณ ๋ค์ ํ์ด์ง๋ฅผ ์๋ก๊ณ ์นจํ๋ฉด ์๋ก์ด ์ถ์ฒ๋์๊ฐ ๋ณด์ด๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
'FE > Next.js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Next.js] App Router - ํ์ด์ง ๋ผ์ฐํ (0) | 2025.05.06 |
---|---|
[Next.js] Page Router ์ฅ๋จ์ (0) | 2025.05.06 |
[Next.js] page router - SSG(์ ์ ์ฌ์ดํธ ์์ฑ) (1) | 2025.05.06 |
[Next.js] page router - SSR (3) | 2025.05.05 |
[Next.js] page router ์ฌ์ ๋ ๋๋ง๊ณผ ๋ฐ์ดํฐํ์นญ (0) | 2025.05.05 |