April 22, 2020
์ด๋ฒ ํฌ์คํ ์์๋ , ์๋ฒ๋ฆฌ์ค์ ๋ํ ๊ฐ๋ ์ ์์๋ณด๊ณ ๋ํ์ ์ธ 3๊ฐ์ ๋ฐฐํฌ ํ๋ซํผ์ Netlify, Vercel, Github page ๋ชจ๋ ์ฌ์ฉํด๋ณด๋ฉฐ ๋น๊ตํด๋ณด๊ธฐ๋ก ํ๋ค.
Vercel์ ๊ธฐ์กด์๋ zeit now์์๋๋ฐ, โ2020๋ 4์ 21์ผโ๋ถํฐ zeit์์ Vercel๋ก ๋ธ๋๋ ๋ค์์ ๋ฐ๊ฟจ๋ค.
์กฐ๊ธ๋ ๋ฐฑ์๋ url์ด๋ ๋น๋(๋ฒ๋ค๋ง)์ ๊ด์ฌํ๊ณ ์ถ์ผ๋ฉด github page
๋ฅผ,
์ฝ๊ฒ ๋ฐฐํฌํ๊ณ ์ถ์๋ฐ ๋ฐฐํฌํ ํ์ด์ง๊ฐ ํฌ๊ธฐ๊ฐ ํฌ๋ค๋ฉด vercel
,
์ฝ๊ฒ ๋ฐฐํฌํ๊ณ ์ถ์๋ฐ ๋ฐฐํฌํ ํ์ด์ง๊ฐ ๋ณ๋ก ํฌ์ง ์๋ค๋ฉด netlify
๋ฅผ ์ถ์ฒํ๋ค.
์๋ํ๋ฉด ๋ฌด๋ฃ๊ธฐ์ค์ผ๋ก vercel์ ํ๋ฃจ์ ๋น๋ํ ์ ์๋ ์ต๋๊ฐฏ์๋ก ์ ํํ๊ณ , netlify๋ ํ๋ฌ์ ๋น๋ํ ์ ์๋ ์ต๋์๊ฐ์ผ๋ก ์ ํํ๋ค.
๊ฐ์ธ์ ์ธ ์๊ฐ์ ๋๋ค! ๐
๋ฐฐํฌํ ํ๋ก์ ํธ ์์ค
nextJS๋ ๋ฆฌ์กํธ ํ๋ ์์ํฌ
๋ก ๋งค์ฐ ํธ๋ฆฌํ ๋ผ์ฐํ
์์คํ
๊ณผ ์๋ฒ์ฌ์ด๋๋ ๋๋ง(SSR)์ ์ง์ํ๋ค.
๋๋ ๊ฐ์ธ ํ๋ก์ ํธ๋ฅผ ํ ๋, ๋ผ์ฐํ ์ด ํ์์๋ ์ดํ๋ฆฌ์ผ์ด์ ์ด์ด๋ ํ๋ก์ ํธ๊ฐ ํ์ฅ๋ ๊ฒฝ์ฐ๋ฅผ ๋ฏธ๋ฆฌ ๋๋นํ์ฌ nextJS ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๋ค.
nextJS์ Routing system์ ํ๋ก์ ํธ pages ๋๋ ํ ๋ฆฌ์์ ์ด๋ฃจ์ด์ง๋ค.
root
โโโ components
โโโ pages
โ โโโ _app.jsx
โ โโโ _document.jsx
โ โโโ index.jsx
โ โโโ page1.jsx
โ โโโ page2.jsx
โ โโโ page3.jsx
โ โโโ page4.jsx
...
next ํ๋ ์์ํฌ์ ์ฃผ์ ์ฒด๊ณ์์ '/'
์ฆ, ํด๋น ํ๋ก๊ทธ๋จ์ homepage๋ ๊ธฐ๋ณธ์ ์ผ๋ก index.js
๋ฅผ ์คํํ๋ค.
๊ทธ๋ฆฌ๊ณ pages ์์ ๋๋ ํ ๋ฆฌ๋ฅผ ๋ฃ๊ฑฐ๋ jsx ํ์ผ (์ ํํ๋ ๋ฆฌ์กํธ ์ปดํฌ๋ํธ)์ ๋ฃ์ผ๋ฉด next ํ๋ ์์ํฌ์์ ์ด๋ฅผ ๋ฐ์ํด ์๋์ผ๋ก routing system์ ๊ตฌ์ถํด์ค๋ค.
pages/page1.jsx => sitename.com/page1
pages/page2.jsx => sitename.com/page2
์ด์ฒ๋ผ nextJS ํ๋ ์์ํฌ๋ ํ๋ก์ ํธ์ ๋ผ์ฐํ ์ ์ง๊ด์ ์ด๊ณ ํธ๋ฆฌํ๊ฒ ๊ด๋ฆฌํ ์ ์๋ค.
๊ทธ๋ผ ์ด๋ฌํ nextJS๋ก ๋ง๋ค์ด์ง ์น์ฌ์ดํธ๋ฅผ ์ด๋ป๊ฒ ๋ฐฐํฌํ ๊น?
๊ณผ๊ฑฐ์๋ ์น์ฌ์ดํธ๋ฅผ ๋ฐฐํฌํ ๋, ์์ฑ๋ ํ๋ก๊ทธ๋จ์ ๋๋ฆฌ๋ ์๋ฒ๋ฅผ ๋๊ณ , ์ง์ ํ๋์จ์ด๋ ์ด์์ฒด์ ๊ทธ์ธ์ ๋ชจ๋ ๋ถ๋ถ๋ค์ ์ง์ ๊ด๋ฆฌํ์ด์ผ ํ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๊ฐ๋จํ ์น์ฌ์ดํธ๋ฅผ ๋ฐฐํฌํ๊ธฐ ์ํด์๋ ๋น์ฉ๊ณผ ์๊ฐ์ด ๋ง์ด ๋ค์๋ค.
๊ทธ๋ฌ๋ค AWS๋ Azure๊ฐ์ ํด๋ผ์ฐ๋ ์ปดํจํ
์๋น์ค๊ฐ ๋ฑ์ฅํ๊ฒ ๋๊ณ ์๋ฒ ์ธํ๋ผ๋ค์ ๊ณต๊ธ์
์ฒด์์ ๊ด๋ฆฌํ๊ณ ์ฌ์ฉ์๋ ๋ณด๋ค ์ฝ๊ฒ ์น์ฌ์ดํธ๋ฅผ ๋ฐฐํฌํ ์ ์๊ฒ ๋์๋ค. ์ด๋ฌํ ๋ฐฉ์์ IaaS
(Infrastructure as a Service)๋ผ๊ณ ํ๋ค.
๋ ๋์๊ฐ ์๋ฒ๋ฆฌ์ค๋ผ๋ ๊ฐ๋ ๋ ๋ฑ์ฅํ๋๋ฐ, ์์ IaaS์ฒ๋ผ ์๋ฒ๋ฅผ ๊ด๋ฆฌํ ํ์๋ ์์ด ํด๋ผ์ฐ๋ ์ ๊ณต์ ์ฒด์ ๋ฆฌ์์ค(ํ๋ก๊ทธ๋จ)๋ง ํ ๋นํ๋ฉด ๋ฐ๋ก ํ๋ก๋์ ํ๊ฒฝ์ผ๋ก ๋ฐฐํฌํ ์ ์๊ฒ ๋์๋ค. ์๋ฒ๋ฆฌ์ค๋ ์๋ฒ๊ฐ ์๋ค๋ ์๋ฏธ๊ฐ ์๋๋ผ ๊ฐ๋ฐ์์๊ฒ ์๋ฒ ์ธํ๋ผ ๊ตฌ์ฑ์ ๋ถ๋ด์ ๋๊ณ ์ฝ๋์ ์ง์คํ ์ ์๊ธฐ ๋๋ฌธ์ ์๋ฒ๋ฅผ ์๊ฐํ ํ์๊ฐ ์๋ค๋ ์๋ฏธ๋ก์ ์ฐ์ด๋ ๊ฒ ๊ฐ๋ค.
Netlify ์ Vercel ๊ฐ ๋ฐ๋ก ์๋ฒ๋ฆฌ์ค ํ๋ซํผ์ด๋ค. ์ ํํ ๋งํ๋ฉด AWS lambda๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ FaaS
(Functions as a Service) ํ๋ซํผ์ด๋ค. IaaS์ ๊ฒฝ์ฐ์๋ ์๋ฒ ์ธํ๋ผ๋ฅผ ๊ตฌ์ฑํ๊ณ ์น์ฌ์ดํธ๋ฅผ ๋ฐฐํฌํ๋ฉด 24์๊ฐ ๊ทธ ์ฝ๋๊ฐ ๋์๊ฐ์ง๋ง, FaaS ๋ ํ๋ก์ ํธ๋ฅผ ์ฌ๋ฌ๊ฐ์ ํจ์๋ก ์ชผ๊ฐ์ ๋งค์ฐ ๊ฑฐ๋ํ๊ณ ๋ถ์ฐ๋ ์ปดํจํ
์์์ ํจ์๋ฅผ ๋ฑ๋กํ๊ณ , ์ด ํจ์๋ค์ด ์คํ๋๋ ํ์ (๊ทธ๋ฆฌ๊ณ ์คํ๋ ์๊ฐ) ๋งํผ ๋น์ฉ์ ๋ด๋ ๋ฐฉ์์ ๋งํ๋ค. ์๋ฒ๋ฆฌ์ค ์ํคํ
์ณ๋?
โ๏ธ ์ถ๊ฐ๋ก Netlify ์ Vercel์ Lambda ๋ฟ๋ง ์๋๋ผ ๋ฐฑ์๋ ๊ธฐ๋ฅ๋ ์ ๊ณตํด์ ๋ฆฌ์์ค๋ฅผ ์ ๊ทผํ๊ธฐ๋ ์ฝ๋ค.
๊ทธ๋ผ ๋ ๊ฐ์ ์๋ฒ๋ฆฌ์ค ํ๋ซํผ๊ณผ ์ถ๊ฐ๋ก ๊นํํ์ด์ง๊น์ง ์ด๋ค ์ฐจ์ด์ ์ด ์์๊น?
Overview (๋ฌด๋ฃ ๊ธฐ์ค)
Netlify | Vercel | |
---|---|---|
๋ฉ๋ชจ๋ฆฌ ์ ํ | 1024 MB | 1024 MB |
์คํ์๊ฐ ์ ํ | 10s | 10s |
ํ์ด๋ก๋ | 6 MB | 5 MB |
bandwidth | 100GB/month | 100GB/month |
ใดExtra bandwidth | $20/100GB | Pro ๋ฑ๋ก(์๋ณ์๊ธ) |
Builds/day | 100๊ฐ | |
ใดExtra Builds | Pro ๋ฑ๋ก(์๋ณ์๊ธ) | |
Build minutes | 300m/month | |
ใดExtra build minutes | $7/500m | |
Serverless Functions ๊ฐ์์ ํ | 12 | |
Serverless Function ํฌ๊ธฐ์ ํ | 50 MB. |
์์ง ํ์์ธ ๋๋ ๊ณผ๊ธ์ด ๋ค์ด๊ฐ๋ ๋ถ๋ถ์ ์ณ๋ค๋๋ณด์ง ์๊ณ ๋ฌด๋ฃ ์ฌ์ฉ์ ๊ธฐ์ค์ ์คํ,์ ํ๋ง ๋น๊ตํด๋ณด์๋ค.
๊ณต๋ถ์ฉ์ผ๋ก ๋ง๋ AWS ๊ณ์ ์์ ์ด๊ฒ์ ๊ฒ ๋๋ฌ๋ณด๋ค 1๋ง 5์ฒ์์ ๋นผ์๊ธด ์ํ ๊ธฐ์ต์ด ์๋ค..
ํด๋น ์คํ์ ๋ณ๊ฒฝ๋ ์ ์๋ค. (ํ์ฌ 2020.4.24 ๊ธฐ์ค)
๋ฉ๋ชจ๋ฆฌ, ์คํ์๊ฐ, ํ์ด๋ก๋๋ ๋ ํ๋ซํผ์ด ๋น์ทํ ์ ํ์ ๋๊ณ ์์๋ค. AWS lambda๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ FaaS ํ๋ซํผ์ด๊ธฐ ๋๋ฌธ์ lambdaํจ์์ ํํ๋ก ๊ณ์ฐ๋๋ค.
bandwidth ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ ํ๋ซํผ ๋ชจ๋ 100GB/month ์ด์ง๋ง, Netlify์ ๊ฒฝ์ฐ 100GB๋น $20๋ก ์ถ๊ฐ ๊ตฌ๋งค๋ฅผ ํ ์ ์์ง๋ง, Vercel์ ๊ฒฝ์ฐ ์๋ณ ์๊ธ์ ๋ก ๋ฑ๋กํด์ผ๋ง ์ ํ์ ๋๋ฆด ์ ์๋ค.
ํ๋ฃจ ๋น ๋น๋ ๊ฐ์ ์ ํ์ Vercel
์๋ง ์๋ ์กฐ๊ฑด์ธ๋ฐ, ๋ฌด๋ฃ ์ฌ์ฉ์์ ๊ฒฝ์ฐ ํ๋ฃจ์ 100๊ฐ ์ดํ์ ๋น๋๋ฅผ ํ ์ ์๋ค.
๋น๋ ์๊ฐ์ Netlify
์๋ง ์๋ ์กฐ๊ฑด์ด๋ค. ํ๋ฌ์ ๋น๋์ ๊ฑธ๋ฆฐ ์๊ฐ 300๋ถ ์ ํ์ด ์๋ค.
์ด ๋ธ๋ก๊ทธ๋ Netlify๋ฅผ ์ด์ฉํ๋๋ฐ, ๋ด ๊ณ์ ์ ๋ค์ด๊ฐ ํ์ธํด๋ณด๋ ํ์ฌ๊น์ง 79๋ถ ์ฌ์ฉํ๋ค๊ณ ๋์์์๋ค.
serverless function์ ์ค์ ์๋ฒ์ฌ์ด๋์์ ๋ ๋๋ง ๋๋ ํจ์๋ฅผ ์๋ฏธํ๋ค. ์ฆ, nextJS์์์ pages๋ค์ ์๋ฏธํ๋ค. Vercel
์ ๊ฒฝ์ฐ, ์ด๋ฌํ serverless function์ 12๊ฐ๋ก ์ ํํ๋ค. ๋ํ 50MB๋ฅผ ๋์ด์๋ ์๋๋ค.
vercel์ด ๋น๋ ๋ก๊ทธ์ธ๋ฐ ฮป ์๊ฒ serverless function๋ฅผ ์๋ฏธํ๋ค.
12๊ฐ๋ฅผ ๋์ผ๋ฉด ๋น๋๋ฅผ ์คํจํ๋ค.
vercel
์์ ์์ ์ฌ์ง ์ฒ๋ผ nextJS ํ์ด์ง๊ฐ 11๊ฐ(404ํ์ด์ง๊น์ง 12๊ฐ)๋ฅผ ๋์ด๊ฐ๋ฉด Serverless Functions ์ ํ์ผ๋ก ์ธํด ๋น๋๊ฐ ์๋์๋ค. ๊ทผ๋ฐ Vercel์ nextJS๋ก exportํ Static HTML์์ ๋ํด์๋ Serverless Functions๋ก ์นด์ดํธ ํ์ง ์๋๋ค๊ณ ๊ณต์๋ฌธ์์ ์ธ๊ธ์ด ๋์ด์์๋ค.
ํธ์คํ
์ต์
์ node ๋ก ํ ์, next start๋ฅผ ์ฌ์ฉํ์ง๋ง, static HTML ๋ฐฐํฌ์์๋ next export๋ฅผ ํด์ผํ๋ค. ์ฆ vercel ๋ฐฐํฌ์, ๋ฐฐํฌ ๋ช
๋ น์ด ์ปค๋งจ๋๋ฅผ next build
๋์ next export
๋ฅผ ํด์ฃผ์ด์ผํ๋ค.
์ฆ, ๋๋ค๋ฐฉ์์ด ์๋๋ผ ์ ์ html ๋ฐฉ์์ผ๋ก ๋ฐ๊ฟ์ฃผ์ด์ผ 12๊ฐ ์ด์์ ํ์ด์ง๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
์ฐธ๊ณ ๋งํฌ : nextJS ํธ์คํ ์ต์
vercel Sourceํญ์์ lambda ๋ฐฉ์์ ํ์ด์ง์ธ์ง ์ ์ html ํ์ ์ ํ์ด์ง์ธ์ง ํ์ธ ํ ์ ์๋ค.
๋๋ค๋ฐฉ์์ ํ์ด์ง
html๋ฐฉ์์ ํ์ด์ง
Github page๋ FaaS ํ๋ซํผ๊ณผ ๋ฌ๋ฆฌ
1๏ธโฃ ๋ฐฐํฌ์, ์ฝ๋๋ฅผ ์์ ํด์ค์ผ ํ๋ค. (ํ์ด์ง๋ผ์ฐํ ์ด๋ default Url์ ๋ฃ์ด์ฃผ๋ ์์ )
2๏ธโฃ ์ปค์คํ ๋๋ฉ์ธ ๊ณผ์ ์ด ๊น๋ค๋กญ๋ค.
3๏ธโฃ ์์ FaaS ํ๋ซํผ๊ณผ ๋ฌ๋ฆฌ ์ ์ฅ์์ ํฌ๊ธฐ๊ฐ 1024MB๋ง ๋์ง ์๊ฒ ํด์ฃผ๋ฉด ๋๋ค.
๋ผ๋ ํน์ง์ด ์๋ค.
์ฐธ๊ณ ๋งํฌ : Github page vs Netlify
๋ค์์ผ๋ก ์๋ง๋ฒ ํ๋ก์ ํธ ๋ฐฐํฌ์ฉ์ ์ด์ฉํด์ ๊ฐ๊ฐ์ ํ๋ซํผ๋ณ๋ก ๋ชจ๋ ๋ฐฐํฌํด๋ณด์๋ค.
๋ฐฐํฌ์ฝ๋์ ๊ณต์์์ ๋ zeit/next.js/examples/gh-page ์์, ๋ฐฐํฌ ๋ฐฉ๋ฒ์ nextjs gh-pages๋ก ๋ฐฐํฌํ๊ธฐ ์์ ์ฐธ๊ณ ํ๋ค.
Github page๋ก ๋ฐฐํฌํ ์๋ง๋ฒ ํ๋ก์ ํธ ๋ฐฐํฌ์ฉ
package.json ํ์ผ ์์ โscriptโ ์์ฑ์ โdeployโํ๋ ๋ช ๋ น์ด๋ฅผ ์ถ๊ฐํ๋ค.
"scripts": {
"dev": "next",
"build": "next build",
"start": "next start",
"deploy": "rm -rf node_modules/.cache && next build && next export && touch out/.nojekyll && git add out/ && git commit -m \"Deploy Next.js to gh-pages\" && git subtree push --prefix out origin gh-pages"
},
1๏ธโฃ rm -rf node_modules/.cache : node_modules ์บ์์ ๊ฑฐ
2๏ธโฃ next build : next ํ๋ก์ ํธ ๋น๋
3๏ธโฃ next export : next ํ๋ก์ ํธ๋ฅผ static html์ฑ์ผ๋ก ์ปดํ์ผํ out/ ํด๋๋ฅผ ์์ฑํด ์ค
4๏ธโฃ touch out/.nojekyll : Github page์ jekyll ์ฒ๋ฆฌ๊ณผ์ ์์ _next
์ด๋ฌํ ํ์ผ์ ํน์ ๋ฆฌ์์ค๋ก ๊ฐ์ฃผํ๊ณ ์ต์ข
์ฌ์ดํธ์ ๋ณต์ฌํ์ง ์๋๋ฐ .nojekyll
ํ์ผ์ ๋ง๋ค๋ฉด ์ด๋ฅผ ๋ง์ ์ ์๋ค.
5๏ธโฃ git add out/ : git add
6๏ธโฃ git commit -m : ์ปค๋ฐ๋ฉ์์ง ์์ฑ
7๏ธโฃ git subtree push โprefix out origin gh-pages : github ์ ์ฅ์ gh-pages๋ธ๋์น์ push
npm run deploy // ๋ฐฐํฌ๋ช
๋ น์ด
next.config.js ํ์ผ์ด ๋ฃจํธ ํด๋์ ์๋ค๋ฉด ํ์ผ์ ์์ฑํ๊ณ ๋ค์๊ณผ ๊ฐ์ ์ฝ๋๋ฅผ ๋ฃ์ด์ค๋ค. name์ ๊นํ๋ธ ์ ์ฅ์ ์ด๋ฆ์ ๋ฃ์ด์ค๋ค.
// next.config.js
const debug = process.env.NODE_ENV !== 'production'
const name = 'small-magic-project-deployment'
module.exports = {
assetPrefix: !debug ? `/${name}/` : '',
}
๊ฐ๋ฐ๋ชจ๋์์๋ requestURL=localhost:3000/ ์ ๋ฆฌ์์ค๋ฅผ ์์ฒญํ์ง๋ง,
๋ฐฐํฌ๋ชจ๋์๋ requestURL = taenykim.github.io/ ์ ์์ฒญํ๋ค.
ํ์ง๋ง ๋ฐฐํฌ๋ชจ๋ ์, ์ ์์ ์ธ ๋ฆฌ์์ค ์์ฒญ์ฃผ์๋
requestURL = taenykim.github.io/small-magic-project-deployment
์ด๊ธฐ ๋๋ฌธ์, assetPrefix ์์ฑ์ ํตํด ๋ฆฌ์์ค ์์ฒญ ์ฃผ์๋ฅผ ๋ฐ๋ก ๋ฃ์ด์ฃผ์ด์ผ ํ๋ค.
env-config.js ํ์ผ์ ๋ฃจํธ ํด๋์ ๋ง๋ค์ด์ฃผ๊ณ , .babelrc.js
ํ์ผ ์์ ํ๋ฌ๊ทธ์ธ์ ๋ฑ๋กํด์ค๋ค.
// env-config.js
const debug = process.env.NODE_ENV !== 'production'
const name = 'small-magic-project-deployment'
module.exports = {
'process.env.BACKEND_URL': !debug ? `/${name}` : '',
}
// .babelrc.js
const env = require('./env-config')
module.exports = {
presets: ['next/babel'],
plugins: [['transform-define', env]],
}
์ด ํ์ผ์ ํตํด process.env.BACKEND_URL
๋ผ๋ ํ๊ฒฝ๋ณ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ์ด ํ๊ฒฝ๋ณ์๋ ์ด๋ฏธ์ง, ๋์์ ๋ฑ์ ๋ฆฌ์์ค์ ์ ๊ทผํ๊ฑฐ๋ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ง๋ URL์ ์ค์ ํ ๋ ์ฐ์ธ๋ค. (๋ฐ์์ ๊ณ์)
์ด๋ฏธ์ง, ๋์์ ๋ฑ์ ๋ฆฌ์์ค์ ์ ๊ทผํ ๋๋ ๋ง์ฐฌ๊ฐ์ง๋ก ์์์ ๋ง๋ ํ๊ฒฝ๋ณ์๋ฅผ ์ฌ์ฉํด์ process.env.BACKEND_URL
๋ฆฌ์์ค์ ์ ๊ทผํด์ผ ํ๋ค.
<ImageContainer onClick={storeReset}>
<img src={process.env.BACKEND_URL + '/cancel.png'} />
</ImageContainer>
์์์ ์ธ๊ธํ๋ฏ, /cancle.png ๋ง ์ ์ผ๋ฉด,
requestURL = taenykim.github.io/cancel.png ์ ์์ฒญํ๋ค.
nextJS์ ํ์ด์ง ๋ผ์ฐํ ์
Link
๋ฅผ ์ด์ฉํ๋ฉฐ,a
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๋ฌ๋ฆฌ ์๋ก๊ณ ์นจ์ด ๋ฐ์ํ์ง ์๋๋ค. (์ฑ๊ธํ์ด์ง ์ดํ๋ฆฌ์ผ์ด์ )
Link๋ก ๋ผ์ฐํ ์, href๋ง ์ ์ด์ค ๊ฒฝ์ฐ, ์ดํ๋ฆฌ์ผ์ด์ ์ด ๋์ํ๋ ๋ฐ์๋ ๋ฌด๋ฆฌ๊ฐ ์์ง๋ง, ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ง๋ URL์ด ์ด์ํ๊ฒ ์ฐํ๋ค. ์ฆ as์ ์์์ ๋ง๋ ํ๊ฒฝ๋ณ์๋ฅผ ์ด์ฉํด ์ฌ์ฉ์๊ฒ ๋ณด์ฌ์ง๋ URL๋ ์ง์ ๋ฃ์ด์ฃผ์ด์ผํ๋ค.
as๋ฅผ ๋ฃ์ด์ฃผ์ง ์์๊ฒฝ์ฐ
taenykim.github.io / page1
as๋ฅผ ๋ฃ์ด์ค ๊ฒฝ์ฐ
taenykim.github.io / small - magic - project - deployment / page1
const AppIcon = ({ idx }) => {
const url = `/page${idx}`
const appIconName = 'PAGE' + idx
return (
<Link href={url} as={process.env.BACKEND_URL + url}>
<a style={{ textDecoration: 'none' }}>
<AppIconContainer idx={idx}>
<div>{appIconName}</div>
</AppIconContainer>
</a>
</Link>
)
}
netlify ๋ฐฐํฌ๋ฐฉ๋ฒ์ ๋งค์ฐ ๊ฐ๋จํ๋ค.
Netlify๋ก ๋ฐฐํฌํ ์๋ง๋ฒ ํ๋ก์ ํธ ๋ฐฐํฌ์ฉ
package.json ํ์ผ ์์ โscriptโ ์์ฑ์ โdeployโํ๋ ๋ช ๋ น์ด๋ฅผ ์ถ๊ฐํ๋ค.
github page ๋ฐฐํฌ์ ๊ตฌ๋ถ์ ๋๊ธฐ ์ํด โnetlify-deployโ ๋ผ๋ ์ด๋ฆ์ผ๋ก ์์ฑํ๋ค.
"scripts": {
"dev": "next",
"build": "next build",
"start": "next start",
"netlify-deploy": "next build && next export"
},
netlify ์ฌ์ดํธ์ ์ ์ํด์ ๊ฐ์ ํน์ ๋ก๊ทธ์ธ์ ํ ํ, new site from Git ํด๋ฆญ!
github ํด๋ฆญ
๋จผ์ ์์ ์ github ๊ณ์ ์ netlify ์ดํ๋ฆฌ์ผ์ด์ ์ ์ค์นํ๊ณ ๋ฐฐํฌํ ํ๋ก์ ํธ repository์ access๋ฅผ ์ด์ด์ฃผ์ด์ผ ํ๋ค. Configure the Netlify app on GitHub๋ฅผ ๋๋ฅด๋ฉด ์ฝ๊ฒ ์งํํ ์ ์๋ค.
๊ทธ๋ค์ ๋ฐฐํฌํ ํ๋ก์ ํธ repository๋ฅผ ์ฒดํฌํด์ฃผ๊ณ save!
๋ฐฐํฌ์ ๋น๋ ๋ช ๋ น์ด์ ํด๋์ด๋ฆ์ ์ค์ ํ์ฌ์ผ ํ๋๋ฐ, ๋น๋ ๋ช ๋ น์ด๋ ์ค์ ๋ฐฐํฌ ์, ์ฌ์ฉ๋ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํด์ฃผ๊ณ ํด๋์ด๋ฆ์ ์๋ฌด๊ฑฐ๋ ๋ฃ์ด์ฃผ์ด๋ ๋๋ค.
๋ฐฐํฌ๊ฐ ์๋ฃ๋์๋ค!
์ฒ์์๋ ๋งค์ฐ ์ด์ํ ๋๋ฉ์ธ์ ์ฃผ๋๋ฐ Domain Setting
์ ๋ค์ด๊ฐ์ ์ฌ์ดํธ์ด๋ฆ.netlify.app ํ์์ ๋๋ฉ์ธ์ ๋ฐ์ ์ ์๋ค.
Vercel ๋ํ ๋ฐฐํฌ๋ฐฉ๋ฒ์ ๋งค์ฐ ๊ฐ๋จํ๋ค.
Vercel๋ก ๋ฐฐํฌํ ์๋ง๋ฒ ํ๋ก์ ํธ ๋ฐฐํฌ์ฉ
package.json ํ์ผ ์์ โscriptโ ์์ฑ์ โdeployโํ๋ ๋ช ๋ น์ด๋ฅผ ์ถ๊ฐํ๋ค.
github page ๋ฐฐํฌ์ ๊ตฌ๋ถ์ ๋๊ธฐ ์ํด โvercel-deployโ ๋ผ๋ ์ด๋ฆ์ผ๋ก ์์ฑํ๋ค.
"scripts": {
"dev": "next",
"build": "next build",
"start": "next start",
"vercel-deploy": "next build && next export"
},
Vercel ์ฌ์ดํธ์ ์ ์ํด์ ๊ฐ์ ํน์ ๋ก๊ทธ์ธ์ ํ ํ, Import Project ํด๋ฆญ!
From Git Repository ๋ฐ์ค ์์ continue ํด๋ฆญ!
Import Project from Github ํด๋ฆญ!
Vercel ๋ ์์ ์ github ๊ณ์ ์ Vercel ์ดํ๋ฆฌ์ผ์ด์ ์ ์ค์นํ๊ณ ๋ฐฐํฌํ ํ๋ก์ ํธ repository์ access๋ฅผ ์ด์ด์ฃผ์ด์ผ ํ๋ค. repository access settings๋ฅผ ๋๋ฅด๋ฉด ์ฝ๊ฒ ์งํํ ์ ์๋ค.
๊ทธ๋ค์ ๋ฐฐํฌํ ํ๋ก์ ํธ repository๋ฅผ ์ฒดํฌํด์ฃผ๊ณ save!
Root Directory ๋ฅผ ์ค์ ํ๋ ์ฐฝ. ๋น์นธ์ผ๋ก ์งํํด๋ ์๊ด์๋ค.
๋ง์ง๋ง์ผ๋ก ๋ฐฐํฌ์์ ์ฌ์ฉํ ๋น๋ ๋ช ๋ น์ด์ ํด๋์ด๋ฆ์ ์ค์ ํ์ฌ์ผ ํ๋๋ฐ ์์ framework preset ์ Next.js๋ก ์ค์ ํ๊ณ ๋น๋ ๋ช ๋ น์ด๋ฅผ ์ค์ ๋ฐฐํฌ ์, ์ฌ์ฉ๋ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํด์ฃผ๊ณ ๋ฐ๋ก deploy๋ฅผ ๋๋ฌ์ฃผ๋ฉด ๋๋ค.
๋น๋๋ช ๋ น์ด๋
next export
๋ฅผ ์คํํด์ผ ํจ.
nextJS ์ด์ธ์๋ create-react-app, Gatsby, vue.js, angular, jekyll ๋ฑ ๋ค์ํ framework preset ๋ค์ด ์๋ค.
๋ฐฐํฌ๊ฐ ์๋ฃ๋์๋ค!
ํด๋น ํฌ์คํ ์ ํ๋ฉด์ ์ฌ๋ฌ ํ๋ซํผ๋ผ๋ฆฌ ๋น๊ตํ๋ค ๋ณด๋ ํ๋ซํผ๋ณ๋ก ์ฅ๋จ์ ์ด ๋ณด์๋ค. ๋ํ nextJS ํ๋ ์์ํฌ์ ๋ํ ์ฌ๋ฌ ๋ค์ํ ๊ฒฌํด๋ค๋ ์ ํ ์ ์์๋ค.
๋๋ค๋ฐฉ์์ ๋ํด์๋ ์ฒ์ ์๊ฒ๋์๋๋ฐ ์ธ์ ๊ฐ ์ ์ฌ์ ์์ ์ ์ฌ์ฉํ ์ ์๋ ๊ธฐํ๊ฐ ์์์ผ๋ฉด ์ข๊ฒ ๋ค..!
์์ง ์ด๋ค ํ๋ซํผ์ ์ฌ์ฉํด์ผ ์ข๋ค๊ณ ๋งํ ์ ์๋ ์์ค์ด ์๋์ง๋ง, ์์ ์ด ์งํํ๋ ํ๋ก์ ํธ์ ์๋ง๋ ํ๋ซํผ์ ์ ํํ๋ ๊ฒ๋ ํ๋์ ์ญ๋์ด ์๋๊น ์๊ฐํด๋ณด๊ฒ ๋์๋ค.
์ถ๊ฐ๋ก WDever ๋์ ๋๊ธ ๋๋ถ์ nextJS์ ํธ์คํ ์ต์ ์ด ๋๊ฐ์ง๊ฐ ์๋ค๋ ๊ฒ์ ์๊ฒ ๋์๋ค. ๋ค์์๋ nextJS์ ์๋ฒ์ฌ์ด๋ ๋ ๋๋ง ๋ฐฉ์์ ๋ํด์ ๊น๊ฒ ๊ณต๋ถํด๋ด์ผ๊ฒ ๋ค.