ํ ์ ํฌ๊ธฐ๋ก ์๋ผ๋จน๋ Next.js ํ์ต์ ๋ฆฌ์ฉ์ ๋๋ค.
2.21) ํ์ด์ง ๋ผ์ฐํฐ ์ ๋ฆฌ
Page router ์ฅ์
1. ํ์ผ ์์คํ ๊ธฐ๋ฐ์ ๊ฐํธํ ํ์ด์ง ๋ผ์ฐํ ์ ๊ณต
- pages ํด๋์ ๊ตฌ์กฐ ๊ธฐ๋ฐ ๋ผ์ฐํ
- ๋์ ๊ฒฝ๋ก
- Catch All Segment
- Optional Catch All Segment
2. ๋ค์ํ ๋ฐฉ์์ ์ฌ์ ๋ ๋๋ง ์ ๊ณต
- SSR : ์์ฒญ์ ๋ฐ์ ๋๋ง๋ค ๋งค๋ฒ ์๋กญ๊ฒ ํ์ด์ง ์์ฑ -> ํญ์ ์ต์ ๋ฐ์ดํฐ ๋ณด์ฅ
- SSG : ๋น๋ํ์์ ํ์ด์ง ์์ฑ
- ISR : revalidate๋ฅผ ํตํ ํ์ด์ง ์ฌ์์ฑ
- On-Demand ISR : ํ์ด์ง ์ฌ์์ฑ ํธ๋ฆฌ๊ฑฐ
Page router ๋จ์
1. ํ์ด์ง๋ณ ๋ ์ด์์ ์ค์ ์ด ๋ฒ๊ฑฐ๋กญ๋ค.
type NextPageWithLayout = NextPage & {
getLayout?: (page: ReactNode) => ReactNode;
};
export default function App({
Component,
pageProps,
}: AppProps & { Component: NextPageWithLayout }) {
const getLayout = Component.getLayout ?? ((page: ReactNode) => page);
return <GlobalLayout>{getLayout(<Component {...pageProps} />)}</GlobalLayout>;
}
- ๋ ์ด์์์ ์ ์ฉํ๋ ๊ณผ์ ์ด ๋ณต์กํ๊ณ , ๋ ์ด์์์ด ์ ์ฉ๋๊ธธ ์ํ๋ ํ์ด์ง๋ง๋ค ์ค์ ํด์ฃผ์ด์ผ ํ๋ค.
2. ๋ฐ์ดํฐ ํ์นญ์ด ํ์ด์ง ์ปดํฌ๋ํธ์ ์ง์ค๋๋ค.
export const getStaticProps = async () => {
const [allBooks, recoBooks] = await Promise.all([
fetchBooks(),
fetchRandomBooks(),
]);
return {
props: { allBooks, recoBooks },
};
};
export default function Home({
allBooks,
recoBooks,
}: InferGetStaticPropsType<typeof getStaticProps>) {
...
- ๋ฐ์ดํฐ๋ฅผ ์ปดํฌ๋ํธ์๊ฒ props์ ํํ๋ก ์ ๋ฌํด์ค์ผ ํ์๋๋ฐ, ๋ง์ด ์์ ์ปดํฌ๋ํธ๊ฐ ๋ฐฉ๋ํ๋ค๋ฉด ์ด props๋ฅผ ๋ชจ๋ ์ ๋ฌํด์ฃผ์ด์ผ ํ๋ค.
3. ๋ถํ์ํ ์ปดํฌ๋ํธ๋ค๋ JS Bundle์ ํฌํจ๋๋ค.
- ๋ถํ์ํ ์ปดํฌ๋ํธ๋ค์ด๋, ์ํธ์์ฉ์ด ํ์์๋ ์ปดํฌ๋ํธ๋ฅผ ์๋ฏธํ๋ค.
- ์ด๋ฏธ ์ฌ์ ๋ ๋๋ง์ ํตํด ์์ฑ๋ ์ปดํฌ๋ํธ๋ค์ค ์ํธ์์ฉ์ด ํ์์๋ ์ปดํฌ๋ํธ๋ค์ ํ์์ผ๋ก ๋ฐ๊ฒ๋ JS Bundle์ ํฌํจ๋ ํ์๊ฐ ์๋ค.
- ๋ฐ๋ผ์ ๊ทธ๋ฌํ ์ปดํฌ๋ํธ๋ค์ด ๋ฒ๋ค์ ์ถ๊ฐ๋๋ฉด์ Bundle์ ์ฉ๋์ด ๋ถํ์ํ๊ฒ ์ปค์ง๋ฉฐ, ํ์ด๋๋ ์ด์ ์ด ์๋ฃ๋๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ๋ ์ค๋๊ฑธ๋ฆฐ๋ค.
'FE > Next.js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Next.js] App Router - ๋ ์ด์์ (0) | 2025.05.06 |
---|---|
[Next.js] App Router - ํ์ด์ง ๋ผ์ฐํ (0) | 2025.05.06 |
[Next.js] Page Router - ISR (4) | 2025.05.06 |
[Next.js] page router - SSG(์ ์ ์ฌ์ดํธ ์์ฑ) (1) | 2025.05.06 |
[Next.js] page router - SSR (3) | 2025.05.05 |