[Next.js] Next.jsμ SSG, ISR
Today, What I learned?
Next.jsμμ SSGμ ISR λ°©μμΌλ‘ νμ΄μ§λ₯Ό μ΄λ»κ² μμ±νκ³ λμ μΌλ‘ λΌμ°ν
ν μ μμμ§ μ λ¦¬ν΄ λ³Έλ€.
CSRκ³Ό SSRμ κ°λ
μ κ·Έλλ λ€μ΄λ΄€μ§λ§, SSGμ ISRμ΄λΌλ κ°λ
μ μ²μ μ νλ€!..
λ¨Όμ SSGμ ISRμ λν΄ μ λ¦½ν΄ λμ΄μΌ νμ€ν μ΄ν΄λ₯Ό ν μ μμ κ² κ°λ€.
SSG(Static Side Generation)
SSGλ μ΄λ¦ κ·Έλλ‘, μ μ νμ΄μ§λ₯Ό μμ±νλ κ²μ΄λ€.
λΉλνλ μκ° μλ²μμ νμ΄μ§λ₯Ό λ λλ§ νλ€. νμ΄μ§ μμ²μ΄ λ€μ΄μμ λ μ΄λ―Έ λ λλ§ λ μ μ νμ΄μ§λ₯Ό λ°ννλ€.
νμ΄μ§μ ꡬμ±λ λ°μ΄ν°λ€μ΄ λ³νμ§ μλ κ²½μ°μ μ μ©νλ€.
λ°λλ‘, νμ΄μ§κ° μ λ°μ΄νΈλλ€λ©΄ κ·Έλλ§λ€ λ€μ λΉλκ° νμνλ€λ μ μ΄ μλ€.
getStaticProps()
λ₯Ό μ΄μ©νμ¬ SSGλ₯Ό ꡬμ±ν μ μλ€.
export async function getStaticProps(context) {
return {
props: { post: {} },
}
}
getStaticPaths()
λ₯Ό μ΄μ©νλ€λ©΄ λ€μ΄λ΄λ―Ή λΌμ°νΈλ₯Ό ꡬμ±ν μ μλ€.
μ΄ ν¨μλ getStaticProps
μ ν μμΌλ‘ μ¬μ©μ΄ λλλ°, κ²°κ΄κ°μ΄ getStaticProps
μ props
λ‘ μ λ¬μ΄ λλ€.
export async function getStaticPaths() {
return {
paths: [ // λμ μΈ νμ΄μ§λ€
{ params: { id: '1' } }, // κ° νλ§λ¦¬ν°
{ params: { id: '2' } },
{ params: { id: '3' } }
],
fallback: false, // μ 곡λμ§ μλ νμ΄μ§μ λν μ²λ¦¬
};
}
- pathsμ λΌμ°ν κ²½λ‘λ₯Ό 미리 μ 곡ν΄μ μ΄λ€ νμ΄μ§λ€μ μ μ μΌλ‘ 미리 μμ±ν΄ λμ§ μ ν΄λ μ μλ€.
- fallback κ°μ λ°λΌμ μ 곡νμ§ μλ νμ΄μ§μ λν μ²λ¦¬λ₯Ό μ§μ ν μ μλ€.
- false : μ 곡νμ§ μλ νμ΄μ§μΌ κ²½μ° 404 μλ¬ μ²λ¦¬
- true : μ 곡νμ§ μλ νμ΄μ§μΌ κ²½μ° μ§μ ν fallback νμ΄μ§λ₯Ό 보μ¬μ£Όκ³ , μ 곡λμ΄μΌ ν νμ΄μ§λ₯Ό μλ²μμ μμ±νμ¬ λ³΄μ¬μ€λ€.
- μ 곡λμ§ μλ /55 -> isLoading... -> μμ±λ /55 νμ΄μ§ λ‘λ μλ£
- 'blocking' : μλ΅μ blocking νλ€κ° μλ²μμ μλ΅μ λν νμ΄μ§λ₯Ό μμ±ν ν 보μ¬μ€λ€. (SSRκ³Ό λμΌνκ² μ μ©λλ€!)
ISR(Incremental Static Regeneration)
ISRμ μΌμ μ£ΌκΈ°λ§λ€ λ°μ΄ν°μ μ΅μ μ¬λ³΄λ₯Ό κ²μ¬ν΄μ μ
λ°μ΄νΈλ λ°μ΄ν°λ‘ λ€μ νμ΄μ§λ₯Ό μμ±νλ€.
μ½ν
μΈ κ° μ
λ°μ΄νΈλμμ λ μ
λ°μ΄νΈ λ μ 보λ₯Ό 보μ¬μ€ μ μλ€λ SSGμ λ¨μ μ 보μνκΈ° μν μμ± λ°©μμ΄λ€.
ISRμ μ€μ νλ λ°©λ²μ getStatticProps
μ revalidate
μμ±λ§ μΆκ°νλ©΄ λλ€.
μλμ κ²½μ°λ static page μμ² 5μ΄ ν λ€μ νλ² νμ΄μ§λ₯Ό λΉλνλ€λ μκΈ°!..
export async function getStaticProps(context) {
const { id } = context.params;
const response = await fetch(`http://localhost:3001/posts/${id}`);
const post = await response.json();
return {
props: {
post,
},
revalidate: 5, // 5μ΄ ν λ€μ μλ²μμ λ°μμ΄
};
}
ISRλ‘ μ€μ μ΄ λμλμ§λ λΉλ μμλ νμΈν μ μλ€.