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๋ก ์ค์ ์ด ๋์๋์ง๋ ๋น๋ ์์๋ ํ์ธํ ์ ์๋ค.
'๐ Studying > ๐ TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TypeScript] CRA์์ tsconfig ์ ๋๊ฒฝ๋ก ์ง์ ํ๊ธฐ (0) | 2023.02.03 |
---|---|
ํฌ๋๋ฆฌ์คํธ Recoil๋ก ๋ฆฌํฉํ ๋ง (0) | 2023.02.02 |
[Next.js] Next.js ๊ธฐ๋ณธ ๊ฐ๋ (0) | 2023.01.31 |
[TypeScript] ๊ฒ์ ๊ธฐ๋ฅ ๊ตฌํํ๊ธฐ (0) | 2023.01.27 |
[TypeScript] redux-toolkit๊ณผ redux-thunk ๊ฐ์ด ์ฌ์ฉํ๊ธฐ (0) | 2023.01.26 |
Comment