ํด๋น ๋ธ๋ก๊ทธ ์๋ฆฌ์ฆ๋ ์ ์งํ๊ฒ ๋ฐฐ์๋ณด๋ Next js ์๋ฆฌ์ฆ๋ก์จ ์ด 10๋ถ์์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
Next.js๊ณต์ ํํ์ด์ง์์ ์ด์ผ๊ธฐํ๋ ๋ด์ฉ์ ์ต๋ํ ์ดํดํ๊ธฐ ์ฝ๊ณ ์ง๊ด์ ์ด๊ฒ ๊ตฌ์ฑํ์์ต๋๋ค.
0. ๋ชฉ์ฐจ
1. create-next-app์ผ๋ก next ๊ฐ๋ฐ ํ๊ฒฝ ์ธํ ํ๊ธฐ
2. create-next-app์์ ๋ง๋ ์ฒซ ๋ฒ์งธ ํต์ฌ pages. ๊ทธ๋ฆฌ๊ณ ๋์ ๋ผ์ฐํ
3. ํ์ด์ง๋ฅผ ์ฐ๊ฒฐํ๊ธฐ ์ํ Link-Component ๊ทธ๋ฆฌ๊ณ Pre-Fetch
Dynamic Routing๊ณผ Link๋ฅผ ์ด์ฉํด ๊ฐ๋จํ ๊ฒ์ํ์ ๋ง๋ค์ด๋ณด์.
4. Next.js์์ head ํ๊ทธ๋ฅผ ์กฐ์ํ๋ ๋ฉ์ง ๋ฐฉ๋ฒ
๋ฒ์ธ & ์ค์ต) ์ด๋ฏธ์ง์ ๋์์์ ์ ์ฅํ๊ณ ์ฌ์ฉํด๋ณด์.
5. ์น์ ๋ฐ์ ๊ณผ์ ์ผ๋ก ๋ณด๋ SSG์ SSR
6. next์ ๋ ๋ฒ์งธ ํต์ฌ Pre-Rendering
7. SSG๋ก ๊ฒ์ ์์ง ์ต์ ํ ๋ ธ๋ฆฌ๊ธฐ
8. ์ ์งํ๊ฒ ๋ฐฐ์๋ณด๋ Next.js ์๋ฆฌ์ฆ๋ฅผ ๋ง์น๋ฉฐ..
Next js๋ Server Side Rendering (SSR) ๊ณผ Pre-Rendering ๊ทธ๋ฆฌ๊ณ Search Engine Optimize(SEO) ์ ๊ฐ์ฅ ๊ฐ๋ ฅํ ํ๋ ์์ํฌ๋ค.
์ฐ๋ฆฌ๊ฐ React ์ฑ์ ๋ง๋ค ๋๋ ๋๋ถ๋ถ ๊ฐ์ฅ ์ ๋ช
ํ boiler plate ํ๋ก์ ํธ์ธ create-react-app
์ ์ด์ฉํ์๋ค.
๊ทธ๋ฐ create-react-app
์๋ ํฐ ๋จ์ ์ด ์๋๋ฐ ๋ฐ๋ก Single Page Application์ด๋ผ๋ ์ ์ด๋ค.
SPA์ ๋จ์ ์ ๋ํด์๋ ๊น๊ฒ ์ด์ผ๊ธฐํ์ง ์๊ฒ ๋ค.
๋ด ๋ธ๋ก๊ทธ๋ก ์ ์
๋ ๋น์ ์ ์ด๋ฏธ Next์ ๋ํด์ ์์๋ณด์๊ณ ๊ฐ๋ฐ ํ๊ฒฝ ์ธํ
์ด ๊ถ๊ธํ ์ฌ๋์ด๋.
๊ทธ๋๋ ๊ฐ๋จํ๊ฒ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ธํ ํ๊ธฐ ์ ์ ์ง๊ณ ๋์ด๊ฐ๋ณด์.
Next JS์ ๋ํ์ ์ธ ๊ธฐ๋ฅ
- Server Side Rendering ์ง์
- ๋น ๋ฅด๊ฒ ํ์ด์ง๋ฅผ ๋ก๋ํ๊ธฐ ์ํ Code Splitting
- ํ์ด์ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ Client Side Rendering ๋ํ ์ ๊ณต
- ๊ฐ๋ฐ ํ๊ฒฝ์์ ์๋์ผ๋ก Fast Refresh๊ฐ ๋จ
- Express๋ Node ์๋ฒ์ ๋น ๋ฅด๊ฒ ํผ์ฉ ๊ฐ๋ฅ
์ด์ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ธํ ํด๋ณด์.
Set-Up
Next Project๋ฅผ ์์ฑํ๊ธฐ ์ํด์๋ ๊ฐ๋ฅํ Node๋ฅผ ์ต์ ๋ฒ์ ์ผ๋ก ์ต์ ํ ํ๊ณ ํ๋ ๊ฒ์ ์ถ์ฒํ๋ค.
Next๋ window, Mac, Linux ๋ชจ๋ ๋์ํ๋ฉฐ ๊ธฐ๋ณธ์ ์ผ๋ก node.js ์๋์ ๋์๊ฐ๊ธฐ ๋๋ฌธ์ node๊ฐ ํ์ํ๋ค.
๊ฐ๊ฐ ์ด์์ฒด์ ๋ณ๋ก ์ค์น ๋ฐฉ๋ฒ์ ์ฐจ์ด๊ฐ ์๊ฒ ์ง๋ง mac์ ๊ธฐ์ค์ผ๋ก ์ค๋ช ํ๊ฒ ๋ค.
Project Set-Up ์ 2๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ํ ์ ์๋ค.
- ๊ณต์ ํํ์ด์ง์์ ์ ๊ณตํ๋ Blog ์์ ๋ก ๋ง๋๋
create-next-app
- npm์ ์ด์ฉํ์ฌ ์ง์ next ํ๊ฒฝ ๊ตฌ์ถํ๊ธฐ
2๊ฐ์ง ๋ฐฉ๋ฒ์ ๋ค ์ค๋ช
ํ๊ฒ ์ง๋ง ํด๋น ์๋ฆฌ์ฆ์์๋ ๋ถํ์ํ ๋ถ๋ถ์ ์ต๋ํ ์๋ตํ๊ธฐ ์ํด์ ๊ณต์ ํํ์ด์ง์์ ์ ๊ณตํ๋ create-next-app
์ผ๋ก ์ค๋ช
์ ์งํํ๊ฒ ๋ค.
1. Blog ์์ ๋ก ๋ง๋๋ create-next-app
์์๋ ๋ค์๊ณผ ๊ฐ๋ค.
- npx ํน์ npm์ผ๋ก ํ๋ก์ ํธ ์์ฑ
- ํด๋น ๋๋ํ ๋ฆฌ๋ก ์ด๋
- npm ๋ช ๋ น์ด๋ก next ํ๋ก์ ํธ ์คํ
npx ํน์ npm์ผ๋ก ํ๋ก์ ํธ ์์ฑ
npx create-next-app nextjs-blog --use-npm --example "https://github.com/vercel/next-learn-starter/tree/master/learn-starter"
npx ๋ช ๋ น์ด๋ก create-next-app์ ์คํ์ํค๋๋ฐ, next js์์ ์ ๊ณตํ๋ boiler project๋ฅผ github์์ ๋ค์ด๋ฐ๊ฒ ๋๋ค.
๊ทธ๋ผ ๋ค์๊ณผ ๊ฐ์ด ์ฑ๊ณต์ ์ผ๋ก ์์ฑ์ด ์๋ฃ๋๋๋ฐ,
ํด๋น ๋๋ ํ ๋ฆฌ๋ก ์ด๋
๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ํ ๋ฒ ๋ด๋ณด์.
์์ ๋ฐฉ๋ฒ์ผ๋ก ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ค๋ฉด ์๋ง nextjs-blog ๋ผ๋ ์ด๋ฆ์ ๋๋ ํ ๋ฆฌ๊ฐ ์์ฑ๋์์ ๊ฒ์ด๋ค.
cd nextjs-blog
์ผ๋ก ํด๋น ๋๋ ํ ๋ฆฌ๋ก ์ด๋ํด์ฃผ์.
npm ๋ช ๋ น์ด๋ก next ํ๋ก์ ํธ ์คํ
npm ๋ช
๋ น์ด๋ package.json
์ ๋ช
์๋์ด ์๋ค.
์ฌ๊ธฐ์ dev ๋ช ๋ น์ด๋ฅผ ์ด์ฉํด์ ์ฐ๋ฆฌ๋ ๊ฐ๋ฐ์ ์ํ ๊ฒ์ด๋ค.
๊ทธ๋ฆฌ๊ณ
npm run dev
๋ช
๋ น์ด๋ฅผ ์ณ์ฃผ๋ฉด ๋ค์๊ณผ ๊ฐ์ ํ์ด์ง๊ฐ localhost:3000
์์ ๋์๊ฐ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
2. npm์ ์ด์ฉํ์ฌ ์ง์ next ํ๊ฒฝ ๊ตฌ์ถํ๊ธฐ
๋ค์์ npm์ ์ด์ฉํด์ ์ง์ next ํ๊ฒฝ์ ๊ตฌ์ถํ๋ ๋ฐฉ๋ฒ์ด๋ค.
์์๋ ๋ค์๊ณผ ๊ฐ๋ค.
- ํ๋ก์ ํธ ๋๋ ํฐ๋ฆฌ ์์ฑ
- npm Init
- React, React Dom, Next ์ค์น
- ๊ฐ๋ฐ๊ณผ ๋น๋ ์คํ์ ์ํ
package.json
์คํฌ๋ฆฝํธ ์ค์
ํ๋ก์ ํธ ๋๋ ํฐ๋ฆฌ ์์ฑ
my-next-app
์ด๋ผ๋ ๋๋ ํฐ๋ฆฌ๋ฅผ ์์ฑํด์ฃผ๊ณ ํด๋น ๋๋ ํ ๋ฆฌ๋ก ์ด๋ํ๋ค.
mkdir my-next-app
cd my-next-app
npm Init
์ด์ ํด๋น ๋๋ ํ ๋ฆฌ๋ฅผ npm ํ๋ก์ ํธ๋ก ๋ง๋ค๊ธฐ ์ํด์ npm init -y
๋ช
๋ น์ด๋ฅผ ์
๋ ฅํด์ค๋ค.
๊ทธ๋ผ ์์ ํฐ๋ฏธ๋์ฒ๋ผ ๋น์ด์๋ package.json ํ์ผ์ด ์์ฑ๋๋ค.
React, React Dom, Next ์ค์น
์ด์ ํด๋น npm ํ๋ก์ ํธ๋ฅผ React์ Next๋ฅผ ์ํ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค์ด๋ณด์.
npm install --save react react-dom next
๊ทธ๋ผ npm ๋ชจ๋์ด ํ๋ก์ ํธ๋ฅผ ๋ค์ด๋ก๋ ๋ฐ๊ฒ๋๊ณ ๋ค์๊ณผ ๊ฐ์ ํฐ๋ฏธ๋ ํ๋ฉด์ด ๋์จ๋ค.
๊ฐ๋ฐ๊ณผ ๋น๋ ์คํ์ ์ํ package.json
์คํฌ๋ฆฝํธ ์ค์
์ด์ ๊ฐ๋ฐ๊ณผ ๋น๋๋ฅผ ์ํด์ package.json
์ npm script๋ค์ ์ถ๊ฐ์์ผ๋ณด์.
์ฐ๋ฆฌ๋ next ํ๋ก์ ํธ๋ฅผ ์คํ์ํค๊ธฐ ์ํด์ npm run dev
๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๋ค.
vim package.json
vim ์ผ๋ก package.json
์ ๋ค์ด๊ฐ๋ฉด script๊ฐ test๋ฐ์ ์๋๋ฐ ๋ค์ 3๊ฐ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ถ๊ฐํด ์ ์ฅํด๋ณด์.
"script" : {
"dev": "next",
"build": "next build",
"start": "next start"
},
i๋ก insert ๋ชจ๋๋ก ์ง์ ํ๊ณ esc +
:wq
๋ก ์ ์ฅํ๊ณ ๋น ์ ธ๋์ค์.
๊ทธ๋ผ ์๋์ ๊ฐ์ด ์ค์ ์ด ๋ค ๋์๋ค.
๊ทธ๋ฆฌ๊ณ npm run dev
๋ช
๋ น์ด๋ฅผ ์ณ์ next ์ฑ์ ์คํ์์ผ๋ณด์.
๋ง์ฝ ์ด์ ๊ฐ์ ์ค๋ฅ๊ฐ ๋๋ค๋ฉด
npm install react -y
๋ช ๋ น์ด๋ก ๋ฆฌ์กํธ๋ฅผ ํ๋ฒ ๋ ์ถ๊ฐ์์ผ์ฃผ๋ฉด ๋๋ค.
๊ทธ๋ฆฌ๊ณ localhost;3000 ์ผ๋ก ๋ค์ด๊ฐ๋ฉด
์ด์ ๊ฐ์ ํ์ด์ง๊ฐ ๋์์ผ ํ๋ค.
์ด๋ ํ์ฌ next ํ๋ก์ ํธ์์ ๊ฐ์ฅ ์ฒ์์ผ๋ก ๋ผ์ฐํ ํด์ผํ ํ์ด์ง๋ฅผ ์ฐพ์ง ๋ชปํ๋ค๋ ๋ป์ธ๋ฐ, ์์ ๋ค๋ฅด๊ฒ ๋น์ฐํ ์ฐ๋ฆฌ๋ ์๋ฌด ์ฝ๋๋ฅผ ์์ฑํ์ง ์์๊ธฐ ๋๋ฌธ์ ๋จ๋ ๊ฒ์ด๋ค.
์์ ํ๊ธฐ
๋ง์ฝ ์ฒซ ๋ฒ์งธ ๋ฐฉ๋ฒ์ผ๋ก ํ๋ก์ ํธ๋ฅผ ๋ง๋ค์๋ค๋ฉด pages ๋ผ๋ ๋๋ ํ ๋ฆฌ๊ฐ ์์ ๊ฒ์ด๋ค.
์๋ฒ๋ฅผ ์ผ ์ํ๋ก ํด๋น ๋๋ ํ ๋ฆฌ์์ index.js ํ์ผ์ ์์ ํ๋ค๋ฉด create-react-app
๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฐ๋ก ์๋ก๊ณ ์นจ์ด ๋๋ค.
์ด๊ฒ์ Fast Refresh๋ผ๋ ๊ธฐ์ ์ด๋ผ๊ณ ๋ถ๋ฅด๋๋ฐ, ์์ธํ ๊ฒ์ Next ๊ณต์ํํ์ด์ง์ What is Fast Refresh?์์ ํ์ธํ ์ ์์ผ๋ ์ฐธ๊ณ ํ์.
์ด๋ ๊ฒ npm ์ผ๋ก next ํ๋ก์ ํธ๋ฅผ ์ค์ ํ๋ ๊ฒ์ ๋ํด์ ์์๋ณด์๋ค.
๋ค์ ์๊ฐ์๋ next์์ ๋ผ์ฐํ ์ ํ๋ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณผ ๊ฒ์ด๋ค.
์์ผ๋ก์ ๋ช๊ฐ ํ๋ก์ ํธ์์๋ ์ฒซ ๋ฒ์งธ ๋ฐฉ๋ฒ์ผ๋ก ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ค๊ณ ๊ฐ์ ํ๊ณ ์ด๋ฃจ์ด์ง ๊ฒ์ด๋ ์ฒซ ๋ฒ์งธ ๋ฐฉ๋ฒ์ผ๋ก ํ๋ก์ ํธ๋ฅผ ์์ฑํ์ฌ ๋ฐ๋ผ๊ฐ๋ฉด ์ข์๊ฒ ๊ฐ๋ค.
๋๊ธ