์กธ์ ํ๋ก์ ํธ๋ฅผ ์งํํ์์ ๋๋ ์๊ฐ์ ์ ์ฝ์ผ๋ก ์ธํด์ ๋ฐฐํฌ๊น์ง ๋ง์น์ง ๋ชปํ์ฌ ํ๋ก์ ํธ๋ฅผ ๋๋์๋ค. ๋ก์ปฌ์์๋ ํ๋ก๊ทธ๋จ์ด ์ ๋์ํ์ง๋ง ๋ฐฐํฌํ๋ฉด ๋์ํ์ง ์์ ๋๊ฐ ๋ง์ ๊ฒ ๊ฐ๋ค. ์ด๋ฒ ์ฐฝ์ ๋์๋ฆฌ ํ๋์ ํ๋ฉด์๋ ๋ก์ปฌ์์๋ ์ ๋์ํ์๋๋ฐ, ๋ฐฐํฌ๋ฅผ ํ๋ฉด์ ๋ฐฑ์๋ ์๋ฒ์ API ์ฐ๊ฒฐ์ด ์ ๋๋ก ์ด๋ฃจ์ด์ง์ง ์๋ ๋ฌธ์ ๊ฐ ์๊ฒผ์๋ค. ๋ฐฐํฌ์ ๋ํด์ ๊ณต๋ถ๋ ํด๋ณผ๊ฒธ ๊ฒธ์ฌ๊ฒธ์ฌ ์ ๋ฆฌํด๋ณด์๋ค๐๐ป
๐Netlify
์ด๋ฒ ์ฐฝ์ ๋์๋ฆฌ ์ค๊ฐ ํ๋ก์ ํธ๋ Netlify๋ฅผ ์ด์ฉํด์ ๋ฐฐํฌํ๋ค. Netlify๋ ์ ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ๋ฐ ์ฑ๊ธ ํ์ด์ง ์ ํ๋ฆฌ์ผ์ด์ (SPA) ๋ฐฐํฌ์ ํนํ๋์ด ์๋ ์๋น์ค์ด๋ค.
๐Netlify๋ฅผ ํตํ React ํ๋ก์ ํธ ๋ฐฐํฌ ๋ฐฉ๋ฒ
Netfliy๋ฅผ ํตํ React ํ๋ก์ ํธ ๋ฐฐํฌ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
1. React ํ๋ก์ ํธ build
React ํ๋ก์ ํธ๋ฅผ ๋ฐฐํฌํ๊ธฐ ์ํด์๋ ์ฐ์ React ํ๋ก์ ํธ๋ฅผ build ํด์ผ ํ๋ค. build(๋น๋)๋ ์์ค ์ฝ๋ ํ์ผ์ ์ปดํจํฐ์์ ์คํํ ์ ์๋ ๋ ๋ฆฝ์ ์ธ ํํ๋ก ๋ณํํ๋ ๊ณผ์ ๊ณผ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋งํ๋ค. ์น ๋ธ๋ผ์ฐ์ ๋ HTML, CSS, JavaScript๋ง ํด์ํ๊ณ ์ดํดํ ์ ์๋ค. ๋ฐ๋ผ์ ์น ๋ธ๋ผ์ฐ์ ๋ React์ JSX ๋ฌธ๋ฒ์ ์ดํดํ ์ ์๋๋ฐ, React์์ build(๋น๋)๋ JSX ํ์ผ์ HTML ํ์ผ๋ก ๋ณํํ๋ ๊ณผ์ ์ด๋ค. React ํ๋ก์ ํธ๋ build ๊ณผ์ ์ ํตํด ๊ฐ๋ฐ ์ค์ธ ์ฝ๋์ ๋ฆฌ์์ค๊ฐ ์ต์ ํ๋ ํํ๋ก ๋ณํ๋๊ณ , ์ด๋ฅผ ํตํด ์ฑ๋ฅ ์ต์ ํ์ ๋ฐฐํฌ๊ฐ ์ด๋ฃจ์ด์ง๋ค.
React ํ๋ก์ ํธ๋ฅผ build(๋น๋)ํ๊ธฐ ์ํด์ npm run build ๋๋ yarn build ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ค. ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๊ณ ๋๋ฉด ํด๋์ build ํด๋๊ฐ ์์ฑ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. React ํ๋ก์ ํธ๋ฅผ ๋ฐฐํฌํ๊ธฐ ์ํด์๋ ์ด build ํด๋์ ๋ด์ฉ๋ฌผ์ด ํ์ํ๋ค.
npm run build
yarn build
2. Netlify๋ก React ํ๋ก์ ํธ ๋ฐฐํฌํ๊ธฐ
Deploy manually์์ ์์์ ์์ ๋จ๊ณ์์ ์ป์ build ํด๋๋ฅผ ์ฌ๋ฆฌ๋ฉด ๋๋ค.
3. ์ค๋ฅ ํด๊ฒฐํ๊ธฐ
๐ ๏ธNetlify์์ ์๋ก๊ณ ์นจ ์๋ฌ ํด๊ฒฐํ๊ธฐ: Page Not Found ์๋ฌ ํด๊ฒฐํ๊ธฐ
์ฐ๋ฆฌ๋ create-react-app ๋ช ๋ น์ด๋ฅผ ํตํด React ํ๋ก์ ํธ๋ฅผ ๋ง๋ค์๋ค. ์ด ํ๋ก์ ํธ๋ SPA(Single Page Application)์ด๋ค. SPA๋ ํ๋์ index.html ์์ ์ฌ๋ฌ ํ๋ฉด์ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๊ตฌ์ฑํ๋ ํํ๋ฅผ ๋งํ๋ค. ์ฆ, SPA๋ ์ต์ด์ ์๋ฒ๋ก๋ถํฐ ๋ฐ์ index.html๊ณผ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ง ์ฌ์ฉํด ํ๋ฉด์ ์ ํํ๊ธฐ ๋๋ฌธ์, ์๋ฒ์ ์ถ๊ฐ์ ์ธ ์น ๋ฌธ์๋ฅผ ์์ฒญํ๋ ์์ ์ด ํ์์๋ค. ์ด๋ฌํ ์ ๊ทผ ๋ฐฉ์์ผ๋ก ์ธํด React ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉ์๊ฐ ์ฃผ์๋ฅผ ๋ณ๊ฒฝํ๊ฑฐ๋ ํ๋ฉด์ ์ ํํ ๋ ์๋ฒ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ์์ฒญํ๋ ๊ณผ์ ์ด ์์ด์ง๋ฏ๋ก ํ๋ฉด ์ ํ ์๋๊ฐ ๋น ๋ฅด๋ค.
ํ์ง๋ง ์ด๋ก ์ธํด Netlify๋ก ๋ฐฐํฌ๋ React ํ๋ก์ ํธ์์ ์๋ก๊ณ ์นจ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค. React ํ๋ก์ ํธ์ ์ฒ์ ์ ์ํ ๋์ url์ /์ด๊ณ , ์ด๋ index.html์ ์ฝ๋๋ค. ํ์ง๋ง ํ๋ฉด์ ๋๊ธฐ๋ฉด์ ๋ผ์ฐํ ๋ url์ ๊ฒฝ์ฐ์๋ ๊ฐ๊ฐ์ url์ ๋ง๋ ์์์ด ์กด์ฌํ์ง ์๋๋ค. ์ด๋ก ์ธํด ๋ผ์ฐํ ๋ url์์ ์๋ก๊ณ ์นจํ ๊ฒฝ์ฐ /์ ๋ฌ๋ฆฌ ๊ณง๋ฐ๋ก ๋ด๋ ค์ค ์์์ด ์กด์ฌํ์ง ์๊ธฐ ๋๋ฌธ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ด๋ค.
ํด๊ฒฐ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
1. public/_redirects
public ํด๋ ๋ด๋ถ์ _redirects ํ์ผ์ ์์ฑํ๊ณ , ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ๋ค. ์ด ์ฝ๋์ ์๋ฏธ๋ ์ด๋ ํ ๊ฒฝ๋ก๋ก ๋ค์ด์๋ index.html์ ๋ ๋๋ง ํ๊ฒ ๋ค๋ ์๋ฏธ์ด๋ค.
/* /index.html 200
2. public/netlify.toml
์ ๋ฐฉ๋ฒ์ด ์๋๋ค๋ฉด public ํด๋ ๋ด๋ถ์ netlify.toml ํ์ผ์ ๋ง๋ค๊ณ ์์ ๋ด์ฉ์ ์๋์ ๊ฐ์ด ์์ฑํ๋ค.
[[redirects]]
from = "/*"
to = "/index.html"
status = 200
๐ ๏ธNetlify์์ ํ๋ก์ ์๋ฌ ํด๊ฒฐํ๊ธฐ: API ํธ์ถ ๋ฌธ์ ํด๊ฒฐํ๊ธฐ
๊ฐ๋ฐ์ค์ผ ๋๋ cors ์๋ฌ๊ฐ ๋ฐ์ํ์๋๋ฐ, Netlify ๋ฐฐํฌ ํ์๋ ์์ฒญ url์ด ๋ฐ๋๋ฉด์ ๋์ผํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒ์ด๋ค. Netlify์์ cors ์๋ฌ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
๋ก์ปฌ ์๋ฒ์ผ ๊ฒฝ์ฐ ์๋ฒ ์ฃผ์๋ก, ๊ทธ ์ธ์ ๊ฒฝ์ฐ์๋ api ์ฃผ์ ์์ api๊ฐ ๋ถ๊ฒ ํ๋ค. ์ดํ axios ์์ฒญ์ ๋ณด๋ผ ๋๋ ์๋ฒ ์ฃผ์๋ ์๋ตํ๊ณ endpoint๋ง ์์ฑํ๋ฉด ๋๋ค.
const host =
window.location.hostname === "localhost"
? `${์๋ฒ์ฃผ์}/`
: "api";
export const apiClient = axios.create({
baseURL: host,
});
/*์์ฒญ*/
const response = await apiClient.get(
"content/platform/all
);
/*public/netlify.toml*/
[[redirects]]
from = "/api/*"
to = "<https://url์ฃผ์/:splat>"
status = 200
force = true
- from: redirection ํ๊ธฐ ์ ๊ฒฝ๋ก
- to: redirection ํ๋ ค๋ URL ๋๋ ๊ฒฝ๋ก
- status: ์ฌ์ฉํ HTTP ์ํ ์ฝ๋
- force: ๊ฒฝ๋ก์ ๊ธฐ์กด ๋ด์ฉ์ ์ฌ์ ์ํ ์ง ์ฌ๋ถ(default ๋ false)
์ด๋, ์๋ก๊ณ ์นจ ์๋ฌ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด public/redirects_ ํ์ผ์ ์ค์ ํ๊ณ , API ์ฐ๊ฒฐ ์๋ฌ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด public/netlify.toml ํ์ผ์ ์ค์ ํ๋ค๋ฉด ๋ค์ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์๋ค. ์ด๋ /public/_redirects ํ์ผ์ ์ญ์ ํ๊ณ /public/netlify.toml ํ์ผ์ ์ค์ ์ ํฉ์ณ์ค์ผ๋ก์จ ํด๊ฒฐํ๋ฉด ๋๋ค.
๐Netlify๋ฅผ ํตํ React ํ๋ก์ ํธ ๋ฐฐํฌ ๋ฐฉ๋ฒ2: github ์ฐ๋
์์ 2๋ฒ ๋จ๊ณ์์ ์ง์ build ํ์ผ์ ์ ๋ก๋ํ ์๋ ์์ง๋ง github repository์ ์ฐ๋ํ ์๋ ์๋ค. Add new site>Import an existing project>Deploy with GitHub๋ก ๋ค์ด๊ฐ๋ค.
๊ทธ๋ผ ์๋์ ๊ฐ์ด Basic build setting์ ์ค์ ํด์ค์ผ ํ๋ค.
-Branch to deploy: ํ๋ก์ ํธ Repository์ ๋ฐฐํฌํ ๋ธ๋์น
-Base directory: reposiory์์ frontend, backend, … ๋ฑ ํ๋ก ํธ์ ๋ฐฑ์ ๋๋ค ๊ด๋ฆฌํ๋ ๊ฒฝ์ฐ ๋ฐฐํฌํ๊ณ ์ ํ๋ ํด๋๋ฅผ ์ ๋ ฅํ๋ฉด ๋๋ค. ๋์ ๊ฒฝ์ฐ repository ์์ ํ๋ก ํธ์๋ ์ฝ๋๋ง ๊ด๋ฆฌํ๊ณ ์์ผ๋ฏ๋ก ๋น์นธ์ผ๋ก ๋น์๋์๋ค.
-Build command: ๋น๋ ๋ช ๋ น์ด, ์์ 1๋ฒ ๋จ๊ณ์์ ํ๋ก์ ํธ๋ฅผ ๋น๋ํ๊ธฐ ์ํด์ npm run build๋ yarn build ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ค๊ณ ํ์๋๋ฐ, ์ด์ ๊ฐ์ ๋น๋ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ฉด ๋๋ค.
-Publish directory: ๋น๋๊ฐ ์๋ฃ๋ ํ ๋น๋ ํ์ผ์ด ์์ฑ๋ ํด๋ ์ด๋ฆ
(๋น๋ ๊ฒฐ๊ณผ)
๊ทผ๋ฐ ์์ ๊ฐ์ด deploy ๋ฒํผ์ ๋๋ ๋๋ build ๊ณผ์ ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์๋ค. 2020๋ ๋ถํฐ๋ ๊ธฐ์กด์ npm run build ์ปค๋งจ๋ ์์ “CI= “๋ฅผ ๋ถ์ด์ผ ์๋ํ๋ค๊ณ ํ๋ค. build command ๋ถ๋ถ์ CI= npm run build๋ก ๋ฐ๊ฟ์ฃผ์๋ค. ์ด๋ ๋ฐ๋์ “CI= “์ ๊ฐ์ด CI= ๋ค์ ๊ณต๋ฐฑ์ ๋ถ์ฌ์ฃผ์ด์ผ ํ๋ค.
(๋น๋ ๊ฒฐ๊ณผ) ์ฑ๊ณต!!
'๐ป์น(Web) > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React]AWS EC2๋ก React ๋ฐฐํฌํ๊ธฐ, ๋๋ฉ์ธ ์ฐ๊ฒฐ (0) | 2023.09.07 |
---|---|
[React]Firebase๋ก React ๋ฐฐํฌํ๊ธฐ, Mixed-Content ์๋ฌ (1) | 2023.09.03 |
[React]์น ํ์ค์ ์ค์ํ๋ฉฐ ๊ฐ๋ฐํ๋ ๋ฐฉ๋ฒ (0) | 2023.08.28 |
[React]React ํ๋ก์ ํธ์ CSS ์ ์ฉํ๋ ๋ฐฉ๋ฒ(Nomad Coders ๊ฐ์ ์ ๋ฆฌ) (0) | 2023.08.15 |
[React]Themes๋ฅผ ์ด์ฉํ ์ผ๊ด์ฑ ์๋ ์คํ์ผ ๊ด๋ฆฌ (0) | 2023.06.17 |