Next.js ๋ React + Express.js + React-Router-Dom + Server Side Rendering ๋ชจ๋ ํฌํจํ ์ธ์ด์ ๋๋ค.
Express.js์ React-Router-Dom์ ๊ทธ๋๋ก ์ ๊ณตํ๋๊ฒ ์๋๋ผ ๊ทธ๋ฐ ๊ธฐ๋ฅ์ฑ ๊ฐ๋ ์ ๋ด์ฌํํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ๋ถ์ด ์ด๊ฒ ์ ๊ฒ ์ค์นํ์ง ์๊ณ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋ค๋ ๋ป์ ๋๋ค.
์ด๋ฒ ์๊ฐ์๋ Next.js์ ๋ณธ์ง์ ์ธ ๊ฐ๋ ๋ค์ ๋น ๋ฅด๊ฒ ์ดํด ๋ณด๊ฒ ์ต๋๋ค.
Next.js ํํ์ด์ง์ Documentation ์ Getting Started๋ฅผ ๋ณด๋ฉด ์ค์นํ๋ ๋ฐฉ๋ฒ์ด ๋์ ์์ต๋๋ค.
npx create-next-app@latest . ํ์ฌ๋๋ ํ ๋ฆฌ์ ๊ฐ๋ฐ ํ๊ฒฝ ์ ํ command
Next.js๋ 3๊ฐ์ง ์คํ ๋ช ๋ น์ด ์์ต๋๋ค.
๊ฐ๋ฐํ๊ฒฝ์คํ npm run dev
๋ฐฐํฌ ํ์ผ ์์ฑ npm run build
์๋น์ค ์์ npm run start
๊ฐ๋ฐํ๊ฒฝ์ผ๋ก ์คํํด ๋ณด๊ฒ ์ต๋๋ค.
localhost ํฌํธ๋ 3000์ผ๋ก ์น์ด ์คํ๋ฉ๋๋ค.
์ด๋ ๊ฒ ์ถ๋ ฅ์ด ๋๋ฉด ์ฑ๊ณต์ ์ผ๋ก ๊ฐ๋ฐํ๊ฒฝ์ด ์ ํ ์ด ๋๊ฒ๋๋ค. ๐๐๐
์ด์ ์ฝ๋ฉ์ ์์ํด ๋ณด์ญ๋๋ค. main ์ฒ๋ผ ์ฝ๋ฉ์ ์์์ ์ผ๋ก ๊ฐ ๋ด ์๋ค.
pages ๋ฐ์ index.js ํ์ผ์ด ์์ต๋๋ค. (ํ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ฅ์๋ .tsx ์ ๋๋ค.)
์ด ๋ถ๋ถ์ด ํํ์ด์ง์ ๋ํ ๋ด์ฉ์ ์์ฑํ์๋ฉด ๋ฉ๋๋ค. ๋ฌธ๋ฒ์ ๋ฆฌ์กํธ์ ๋ง๊ฒ ์์ฑํ์๋ฉด ๋ฉ๋๋ค.
๊ฐ์ฅ ๋จผ์ ์์ํ๋ Hello์ ์ถ๋ ฅํ๊ฒ ์ต๋๋ค.
Hello์ ์ฐ์์ผ๋ ๋ฐฐํฌํ๋ ๋ถ๋ถ์ ํด ๋ณด๊ฒ ์ต๋๋ค.
npm run build
.next ํด๋์ ๋ฐฐํฌ๋ฅผ ์ํ ๋น๋ ํ์ผ์ด ๋ง๋ค์ด์ง๋๋ค.
๊ทธ๋ค์, ์ค์๋ฒ๋ฅผ ์คํํ ๋๋ ์๋์ ๊ฐ์ด ํ์๋ฉด ๋ฉ๋๋ค. next.js๋ ์๋ฒ๊น์ง ๋ด์ฅ๋์ด ์๋ ์ฌ์ธ์ ์๋ฃจ์ ์ ๋๋ค.
npm run start
build, ์ค์๋ฒ ์คํ๊น์ง ์์ ๋ณด์์ผ๋, ๋ค์ dev๋ชจ๋๋ก ์์ ์ ์งํํ๊ฒ ์ต๋๋ค.
Route
์ฐ๋ฆฌ๊ฐ ํญ์ ์ ๊ฒฝ์จ์ผ ๋๋ ๋ถ๋ถ์ด Route ์ ๋๋ค. url์ ๋ฐ๋ผ์ ui๋ฅผ ์ด๋ป๊ฒ ์๋ตํ ๊ฒ์ธ๊ฐ ๊ฒฐ์ ํ๋ ํ์์ ๋๋ค.
์ฌ์ฉ์๊ฐ ๋ค์ด์ค๋ ๊ฒฝ๋ก ํ์ผ ์์น
http://a.com/ /pages/index.js
http://a.com/sub/ /pages/sub/index.js
http://a.com/sub/1 /pages/sub/[id].js
http://a.com/sub/2 /pages/sub/[id].js
sub/1, sub/2์ฒ๋ผ ๋์ ์ธ ์ ๋ณด ์ผ ๊ฒฝ์ฐ๋ [id].js ์ผ๋ก ์ฃผ์ ๋ฉ๋๋ค.
์ด์ ์๋ฒ์ชฝ ์ฝ๋๋ ์ด๋ป๊ฒ ๊ตฌํํ๋์ง ์์๋ด ์๋ค.
API Route
์๋ฒ์ API๋ฅผ ๊ตฌํํ๊ณ ์ถ์ผ๋ฉด ๋๋ ํ ๋ฆฌ๊ฐ ์ค์ํ๋ฐ์. /pages/api ๋๋ ํ ๋ฆฌ์ ์๋ฒ ์ฝ๋๋ฅผ ์์ฑํ์๋ฉด ๋ฉ๋๋ค.
http://a.com/api /pages/api/index.js
http://a.com/api/1 /pages/api/[id].js
http://a.com/api/2 /pages/api/[id].js
pages/api/hello.js๋ ๊ธฐ๋ณธ์ ์ธ ์ฝ๋๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ดํด๋ณด๊ฒ ์ต๋๋ค.
export default function handler( req, res) {
res.status(200).json({ name: 'John Doe' })
}
์ฌ๊ธฐ ์ฝ๋๋ Express.js ์ ๊ฐ์ Back-end ๊ธฐ์ ์ ์ผ๋ฐ์ ์ธ ํจํด์ ๋ฐ๋ผ์ ์ฝ๋๋ฅผ ์์ฑํ์๋ฉฐ ํด๋ผ์ด์ธํธ์ชฝ์ ์๋ต์ด ๋ฉ๋๋ค. ์ด๋ status 200์ ์๋ต์ ์ฑ๊ณตํ๋ค๋ ์ฝ๋๊ฐ์ ๋๋ค. ์ ์กํ ๋ฐ์ดํฐ๋ json() ์์ ๋ฃ์ด ์ฃผ์๋ฉด ๋ฉ๋๋ค
/api/hello๋ฅผ ์คํํด ๋ณด๊ฒ ์ต๋๋ค.
pages/api/[id].js๋ฅผ ๊ตฌํํด ๋ณด๊ฒ ์ต๋๋ค. id ๋ฐ์ ๊ฐ์ ๋ฆฌํดํ๋ ๋ถ๋ถ๋ ์ฝ๋์ ๋ฃ๊ฒ ์ต๋๋ค.
export default function handler(req, res) {
res.status(200).json({ id: req.query.id })
}
Reference
https://www.youtube.com/watch?v=ECMB4kUCKWQ&t=10s
'2. Back-end > >> ๐ Next.js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
03-3 ํ๋ฉด๊ตฌ์ฑ (1) | 2022.12.22 |
---|---|
Next.js 13์ผ๋ก ๋ง๋๋ News App (TypeScript, StepZen, Tailwind, Dark Mode, GraphQL) (0) | 2022.12.13 |
Next.js 13 ์ ๋ฆฌ (0) | 2022.12.07 |
๋๊ธ