NextJS๊ฐ ๋ญ์ฃ ?
๐ https://nextjs.org/
Next.js by Vercel - The React Framework
Production grade React applications that scale. The world’s leading companies use Next.js by Vercel to build static and dynamic websites and web applications.
nextjs.org
The React Framework for the Web
NextJS๋ React ํ๋ ์์ํฌ(Framework)์ด๋ค.
ํ๋ ์์ํฌ vs ๋ผ์ด๋ธ๋ฌ๋ฆฌ
React๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๊ณ , NextJS๋ ๊ทธ React์ ํ๋ ์์ํฌ๋ผ๊ณ ํ๋ค.
ํ๋ ์์ํฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฐจ์ด๋ ๋ญ์ง?
ํ๋ ์์ํฌ vs ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- ํ๋ ์์ํฌ๋ ๊ธฐ๋ฐ๊ตฌ์กฐ vs ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๊ฐ๋ฐ ํธ์ ๋๊ตฌ๋ค
- ์ ์ด ์ฃผ๋๊ถ์ ํ๋ ์์ํฌ๊ฐ ๊ฐ์ง vs ์ ์ด ์ฃผ๋๊ถ์ ์ฌ์ฉ์๊ฐ ๊ฐ์ง
- ํ๋ ์์ํฌ๋ ๊ธฐ๊ณ(ex. ๊ตด์ญ๊ธฐ) vs ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๊ณต๊ตฌ(ex. ์ฝ, ๋ง์น)
- ํ๋ ์์ํฌ ์์ ๋๋ ์๋์ ์ผ๋ก ์ ์ vs ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ ๋๋ ์๋์ ์ผ๋ก ํผ
ํ๋ ์์ํฌ์ ์ฅ์
- ๊ฐ์ธ์ด ํด์ผํ ๊ณ ๋ฏผ๋ค์ ํ๋ ์์ํฌ ๊ฐ๋ฐ์๊ฐ ๋ฏธ๋ฆฌ ํ๊ณ ๋ฐ์
- ํน์ ๋์์ธ ํจํด์ด๋ ๋์๊ณผ ๊ธฐ๋ฅ๋ค์ ์ํ ์ ์์ ๋ฐฉ์์ ์ ๋ฆฌํด๋
- ์ฌ๋ฌ ๊ฐ๋ฐ์๊ฐ ํจ๊ป ํ์ ํ ๋ ๊ธฐ์ค์ ์ด ๋จ
Why NextJS
ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๋ค์ด ๊ฐ์ง ๊ณ ๋ฏผ์ ๋ํ ์ ์ ํ ํด๊ฒฐ์ฑ ์ ์ ๊ณต
- ๊ท๋ชจ๊ฐ ์๋ ์๋น์ค ๊ตฌ์กฐ ์ค๊ณ๋ฅผ ์ด๋ป๊ฒ ํ ๊ฒ์ธ๊ฐ?
- ๊ฐ๋ฐํ๊ฒฝ / ์ฝ๋ ๋ถํ / ํ์ผ ๊ธฐ๋ฐ ๊ตฌ์กฐ
- SEO(๊ฒ์ ์์ง ์ต์ ํ)
- ํ๋ก ํธ์๋์ ํ์ํ ๊ฐ๋จํ API ๊ตฌ์ฑ
- ์์ฌ์ด ๋ฐฐํฌ ์์คํ Vercel
NextJS ์์ํด๋ณด๊ธฐ
๊ธฐ๋ณธ์ ์ผ๋ก nodejs๊ฐ ์ค์น๋์ด ์์ด์ผ ํ๋ค!
create-react-app๊ณผ ๋์ผํ ํ์์ผ๋ก create-next-app์ ํ๊ฒ๋๋ฉด ํ๊ฒฝ์ค์ ์ด ์ ๋ ํ๋ก์ ํธ๋ฅผ ๋น ๋ฅด๊ฒ ์คํํด๋ณผ ์ ์๋ค.
npx create-next-app nextjs-blog
NexJS Data Fetching
NextJS๊ฐ ์ ์ํ๋ 3 + 1๊ฐ์ง Data Fetching ๋ฐฉ๋ฒ
- SSR
- CSR
- SSG
- ISR
1. SSR(Server Side Render)
: ์๋ฒ๊ฐ ๊ทธ๋ฆฐ๋ค
๐ ๊ทธ๋ฆฐ๋ค : ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ ๊ทธ๋ฆฐ๋ค
๐ ์๋ฒ๊ฐ ๊ทธ๋ฆฐ๋ค : ์๋ฒ๊ฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ ๊ทธ๋ฆฐ๋ค
SSR์ ๋ด๋นํ๋ ํจ์
: getServerSideProps
์๊น๋ง๋ CNA์ pages/index.js์์ Component ํจ์ ๋ฐ๊นฅ์ชฝ์์ ์๋์ ๊ฐ์ด getServerSidePropsํจ์๋ฅผ ํธ์ถํด์ค๋ค.
๊ทธ๋ฆฌ๊ณ props๋ก key๋ฅผ time์ผ๋ก value๋ฅผ ํ์ฌ ์๊ฐ์ผ๋กํด์ return ํด์ฃผ์๋ค. ๊ทธ๋ฌ๋ฉด return ํด์ค Props๋ค์ ๋ด๋ถ์ ์ผ๋ก ์๋์ผ๋ก props๋ก component์๊ฒ ์ ๋ฌ๋๋ค. ์๋์ ๊ฐ์ด ๋ง์ด๋ค.
props๋ก ๋ด๋ ค์จ time์ ํด๋น component๋ด๋ถ์์ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ ๊ฒ์ด๋ค.
์ ๊ทธ๋ฌ๋ฉด getServerSideProps๊ฐ ์ง์ง ์๋ฒ์์ ์๋ํ๋์ง ์์๋ณด๊ธฐ ์ํด console.log('server')์ ์ฐ์ด๋์์ผ๋ ํ์ธํ๋ฌ ๊ฐ๋ณด์
โ๏ธ yarn dev๋ก ํ๋ก์ ํธ๋ฅผ Local ํ๊ฒฝ์์ ์คํ์ํค๊ณ ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ์ฐ ํ ์๋ก๊ณ ์นจ์ ํด๋ณด๋ฉด console์ฐฝ์๋ ์๋ฌด๊ฒ๋ ์ฐํ์ง ์๋ ๊ฒ์ ๋ณผ ์ ์์ ๊ฒ์ด๋ค. ๋์ vscode์ ํฐ๋ฏธ๋์ ๋ณด๊ฒ ๋๋ฉด ์๋์ ๊ฐ์ด server๊ฐ ์ฐํ ๊ฒ์ ๋ณผ ์ ์์ ๊ฒ์ด๋ค!
์๋ก๊ณ ์นจ์ ๋ช๋ฒ ํด๋ณด์๋ terminal์์๋ง console์ด ์ฐํ๋ ๋ชจ์ต์ ๋ณผ ์ ์์ ํ ๋ฐ ์ด๊ฒ์ด ๋ฐ๋ก getServerSideProps๋ผ๋ ํจ์๋ด๋ถ์ ์ฝ๋๋ ์๋ฒ์์๋ง ๋์ํ๋ค๋ ๊ฒ์ ์ ์ ์๋ ๊ฒ์ด๋ค!
2. CSR(Client Side Render)
: ํด๋ผ์ด์ธํธ๊ฐ ๊ทธ๋ฆฐ๋ค.
๐ ๊ทธ๋ฆฐ๋ค : ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ ๊ทธ๋ฆฐ๋ค.
๐ ํด๋ผ์ด์ธํธ๊ฐ ๊ทธ๋ฆฐ๋ค : ํด๋ผ์ด์ธํธ๊ฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ ๊ทธ๋ฆฐ๋ค.
์ฆ, ๋ธ๋ผ์ฐ์ ๊ฐ ์ ์ ๊ฐ ๋ณด๋ UI๋ฅผ ๋ง๋๋ ๋ชจ๋ ๊ฒ์ ํ๋ค๋ ์๋ฏธ์ด๋ค.
CSR์ ๋ด๋นํ๋ ํจ์๋ ๋ฐ๋ก ์๋ค. ๊ธฐ์กด React์ฒ๋ผ ์ฌ์ฉํ๋ฉด ๊ทธ๊ฒ์ด ๊ณง CSR!! (ex. useEffect ๋ฑ)
3. SSG(Static-Site Generation)
: ์ ์ ์ธ ์ฌ์ดํธ๋ฅผ ์์ฑํ๋ค.
๐ ์์ฑํ๋ค : ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ ๊ทธ๋ ค๋๋ค
๐ ์ ์ ์ธ ์ฌ์ดํธ๋ฅผ ์์ฑํ๋ค : ์ ์ ์ธ ์ฌ์ดํธ๋ฅผ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ ๊ทธ๋ ค๋๋ค.
SSG๋ฅผ ๋ด๋นํ๋ ํจ์
: getStaticProps(with getStaticPaths)
index.js์ nextjs์์ ์ ๊ณตํด์ฃผ๋ Link ํ๊ทธ๋ก ๊ฐ๊ฐ์ ํจ์๋ฅผ ํ ์คํธ ํด๋ณผ ์ ์๋๋ก ๋ผ์ฐํ ์ ํ๋ค.(CSR๋ ํด๋ณด๋ ค๊ณ )
NextJS๋ React์ฒ๋ผ react-router-dom์ผ๋ก ๋ผ์ฐํ ์ ํด์ค ํ์ ์์ด ํด๋๊ตฌ์กฐ๋ก ์๋์ผ๋ก ๋ผ์ฐํ ์ด ๋๋ค.(์ด๊ฒ ๋ฐ๋ก ํ๋ ์์ํฌ์ ์ฅ์ ์ด์ง)
๋ฐ๋ผ์ pages๋ผ๋ ํด๋ ํ์์ ํ์ผ๋ค์ ๋ง๋ค๋ฉด ์๋์ผ๋ก ๋ผ์ฐํ ์์คํ ์ด ์ ์ฉ๋๋ค. ์ง๊ธ ๊ฐ์ ๊ฒฝ์ฐ /csr๊ณผ /ssg๋ฅผ ๋ผ์ฐํ ํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํด๋๊ตฌ์กฐ๋ฅผ ๋ง๋ค์ด์ฃผ๋ฉด ๋๋ค.
์ ๊ทธ๋ฆฌ๊ณ ssg.js์ ๊ฐ์ ๋ค์๊ณผ ๊ฐ์ด getStaticPropsํจ์๋ฅผ ์ด์ฉํด data fetching ํ๋ ์ฒ์ ํด๋ณด์.
โ ๏ธ ๊ทผ๋ฐ ์ฌ๊ธฐ์ ํ๋ ์ฃผ์ํด์ผํ๋ ๊ฒ์ด ์๋๋ฐ npm run dev ๊ทธ๋ฌ๋๊น nextjs dev ๋ก ๋ก์ปฌ์์ ์คํ์ ์ํค๋ฉด ๋ง์น SSR์ฒ๋ผ ์๋ํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
๋๋ฌธ์ npm run build๋ฅผ ํ๊ณ npm run dev๊ฐ ์๋ npm run start๋ฅผ ํตํด ์คํ์์ผ์ผ ์ ๋๋ก ๋์ํ๋ค.
์๋ฌดํผ build ํ start๋ก ์คํ์ ์ํจ ํ ์๋ก๊ณ ์นจ์ ํด๋ณด๋ฉด sever์ client์ชฝ์์ ๋ชจ๋ ์๋ฌด๋ฐ ๋ก๊ทธ๊ฐ ์ฐํ์ง ์๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
์ด๋ getStaticProps๋ ํ์ผ์ buildํ ๋ ์คํ์ด ๋๊ธฐ ๋๋ฌธ์ด๋ค.
์ด์ฒ๋ผ getStaticProps๋ build์ ๋ฐ์ดํฐ๋ฅผ fetching๋ฐ์์ ์ ์ ํ์ด์ง๋ฅผ ๋ง๋๋๋ฐ getStaticPath๋ build์ ์ด๋ค ์ด๋ค ๊ฒ๋ค์ SSGํ ๊ฑด์ง๋ฅผ ์ ํด์ฃผ๋ ์ญํ ์ ํ๋ ํจ์์ด๋ค.
4. ISR(Incremental Static Regeneration)
: ์ฆ๋ถ ์ ์ ์ฌ์ดํธ๋ฅผ ์ฌ์์ฑํ๋ค.
๐ ์ฌ์์ฑํ๋ค : (ํน์ ์ฃผ๊ธฐ๋ก) ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ ๋ค์ ๊ทธ๋ ค์ค๋ค.
๐ ์ฆ๋ถ ์ ์ ์ฌ์ดํธ๋ฅผ ์ฌ์์ฑํ๋ค. : (ํน์ ์ฃผ๊ธฐ๋ก) ์ ์ ์ธ ์ฌ์ดํธ๋ฅผ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ ๋ค์ ๊ทธ๋ ค์ค๋ค.
์ฝ๊ฒ ์๊ธฐํด์ ์ ์ ์ผ๋ก ๋ง๋ค์ด ๋์ ์ฌ์ดํธ๋ค๋ ์ ๋ฐ์ดํธ๊ฐ ๊ฐ๋ฅํ๋๋ก ํ๋ค๋ ๊ฒ์ด๋ค. ์ด๋ฅผ ์ด์ฉํ๋ค๋ฉด ์ ์ ์์ฑ์ ์ฅ์ ์ ์ทจํ๋ ๋จ์ ์ ๋ณด์ํ ์ ์๊ฒ ๋๋ ๊ฒ์ด๋ค.
ISR์ ๋ด๋นํ๋ ํจ์
: getStaticProps with revalidate
์์์ ํ๋ ๋ฐฉ์๊ณผ ๋์ผํ๊ฒ isr์ฉ ํ์ผ์ ํ๋ ๋ง๋ค๊ณ getStaticProps๋ฅผ ํธ์ถํ๋ค.
์ฌ๊ธฐ์ ISR์ ํ๊ธฐ ์ํด์๋ revalidate๋ฅผ ์ค์ ํด์ฃผ์ด์ผ ํ๋๋ฐ, ์ด๋จ์๋ก ์ ๋ ฅํ ์ ์๋ค.
์์ ๊ฐ์ด revalidate๋ฅผ 5์ด ์ฃผ์๋ค๋ ์๋ฏธ๋
์ต์ด ํ์ด์ง๋ก ์ง์ ํ๊ฒ ๋๋ฉด SSG์ ์ํด ๋ฏธ๋ฆฌ ๋ง๋ค์ด ๋์ ํ์ด์ง๋ฅผ ์ ๊ณตํด์ค๋ค. ์ดํ 5์ด๊ฐ ์ง๋๋ฉด server์์ ํด๋นํ์ด์ง์ ์ ๋ฐ์ดํธ๊ฐ ์ด๋ฃจ์ด์ง๊ณ ์ด ์ ๋ฐ์ดํธ๊ฐ ์๋ฃ๋๋ฉด ์์ผ๋ก ์๋กญ๊ฒ ๋ง๋ค์ด์ง ํ์ด์ง๋ฅผ ์ฌ์ฉ์์๊ฒ ์ ๊ณตํด์ฃผ๋ ๋ฐฉ์์ด๋ค.
โ ์ ์ฌ๊ธฐ์ ํท๊ฐ๋ฆฌ๊ณ ์คํดํ ์ ์๋ ๊ฒ์ด SSG, SSR ๊ฐ๋ ์ด ๋ค์ด๊ฐ ์์ผ๋ ๋ชจ๋ ํ์ด์ง ์ด๋๋ง๋ค SSR์ ํ๋ ๊ฒ์ ์๋๋ผ๋ ๊ฒ์ด๋ค.
์ฒซ ์์ฒญํ๋ ํ์ด์ง์ ๋ํด์๋ง SSG ํน์ SSR๋ก server side์์ ๋ฏธ๋ฆฌ ๋ง๋ค์ด ๋์ ํ์ผ์ ์๋ตํ๋ ๊ฒ์ด๊ณ ๊ทธ ์ดํ๋ถํฐ๋ router๋ฅผ ํตํด CSR๋ก ์ด๋ํ๋ ๊ฒ์ด๋ค.
Pre-render
Pre - rendering
๊ธฐ๋ณธ์ ์ผ๋ก NextJS๋ ๋ชจ๋ ํ์ด์ง๋ฅผ pre-rendering ํ๋ค.
Pre-rendering๊ณผ SEO์ ์๊ด๊ด๊ณ
CSR๋ง ์ ๊ณตํ๋ค๋ฉด, Client(๋ธ๋ผ์ฐ์ )์ฒ๋ผ ๋์ํ์ง ์๋ ๊ฒ์์์ง์ ๊ฒฝ์ฐ ์ฆ, JS๋ฅผ ํด์ํ ์ ์๋ ์์ง์์๋ ์๋ฌด๋ฐ ๋ฐ์ดํฐ๋ ์กฐํํด๊ฐ ์ ์๋ค.
Pre-render๋ฅผ ํด๋๋ฉด Client ์ฒ๋ผ ๋์ํ์ง ์๋ ๊ฒ์์์ง์๊ฒ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ ์ ์๋ค.
NextJS์ pre-rendering ๋ฐฉ์
SSG(recommended) & SSR
- SSG๋ build์ pre-render
- SSR์ ์์ฒญ ์ pre render
์ฌ์ค NextJS์์ ๋งํ๋ SSG์ SSR์ server side์์ build์์ ์ ํ์ด์ง๋ฅผ ๋ง๋ค์ด์ค๊น?(SSG) ์๋๋ฉด ์์ฒญ๋ง๋ค ๋ง๋ค์ด์ค๊น?(SSR)๋ผ๊ณ ๋ณผ ์ ์๋ ๊ฒ์ด๋ค.
Layouts
์ฌ๋ฌ page๋ค์ ๊ณตํต ์ฒ๋ฆฌ๋ฅผ ์ํ component๋ก์จ root์ components/Layout.js๋ผ๋ ํ์ผ์ ๋ง๋ค๋ฉด NextJS๊ฐ ์๋์ผ๋ก ์ธ์ํ๊ฒ ๋๋ค.
์ดํ ์ปดํฌ๋ํธ ํ๋๋ฅผ pages/_app.js์์ ํ์ฉํ๋ฉด ๋๋๋ฐ ์ฌ๊ธฐ์์ _app.js ๋ํ NextJS๊ฐ ์ ๊ณตํด์ฃผ๋ ๋ชจ๋ ํ์ผ์ ํ์ ์ ์๋ ํ์ผ์ด๋ผ๊ณ ๋ณด๋ฉด๋๋ค.
children์ผ๋ก ๋ค๋ฅธ ํ์ด์ง๋ค์ ์์์์๋ก์ ํ์ ์ ์๋ ์ปดํฌ๋ํธ์ด๋ค.
์ฐธ๊ณ ๋ก Layout์์๋ SSR์ด ์๋๋ค. Layout์ ์ปดํฌ๋ํธ์ด์ง ํ์ด์ง๊ฐ ์๋๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ์๋์ ๊ฐ์ด ํ์ผ์ ๋ง๋ค์ด์ฃผ๋ฉด ๋์ด๋ค.
props๋ก ๋ฐ๋ Component์๋ pages์ ๋ชจ๋ ํ์ผ์์ด ๋ค์ด์ฌ ์ ์๋ค.
SubLayout
Layout์ฒ๋ผ ๋ชจ๋ ํ์ด์ง์์๊ฐ ์๋ ํน์ ํ์ด์ง์์๋ง ๋ณด์ฌ์ฃผ๊ณ ์ถ์ ๋ด์ฉ์ด ์์ ์ ์๋ค.
๊ทธ๋ด ๋๋ SubLayout์ ์ฌ์ฉํ๋ฉด ๋๋๋ฐ
์ปดํฌ๋ํธ์ SubLayout์ด๋ผ๊ณ ํ๋ ๋ง๋ค์ด์ฃผ๊ณ
ํ์ผ๋ก ๊ฐ ์ ์๋ ๋งํฌ๋ฅผ ํ๋ ๋ง๋ค์ด์ค๋ณด์.
ํ์ผ๋ก ๊ฐ๋ ๋งํฌ๋ฅผ ๋ณด์ฌ์ฃผ๊ณ ์ถ์ ํน์ ํ์ด์ง์ ๊ฐ์ ์๋์ ๊ฐ์ด ๋ง๋ค์ด ์ฃผ์
๊ทธ๋ฆฌ๊ณ ๋ _app.js๋ก ๊ฐ์ ์๋์ ๊ฐ์ด ๋ถ๊ธฐ์ฒ๋ฆฌ(?)๋ฅผ ํด์ฃผ๋ฉด ๋๋ค.
์ ์ฝ๋๋ฅผ ํด์ํด๋ณด์๋ฉด getLayout์ด๋ผ๋ ๊ฒ์ ๊ฐ์ ธ์์ผ๋ฉด ๊ทธ๊ฒ์ ๋ณด์ฌ์ฃผ๊ณ , ์์ผ๋ฉด || ๋ค์ ๊ฒ์ ๋ณด์ฌ์ค๋ผ ๋ผ๋ ์๋ฏธ์ด๋ค.
Images
NextJS๊ฐ ์ ๊ณตํ๋ ์ต์ ํ Image Component
- ์ฑ๋ฅ ํฅ์(Improved Preformance)
- Visual Stability(CLS-Cumulative Layout Shift๋ฐฉ์ง)
- Faster Page Loads(viewport ์ง์ ์ ๋ก๋ / blur์ฒ๋ฆฌ)
- Asset Flexibility(resizing)
- lazy loading
routing
Nested routes
/settings/my/info ๋ผ๋ ๊ฒฝ๋ก๋ก routing์ ํ๊ณ ์ถ์ผ๋ฉด pages/settings/my/info.js ์ ๊ฐ์ด ํด๋์ ํ์ผ๊ตฌ์กฐ๋ง ์ง์ผ์ฃผ๋ฉด ์๋์ผ๋ก routing์ด ๋๋ค.
Slug
ํ์ผ slugํ
/category/food๋ /category/item ๊ณผ ๊ฐ์ ๊ฒฝ์ฐ๋ ์ด๋ป๊ฒ ํ๋ฉด ๋ ๊น? ๋ฌผ๋ก pages/category/food.js ๊ทธ๋ฆฌ๊ณ pags/category/item.js์ ๊ฐ์ด ํ์ํ ๋งํผ ํ์ผ์ ๋ง๋ค ์๋ ์์ง๋ง ๋ง์ฝ ์ํ์ด 1์ต๊ฐ๋ผ๋ฉด ํ๋ค์ง ์์๊น?
๊ทธ๋ด ๋๋ slug๋ฅผ ์ฌ์ฉํ๋ฉด ํจ์ฌ ํธํ๊ฒ ๋ง๋ค ์ ์๋ค.
pages/category/[slug].js ์ฒ๋ผ ๋ง๋ค๋ฉด category/ ๋ค์ ๋ญ๊ฐ ์ค๋ ๋ค ๋ฐ์ ์ ์๊ฒ ๋๋ ๊ฒ์ด๋ค.
ํด๋ slugํ
pages/[slug]/info.js์ ๊ฐ์ด ๋ง์ด๋ค. => /:username/info(ex. /jane/info)
๋ฌดํ depth routing
pages/category/[...slug].js ์ฒ๋ผ ๋ง๋ค๋ฉด category/ ๋ค์ depth๊ฐ ์๋ฌด๋ฆฌ ๋ง์๋ ๋ค ๋ฐ์ ์ ์๋ค.
NextJS 13๋ฒ์ ์์ ๋ฐ๋์ : https://velog.io/@hang_kem_0531/Next.js-13%EC%9D%B4-%EB%82%98%EC%99%80%EB%B2%84%EB%A0%B8%EB%8B%A4
'NextJS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[NextJS] Github ๋ก๊ทธ์ธ ์ฐ๊ฒฐํด๋ณด๊ธฐ (0) | 2023.12.09 |
---|---|
NextJS ๊ฐ์ธ ๋ฉ๋ชจ (1) | 2022.11.04 |