# Next.js ์์ํ๊ธฐ
React ์๋ฒฝ ๊ฐ์ด๋ with Redux, Next.js, TypeScript (opens new window)
# Next.js๋ ๋ฌด์์ธ๊ฐ?
Next.js ๋ ์ ์์ ์ํ react ํ๋ ์์ํฌ๋ค. ๋ง ๊ทธ๋๋ก ๋๊ท๋ชจ react ์ฑ์ ๋ ํธ๋ฆฌํ๊ฒ ๊ตฌ์ถํ ์ ์๋๋ก ๋ง์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ์ด๋ฅธ๋ฐ ๋ฆฌ์กํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ํ์คํ ํ๋ ์์ํฌ๋ผ๊ณ ํ ์ ์๋ค.
# Next.js ํน์ง
- SSR (์๋ฒ์ฌ์ด๋ ๋ ๋๋ง, Server-side Rendering)์ ๋ด์ฅํ๊ณ ์๋ค.
- ํ์ผ ๊ธฐ๋ฐ ๋ผ์ฐํ
# Next.js ์์ํ๊ธฐ
์ฌ์ ์ค๋น
- Node.js ์ค์น
npx create-next-app
# CNA ํ๋ก์ ํธ ๊ธฐ๋ณธ ๊ตฌ์กฐ
โโโ pages # base routing, root: _app.js
โโโ public # common resource
โโโ styles # style
2
3
- pages
- ํ์ผ ๊ธฐ๋ฐ ๋ผ์ฐํ
- root: _app.js
- public
- ๊ณต์ฉ ๋ฆฌ์์ค๊ฐ ์กด์ฌ
- next.js ๋ ๋ฆฌ์กํธ์ ๋ฌ๋ฆฌ index.html์ด ์๋๋ฐ, ์ด๋ Pre-rendering์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ด๋ค. html์ ๋ง๋ ํ js๋ฅผ ๋ก๋ํ๋ ๋ฐฉ์
- styles
- ์คํ์ผ ํ์ผ์ด ์กด์ฌ
# Routing
# ํ์ผ๋ช ์ ์ํ ๋ผ์ฐํ
pages ํด๋ ๋ด ํ์ผ๋ช ์ด ๋ผ์ฐํ ์ ๊ฒฝ๋ก๊ฐ ๋๋ค.
์๋ฅผ ๋ค์ด, ํ์ผ๋ช
์ด home ์ด๋ผ๋ฉด ๋๋ฉ์ธ/home
๊น์ง๊ฐ ๋ผ์ฐํ
๊ฒฝ๋ก๊ฐ ๋๋ค.
์์ธ์ ๊ฒฝ์ฐ๋ก ํ์ผ๋ช
์ด index.js ๋ผ๋ฉด ๋๋ฉ์ธ/
๊ฒฝ๋ก๋ก ๋ผ์ฐํ
๋๋ค.
/pages/index.js โ domain.com
/pages/home.js โ domain.com/home
# ์ค์ฒฉ ๊ฒฝ๋ก ๋ผ์ฐํ
์ค์ฒฉ ๊ฒฝ๋ก์ ๊ฒฝ์ฐ ํด๋ ์ ํด๋๋ฅผ ๋ง๋ค์ด์ ๋ผ์ฐํ ํ๋ค.
/pages/news/index.js โ domain.com/news
/pages/news/item โ domain.com/home/item
# ๋์ ๋ผ์ฐํ
๋๊ดํธ([ ]
) ๋ฅผ ์ฌ์ฉํ๋ฉด ๋์ ํ์ด์ง์์ ์ธ์งํ๋ค.
๋๊ดํธ ์์๋ ์๋ณ์๋ฅผ ๋ช ์ํ๋ค. ์๋ณ์๋ช ์ ์ํ๋ ์ด๋ฆ์ผ๋ก ์ง์ ์ค์ ํ๋ค.
/pages/news/[item].js
โ domain/news/somthing-important
โ domain/news/somthing-else
โ ...
useRouter ํ ์ ํตํด ์ฟผ๋ฆฌ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
์๋ฅผ๋ค์ด /pages/news/[item].js ์ ๋์ ๋ผ์ฐํ
์ด๋ผ๋ฉด router.query.item
๋ก ์ ๊ทผํ๋ค.
// domain.com/news/[item].js
import { useRouter } from 'next/router';
function DetailPage() {
const router = useRouter();
console.log(router.query.item);
return <h1>the detail page.</h1>;
}
export default DetailPage;
2
3
4
5
6
7
8
9
10
11
์์ ์ฝ๋๋ฅผ ํตํด domain.com/news/something-else
๊ฒฝ๋ก๋ก ์ด๋ ์ something-else ๋ฅผ ์ถ๋ ฅํ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
# Link
๋ฅผ ์ฌ์ฉํ ๋ผ์ฐํ
a ์ต์ปค ํ๊ทธ๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ ๋ธ๋ผ์ฐ์ ์ ์๋ก์ด ์์ฒญ์ ๋ณด๋ด๊ฒ ๋๋ฏ๋ก ํ์ด์ง๊ฐ ์๋ก๊ณ ์นจ ๋๋ค. SPA๊ฐ ์๋๊ฒ ๋จ.
Link ๋ฅผ ํตํ ๋ผ์ฐํ ์ ํ์ด์ง๊ฐ ์๋ก๊ณ ์นจ ๋์ง ์๊ณ ํ์ด์ง๋ฅผ ์ด๋.
๋จ, Next.js ์์์ Link ๋ ๋ฆฌ์กํธ์ ๋ฌ๋ฆฌ to
๊ฐ ์๋ href
ํ๋กํผํฐ๋ฅผ ๋ฐ๋๋ค.
import Link from 'next/link';
function HomePage() {
return (
<ul>
<li>
<Link href="/">All Meetups</Link>
</li>
<li>
<Link href="/new-meetup">Add New Meetup</Link>
</li>
</ul>
);
}
export default HomePage;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16