Pages

์๋ ๋ฌธ์๋ Next.js 9.3 ์ด์ ๋ฒ์ ์์ ์ ์ฉ๋ฉ๋๋ค.Pages
Next.js์์๋ pages ํด๋ ์๋์ ์๋ ํ์ผ์ ์ด๋ฆ์ผ๋ก ์๋์ผ๋ก ๋ผ์ฐํ ๋๋ค.
์๋ฅผ๋ค์ด pages/about.js์ ์๋์ ๊ฐ์ ๋ฆฌ์กํธ ์ปดํฌ๋ํธ๊ฐ ์์๋
์ฐ๋ฆฌ๋ ์ด ์ปดํฌ๋ํธ์ /about ๋ผ์ฐํ
์ผ๋ก ์ง์
ํ ์ ์๋ค. ์ด About ์ปดํฌ๋ํธ๋ ํ์ด์ง ์ปดํฌ๋ํธ๊ฐ ๋๋ค.
๋ค์ด๋๋ฏน ๋ผ์ฐํ
(Pages with Dynamic Routes)
๊ธฐ๋ณธ์ ์ผ๋ก Next.js๋ ๋ชจ๋ ํ์ด์ง๋ฅผ pre-rendersํ๋ค. ์ด๊ฒ์ ๊ฐ ํ์ด์ง์ ํด๋นํ๋ HTML์ ๋ฏธ๋ฆฌ ์์ฑํ๋ค๋ ๋ง์ด๋ค. ๋น ๊ป๋ฐ๊ธฐ HTML์ ๋ด๋ ค์ค ๋ค์ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๊ทธ ๊ป๋ฐ๊ธฐ ๋ด๋ถ๋ฅผ ๋ ๋๋งํ๋ ๋ฐฉ์๋ณด๋ค pre renderํ๋๊ฒ ์ด๊ธฐ ํ์ด์ง๊ฐ ๋ ๋นจ๋ฆฌ ๋จ๋ฉฐ ๊ฒ์์์ง๋ด์ด ๋ค์ด์์๋ ํ์ด์ง๋ฅผ ๋ฐ๋ฅด๊ฒ ์ฝ์ด๊ฐ ์ ์์ผ๋ฏ๋ก SEO์๋ ์ ํฉํ๋ค.
ํ์ด์ง HTML์๋ ์ต์ํ์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ง ๋ค์ด์๋ค. ํ์ด์ง๊ฐ ๋ธ๋ผ์ฐ์ ์ ๋ก๋๋ ํ์ ์ ์์์ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ํธ์ถ๋๊ณ ๋๋ฉด ํ์ด์ง๊ฐ ์ ์ ์ ์ํธ์์ฉ์ด ๊ฐ๋ฅํ ์ํ(interactive)๊ฐ ๋๋ค. ์ด๋ฌํ ํ๋ก์ธ์ค๋ฅผ hydration์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
hydration์ด๋? hydration์ด๋ผ๋ ๋ป์ ์ง์ญํ๋ฉด '์ํ'๋ผ๋ ๋ป์ด๋ค. ํ๋ก๊ทธ๋๋ฐ์ค๋ฝ๊ฒ ํด์์ ํด๋ณด์๋ฉด ์ด๋ค ์ ์ ์ธ ์ํ์๋๊ฒ์ด ๋ฌผ์ ๋ง์ ๋์ ์ธ ์ํ๋ก ๋ณ๊ฒฝ๋๋ค๊ณ ์๊ฐํ๋ฉด ๋ ๊ฒ ๊ฐ๋ค. Next.js๋ React.js์์์ hydration์ ์๋ฒ์ฌ์ด๋๋ ๋๋ง์ ์ํด Staticํ๊ฒ ๋ ๋๋ง๋ HTML์ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ๋ถ์ฌ์ ๋์ ์ธ ์ํ๋ก ๋ง๋๋ ๊ณผ์ ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
Pre-rendering์ ๋๊ฐ์ง ํํ
Next.js๋ ๋ค์ ๋๊ฐ์ง ํํ์ Pre-rendering์ ํ๋ค.
Static Generation(์ถ์ฒ๋จ): HTML์ด ๋น๋ ํ์์ ์์ฑ๋๊ณ ์ ์ ๊ฐ ํ์ด์ง๋ฅผ ์์ฒญํ ๋ ๊ณ์ ์ฌ์ฌ์ฉ ๋๋ค.Server-side Rendering(SSR): HTML์ด ์ ์ ๊ฐ ํ์ด์ง๋ฅผ ์์ฒญํ์๋ ์์ฑํ๋ค.
์ค์ํ๊ฒ์, ๋น์ ์ด ์ด๋ค ํํ์ Pre rendering์ ์ฌ์ฉํ ๊ฒ์ธ์ง Next.js๊ฐ ์ ํ๊ถ์ ์ ๊ณตํ๋ค๋ ๊ฒ์ด๋ค. ๋๋ถ๋ถ์ ํ์ด์ง์์ Static Generation์ ์ฌ์ฉํด์ ๋น ๋ฅด๊ฒ ๋ ๋๋งํ๊ณ ๋๋จธ์ง ์ผ๋ถ ํ์ด์ง์ ๋ํด์๋ SSR์ ํ๊ฒ ๋๋ ํ์ด๋ธ๋ฆฌ๋ ํํ์ ์ฑ์ ๋ง๋ค ์ ์๋ค.
๋ฌผ๋ก , Static Generation์ด๋ Server side rendering๊ณผ Client-side Rendering๋ ํจ๊ป ์ฌ์ฉํ ์ ์๋ค. ์ด๊ฒ์ ํ์ด์ง์ ์ผ๋ถ๋ถ์ด client์์ ์ฌ์ฉ๋๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ์ํด ๋ ๋๋ง ๋ ์ ์๋ค๋ ๋ง์ด๋ค. ์ด ๋ถ๋ถ์ ์ข ๋ ์์ธํ ๋ณด๊ณ ์ถ์ผ๋ฉด Data Fetching ๋ถ๋ถ์ ์ฝ์ด๋ณด๊ณ ์ค๋๊ฑธ ์ถ์ฒํ๋ค.
์๋ฒ์ฌ์ด๋๋ ๋๋ง๋ณด๋ค๋ Static Generation์ ์ข ๋ ์ถ์ฒํ๋ค. ์๋๋ฉด ์ฑ๋ฅ์ด ๋ ์ข๊ธฐ ๋๋ฌธ์ด๋ค. ์คํํฑํ๊ฒ ์์ฑ๋ ํ์ด์ง๋ CDN์ ์ํด ์บ์๊ฐ ๋ ์ ์๊ธฐ ๋๋ฌธ์ ๋น ๋ฅด๊ธฐ๋ ํ๊ณ ํธ๋ํฝ๋ ์ค์ผ ์ ์๋ค. ํ์ง๋ง ์๋ฒ์ฌ์ด๋๋ ๋๋ง์ ์ฌ์ฉํด์ผ๋ง ํ๋ ๊ฒฝ์ฐ๋ ์๋ค.
Static Generation, SSR, CSR ๋ชจ๋ ๋์์ ์ฌ์ฉ๋ ์ ์๋ค. CSR์ ๊ฒฝ์ฐ ํ์ด์ง์ ์ผ๋ถ๊ฐ ๋ธ๋ผ์ฐ์ ์์ ์คํ๋๋ ํด๋ผ์ด์ธํธ ์๋ฐ์คํฌ๋ฆฝํธ์ ์ํด ๋ ๋๋ง ๋๋ค๋๊ฒ์ด๋ค.
ํ์ด์ง๊ฐ Static Generation๋๋ฉด ํ๋ก์ ํธ๊ฐ ๋น๋๋ ๋ ๋ฏธ๋ฆฌ ํ์ด์ง๊ฐ ์์ฑ๋๋ค. next build๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ๋ฉด static HTML๋ค์ด ์์ฑ๋๋ค.
๋ฐ์ดํฐ ์์ด Static Generation
๊ธฐ๋ณธ์ ์ผ๋ก Next.js๋ ํ์ด์ง๋ฅผ SSR์ด ์๋๋ผ Staticํ๊ฒ ๋ ๋๋งํ๋ค. ๋ฌผ๋ก ์ด๋ ๋ฐ์ดํฐ๋ฅผ fetchingํ์ง๋ ์๋๋ค. ์์๋ฅผ ํ๋ ๋ณด์.
์ด About ํ์ด์ง ์ปดํฌ๋ํธ๋ ๊ทธ ์ด๋ค ๋ฐ์ดํฐ๋ ํ์๋ก ํ์ง ์๊ธฐ ๋๋ฌธ์ ๋น๋ ํ์์ ๋ฏธ๋ฆฌ HTML์ ์์ฑํด๋ ์ ์๋ค. Next.js๋ 1๊ฐ์ ํ์ด์ง ์ปดํฌ๋ํธ๋น 1๊ฐ์ HTML์ ์์ฑํ๋ค.
๋ฐ์ดํฐ์ ํจ๊ป Static Generation
์ด๋ค ํ์ด์ง๋ pre renderingํ๊ธฐ ์ํด์ ์ธ๋ถ ๋ฐ์ดํฐ๋ฅผ ํ์๋ก ํ ์ ์๋ค. ์๋ ๋๊ฐ์ง ๊ฒฝ์ฐ๋ฅผ ์ดํด๋ณด์.
๋น์ ์ ํ์ด์ง content๊ฐ ์ธ๋ถ ๋ฐ์ดํฐ์ ์์กดํ๋ ๊ฒฝ์ฐ. (
getStaticProps๋ฅผ ์ฌ์ฉํ๋ผ)๋น์ ์ ํ์ด์ง paths๊ฐ ์ธ๋ถ ๋ฐ์ดํฐ์ ์์กดํ๋ ๊ฒฝ์ฐ. (
getStaticPaths๋ฅผ ์ฌ์ฉํ๋ผ)
1. ํ์ด์ง content๊ฐ ์ธ๋ถ ๋ฐ์ดํฐ์ ์์กดํ๋ ๊ฒฝ์ฐ
๋น์ ์ ๋ธ๋ก๊ทธ๊ฐ ํฌ์คํ ๋ชฉ๋ก์ ๋ ๋๋งํ๊ธฐ ์ํด CMS(content management system)์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ผ ํ๋ ๊ฒฝ์ฐ
์ด๋ getStaticProps๋ฅผ ์ฌ์ฉํ๋ฉด ๋น๋ ํ์์ api๋ฅผ ํธ์ถํด์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์จ๋ค์์ HTML์ ๋ฏธ๋ฆฌ ์์ฑํด๋๋๋ค.
2. ํ์ด์ง paths๊ฐ ์ธ๋ถ ๋ฐ์ดํฐ์ ์์กดํ๋ ๊ฒฝ์ฐ
๋ธ๋ก๊ทธ์ ์์ฑ๋ ํฌ์คํธ๋ค์ id๋ฅผ ๊ฐ๊ณ ์๋ค. ๊ทผ๋ฐ Next.js๋ pagesํด๋ ์๋์ ์๋ ํ์ผ์ ์ด๋ฆ์ผ๋ก ๋ผ์ฐํ
๋๋ค๊ณ ํ์๋ค. ๊ทธ๋ผ ๋ชจ๋ ํฌ์คํธ์ id์ ๋ํด์ ํ์ผ์ ์์ฑํด์ผ ํ๋๊ณ ์๊ฐํ ์ ์์ง๋ง ๊ทธ๋ ์ง ์๋ค. dynamic routes์ ์ฌ์ฉํ๋ฉด ๋๋ค. ์ด ๋ค์ด๋๋ฏน ๋ผ์ฐํ
์ ์๋ฅผ๋ค์ด, pages/posts/[id].js์ ๊ฐ์ ํ์ผ์ด ์์๋ posts/1, posts/2 ...์ ๊ฐ์ด ๋ค์ํ ๊ฒฝ๋ก๊ฐ ๋ค์ด๊ฐ ์ ์๋ค.
posts/1๊ณผ ๊ฐ์ด ๋ผ์ฐํ
์ ํ๊ฒ ๋๋ฉด Next.js๋ ๊ทธ๋ ๋์ ์ผ๋ก 1๋ฒ ํ์ด์ง๋ฅผ ์์ฑํ๊ฒ ๋๋ค. ํ์ง๋ง ์ด ํฌ์คํธ์ id๋ ์ธ๋ถ ๋ฐ์ดํฐ(๋ฐ์ดํฐ๋ฒ ์ด์ค)์ ์์กดํ๊ธฐ ๋๋ฌธ์ ๋น๋ ํ์์ ๋ฏธ๋ฆฌ ์์ฑํด๋ ์๊ฐ ์๋ค. ์๋๋ฉด, ๋ธ๋ก๊ทธ์์ ์๋ก์ด ๊ธ์ ์์ฑํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ ๊ธ์ ๋ํด์๋ ์ ๊ทผ์ด ๊ฐ๋ฅํด์ผ ํ๋๋ฐ ๊ทธ๋ด๋๋ง๋ค ์ฌ๋น๋ํ ์๋ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ด๋ ๋ฏ ๋์ ์ผ๋ก ์์ฑ๋์ด์ผ ํ๋ ํ์ด์ง์ ๋ํด์๋ getStaticPaths๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค. ์ด ํจ์๋ ๋น๋ํ์์ ํธ์ถ๋๊ณ ์ด๋ค ๊ฒฝ๋ก๋ค์ ๋ํด์ ๋ฏธ๋ฆฌ ํ์ด์ง๋ฅผ ์์ฑํ ์ง ์ง์ ํ ์ ์๋ค.
fallback: false์ ์๋ฏธ๋ paths์ ํด๋นํ์ง ์๋ ํ์ด์ง์ ๋ํด์ 404๊ฐ ๋จ์ด์ง๋ค๋ ๋ง์ด๋ค. ์ ํจ์๋ฅผ ์์ฑํ๋ค์์ next build๋ฅผ ์
๋ ฅํ๋ฉด /posts/1, /posts/2 ์ ๊ฐ์ด ๋น๋ ์์ ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ค์ด์์๋ ํฌ์คํธ ๋ชฉ๋ก์ ๋ํด์ ๋ฏธ๋ฆฌ HTMLํ์ด์ง๋ฅผ ์์ฑํด๋ ์ ์๋ค.
๋ํ ์๋์ ๊ฐ์ด getStaticProps์ ํจ๊ป ์ฌ์ฉํ ์๋ ์๋ค.
pages/posts/[id].jsํ์ผ์์
์ธ์ Static Generation์ ์ฌ์ฉํด์ผ ํ๋์?
์ฌ๋งํ ๊ฒฝ์ฐ์ ๋ชจ๋ Static Generation์ ์ฌ์ฉํ๊ธธ ๊ถ์ฅํ๋ค. SSR๋ณด๋ค ํจ์ฌ ๋น ๋ฅด๊ธฐ ๋๋ฌธ์ด๋ค. ์๋ฅผ๋ค๋ฉด ์๋์ ๊ฐ์ด ๋์ ์ผ๋ก ๋ณํ์ง ์๋ ํ์ด์ง๋ค์ด Static Generation๋ ์ ์๋ค.
๋ง์ผํ ํ์ด์ง
๋ธ๋ก๊ทธ ํฌ์คํธ
์ด์ปค๋จธ์ค ์ํ ๋ฆฌ์คํธ
๋์๋ง
์ด๋ฐ ํ์ด์ง๋ค์ ํ๋ฒ๋ง ์์ฑํด๋๋ฉด ์ฌ์ฉํ๋๋์ ์์ฃผ ๋ณํ์ง ์๊ธฐ ๋๋ฌธ์ Static Generationํด๋๋ ๊ฒ์ด ์ข๋ค.
ํ๋จํ๊ธฐ ์ด๋ ต๋ค๋ฉด ์ค์ค๋ก์๊ฒ ์ง๋ฌธํด๋ด๋ผ. ๋ด๊ฐ ์ด ํ์ด์ง๋ฅผ ์ ์ ์ ์์ฒญ์ด ์๊ธฐ ์ ์ ๋ฏธ๋ฆฌ ์์ฑํ ์ ์์๊น? ๊ทธ๋ ๋ค๋ฉด Static Generation์ ์ฌ์ฉํ๋ผ.
Static Generation์ Client-side rendering๊ณผ ํจ๊ป ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
ํ์ด์ง์ ์ผ๋ถ๋ถ์ pre-renderingํ์ง ์๊ณ ํด๋ผ์ด์ธํธ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์์ฑํ ์ ์๋ค.
์๋ฒ์ฌ์ด๋๋ ๋๋ง์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
Next.js๋ ๋ชจ๋ ์์ฒญ์ ๋ํด์ ํ์ด์ง๋ฅผ pre-rendersํ๋ค. ์ด๊ฒ์ CDN์ ์ํด ์บ์๋ ์ ์๊ธฐ ๋๋ฌธ์ ์๋์ ์ผ๋ก ๋๋ฆด์ ๋ฐ์ ์๋ค. ํ์ง๋ง pre-rendered๋ ํ์ด์ง๋ ํญ์ ์ต์ ์ ์ํ๋ก ์ ์ง๋๋ค.
์๋ฒ์ฌ์ด๋๋ ๋๋ง
SSR์์๋ ํ์ด์ง๊ฐ ์ ์ ์ ์์ฒญ์ด ๋ค์ด์์๋ ๋์ ์ผ๋ก ์์ฑ๋๋ค. ํ์ด์ง๋ฅผ SSR๋ก ๋ง๋ค๊ณ ์ถ๋ค๋ฉด getServerSideProps ํจ์๋ฅผ ์์ฑํ๋ฉด ๋๋ค. ์ด ํจ์๋ ๋งค ์์ฒญ๋ง๋ค ์๋ฒ์ ์ํด ์คํ๋๋ค.
๋น๋ฒํ๊ฒ ์ ๋ฐ์ดํธ ๋๋ ๋ฐ์ดํฐ๊ฐ ํ์ํ ํ์ด์ง์์๋ pre-rendersํ ์๊ฐ ์๋ค. pre-renders์ ํต์ฌ์ ๋น๋ ํ์์ ๋ฏธ๋ฆฌ HTML์ ์์ฑํ๋๊ฒ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
getStaticProps์ ๋น์ทํ๋ค๊ณ ๋๋ ์ ์์ง๋ง ์ฐจ์ด์ ์ getServerSideProps๋ ๋งค ์์ฒญ๋ง๋ค ์๋ฒ์ ์ํด ์คํ ๋๋ค.
getStaticProps๋ ๋น๋ ํ์์ ์คํ๋๋ค.
์์ฝ
์ฐ๋ฆฌ๋ ์ฌํ๊น์ง Next.js์ pre-rendering์ ๋๊ฐ์ง ํํ๋ฅผ ์ดํด๋ณด์๋ค.
Static Generation(์ถ์ฒ๋จ): HTML์ด ๋น๋ํ์์ ๋ฏธ๋ฆฌ ์์ฑ๋๋ฉฐ ๋งค ์์ฒญ๋ง๋ค ์ฌํ์ฉ ๋๋ค. ํ์ด์ง๊ฐ Static Generation๋๊ฒ ๋ง๋๋ ค๋ฉด page component์์
getStaticProps(getStaticPaths๋ ํ์ํ๋ค๋ฉด ๊ฐ์ด) ํจ์๋ฅผ ์์ฑํด์ exportํ๋ฉด ๋๋ค.Server side Rendering: HTML์ด ์์ฒญ๋ ๋ ์์ฑ๋๋ค. ํ์ด์ง๋ฅผ SSRํ๋ ค๋ฉด
getServerSidePropsํจ์๋ฅผ ์์ฑํ๊ณ exportํ๋ผ. SSR์ Static Generation๋ณด๋ค ๋๋ฆฌ๊ธฐ ๋๋ฌธ์ด ๊ผญ ํ์ํ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉํ๋ผ.
Last updated
Was this helpful?