ํ ์ ํฌ๊ธฐ๋ก ์๋ผ๋จน๋ Next.js ํ์ต์ ๋ฆฌ์ฉ์ ๋๋ค.
2.1) Page Router๋ฅผ ์๊ฐํฉ๋๋ค.
2.2) ํ์ด์ง ๋ผ์ฐํ ์ค์ ํ๊ธฐ
2.3) ๋ค๋น๊ฒ์ดํ
2.1 Page Router๋ฅผ ์๊ฐํฉ๋๋ค
Page Router ๋?
๋ง์ ๊ธฐ์ ์์ ํ์ฉ๋๊ณ ์๋ ๊ฐ์ฅ ์์ ์ ์ธ ๋ผ์ฐํฐ
ํน์ ์กฐ๊ฑด์ ๊ธฐ์ค์ผ๋ก ์น์๋น์ค ๋ด์ ํ์ด์ง๋ฅผ ๋ถํ ํ๊ณ ๋ ๊ทธ๋ ๊ฒ ๋ถํ ๋ ํ์ด์ง ๊ฐ์ ์ด๋์ ์ฒ๋ฆฌํ๋ ๊ธฐ๋ฅ์ ์ ๊ณต
ํ์ผ์ ์ด๋ฆ(ํน์ ํด๋์ ์ด๋ฆ)์ ๊ธฐ๋ฐ์ผ๋ก ํ์ด์ง ๋ผ์ฐํ ์ ์ ๊ณต
๋์ ๊ฒฝ๋ก
/page/1, /page/2... ์ฒ๋ผ ๊ฐ๋ณ์ ์ธ ๊ฐ์ ํฌํจํ๊ณ ์๋ ๊ฒฝ๋ก(๋ธ๋ก๊ทธ ๊ฒ์๊ธ ์ฃผ์ ๋ฑ)
/page ํด๋ ํ๋จ์ [id].js ๋ก ๋๊ดํธ๋ฅผ ํตํด ๋ง๋ค์ด์ค ์ ์๋ค.
npx(node package execute)
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด ์ค์ ๋ก ์ฌ๋ผ๊ฐ์๋ ์๋ฒ์ธ npmjs.com์ ๋ฑ๋ก๋์ด ์๋ ์ต์ ๋ฒ์ ์ ๋ ธ๋ ํจํค์ง๋ฅผ ๋ค์ด๋ก๋ ์์ด ๋ฐ๋ก ์คํ์ํค๋ ๋ช ๋ น์ด
ํด๋๊ตฌ์กฐ
public : ํ์ด์ง ๋ด๋ถ์์ ์ฌ์ฉํ ์ด๋ฏธ์ง ํ์ผ๊ฐ์ ์ ์ ์ธ ํ์ผ๋ค์ด ๋ณด๊ด๋์ด ์์
_app.tsx, _document.tsx ์ ์ญํ
pages ํด๋ ๋ฐ์ ์๊ธด ํ์ง๋ง ํ์ด์ง์ ์ญํ ์ ํ๋ ํ์ผ์ด ์๋
๋์ ๋ฅ์คํธ ์ฑ์ ๋ชจ๋ ํ์ด์ง์ ๊ณตํต์ ์ผ๋ก ์ ์ฉ๋ ๋ก์ง์ด๋ ๋ ์ด์์, ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๊ธฐ์ํด ํ์ํ ํ์ผ
App ์ปดํฌ๋ํธ์ ์ญํ
๋ฃจํธ ์ปดํฌ๋ํธ
Component : ํ์ฌ ํ์ด์ง์ ์ญํ ์ ํ ์ปดํฌ๋ํธ
pageProps : ์ ๋ฌ๋ ํ์ด์ง์ ํ๋กญ์ค๋ค์ ๊ฐ์ฒด๋ก ๋ชจ์๋์ ๊ณณ
import "@/styles/globals.css";
import type { AppProps } from "next/app";
export default function App({ Component, pageProps }: AppProps) {
return <Component {...pageProps} />;
}
๋ชจ๋ ํ์ด์ง์ ๊ณตํต์ผ๋ก ๋ํ๋์ผ ํ๋(ํค๋, ํธํฐ ๋ฑ)์ ๊ณตํต ์์๋ App ์ปดํฌ๋ํธ์ ๋ฃ์ผ๋ฉด ๋๋ค.
Document ์ปดํฌ๋ํธ์ ์ญํ
๋ชจ๋ ํ์ด์ง์ ๊ณตํต์ ์ผ๋ก ์ ์ฉ์ด ๋์ด์ผ ํ๋ html ์ฝ๋๋ฅผ ์ค์ ํ๋ ์ปดํฌ๋ํธ
๋ฉํ ํ๊ทธ ๋๋ ํฐํธ, ๊ตฌ๊ธ ์ ๋๋ฆฌํฑ์ค ๊ฐ์ ์๋ ํํฐ ์คํฌ๋ฆฝํธ ๋ฑ
next.config.mjs
๋ฅ์คํธ ์ฑ์ ์ค์ ์ ๊ด๋ฆฌํ๋ ํ์ผ
2.2 ํ์ด์ง ๋ผ์ฐํ ์ค์ ํ๊ธฐ
์ฟผ๋ฆฌ ์คํธ๋ง ์ค์ ๋ฐฉ๋ฒ
useRouter์์ next/router, next/navigation ์ ์ฐจ์ด
next/navigation : App Router์์ ์ฌ์ฉ๋๋ ํจํค์ง์
useRouter -> router๋ผ๋ ๊ฐ์ฒด๋ฅผ ์ปดํฌ๋ํธ ๋ด๋ถ์์ ์ฌ์ฉํ ์ ์๋๋ก ๋ฐํํด์ฃผ๋ ํจ์
router๋ฅผ ํตํด ๋ผ์ฐํ ๊ณผ ๊ด๋ จ๋ ์ ๋ณด๋ค์ ๊ฐ์ ธ์ฌ ์ ์์
book/234/234/234 ์ฒ๋ผ id๋ฅผ ์ฌ๋ฌ๊ฐ ์ค์ ํ๋ ๋ฐฉ๋ฒ
- Catch All Segment : ํ์ผ ์ด๋ฆ์ ... ๋ถ์ด๊ธฐ [...id].tsx
๋ค๋ง Catch All Segment๋. index.tsx(/book)๋ ๋์ํ ์ ์๋ค. -> ์๋ํ๋ฉด Catch All Segment๋ /book ๋ค์ ๋ญ๊ฐ ๋์์ผ ํ๋ ๊ฒฝ๋ก์ด๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋๋ /book ๋ค์ ๋ญ๊ฐ ์ค๋ ์์ค๋ ํ์ด์ง๋ฅผ ๋ณด์ด๊ฒ ํ๊ณ ์ถ๋ค๋ฉด? -> Optional Catch All Segment : [[...id]].tsx ์ฒ๋ผ ๋๊ดํธ๋ฅผ ํ ๋ฒ ๋ ๊ฐ์ธ์ฃผ๋ฉด ๋๋ค.
404.tsx
pages/ ์๋์ 404.tsx ๋ง ๋ง๋ค์ด์ฃผ๋ฉด ์ ์ ๋ถ๊ฐ๋ฅํ ํ์ด์ง ์ฃผ์์ ํด๋น ์ปดํฌ๋ํธ๋ฅผ ๋ณด์ฌ์ค ์ ์๊ฒ ๋๋ค.
2.3 ๋ค๋น๊ฒ์ดํ
a / Link ์ฐจ์ด์
<a></a> : ํ์ด์ง๋ฅผ ์ด๋์ํฌ ๋ ํ์ด์ง๋ฅผ ์๋ก ๋ถ๋ฌ์ค๊ฒ ๋๋ค. ๋ฐ๋ผ์ ์ํ ๊ฐ์ ์๊ณ ์๋๊ฐ ์ ํ๋๋ค.
<Link></Link> : ๋ธ๋ผ์ฐ์ ์ ์ฃผ์๋ง ๋ฐ๊ฟ ๋ฟ, ํ์ด์ง๋ฅผ ์๋ก ๋ถ๋ฌ์ค์ง๋ ์๋๋ค.
Programmatic Navigation
์ฌ์ฉ์๊ฐ ๋งํฌ๋ฅผ ์ง์ ํด๋ฆญํ์ ๋ ํ์ด์ง๋ฅผ ์ด๋์ํค๋ ๋ฐฉ์์ด ์๋๋ผ ํน์ ๋ฒํผ์ด ํด๋ฆญ์ด ๋์๊ฑฐ๋ ์๋๋ฉด ํน์ ์กฐ๊ฑด์ด ๋ง์กฑํ์ ๊ฒฝ์ฐ ์ด๋ ํ ํจ์ ๋ด๋ถ์์ ํ์ด์ง๋ฅผ ์ด๋์ํค๋ ๋ฐฉ์
'FE > Next.js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Next.js] page router - API Routes (0) | 2025.05.03 |
---|---|
[Next.js] page router - ํ๋ฆฌํ์นญ (0) | 2025.05.03 |
[Next.js] Next.js? (1) | 2025.05.01 |
[Next.js] reactStrictMode (0) | 2025.04.21 |
[Next.js] ํ๋ก์ ํธ ์์ฑ (0) | 2024.06.10 |