ํ์ฌ react์ express๋ฅผ ์ด์ฉํ ํ๋ก์ ํธ๋ฅผ ์งํ์ค์ธ๋ฐ ๊ฑฐ์ ์์ฑ๋์ด๊ฐ์ ๋ฏธ๋ฆฌ ์ฐ์ต์ผ์ ๋ฐฐํฌ๋ฅผ ํด๋ณด์๋ค. ํผ์์ ๋ฐฐํฌํ๋ ๊ฒ์ ์ฒ์์ด๋ผ ์๋ง์ ์๋ฌ๋ฅผ ๋ง๋ฌ๊ณ ํด๊ฒฐํ๋๋ฐ ๊ฝค ๋ณต์กํ๋ค. ๊ทธ๋์ ๊ทธ ๊ณผ์ ์์๋ฅผ ๊ฐ๋จํ ๊ธฐ๋กํด๋ณธ๋ค.
#. ํ๋ก์ ํธ ์ธํ
๋จผ์ heroku๋ฅผ ์ด์ฉํด ๋ฐฐํฌํ๋๋ฐ ๊นํ๋ธ ๋ ํ์งํ ๋ฆฌ๋ฅผ ์ฐ๋ํด์ผํจ์ผ๋ก ์๋ก์ด ๋ ํ์งํ ๋ฆฌ๋ฅผ ์์ฑํ๋ค. ๊ธฐ์กด์ client์ server๋ฅผ ๊ฐ๊ฐ์ ๋ ํ์งํ ๋ฆฌ๋ฅผ ๋ง๋ค์ด ๊ฐ๋ฐํ์ด์ ๋ชจ๋ ํด๋ก ํด์ ํ๋๋ก ํฉ์ณค๋ค.
1) server ํด๋ ์์ server.js ํ์ผ์ ์์ ์ด ํ์ํ๋ค. '/' ๊ฒฝ๋ก์ get ์์ฒญ ์ client ํด๋์ index.html ํ์ผ์ ๋ณด์ฌ์ฃผ๋๋ก ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ธฐ์กด์ PORT ๊ฐ์ด 5000์ผ๋ก ๊ณ ์ ๊ฐ์ด์๋๋ฐ heroku์์ ์ฐ ํฌํธ๊ฐ ์ฌ์ฉ๋ ์ ์๋๋ก process.env.PORT๋ฅผ ์ถ๊ฐํ๋ค.
// server.js
import express form 'express';
import path from "path";
const PORT = process.env.PORT || 5000;
const __dirname = path.resolve();
app.use(express.static(path.join(__dirname + "/.." + "/client/build")));
app.get("/", (req, res)=> res.sendFile(path.join(__dirname + "/.." + "/client/build"));
2) ์ต์๋จ ํด๋์ npm init์ ํตํด package.json ํ์ผ์ ์์ฑ ํ ๋ค์๊ณผ ๊ฐ์ด ์คํฌ๋ฆฝํธ๋ฅผ ์ถ๊ฐํ๋ค. ๋จผ์ client ํด๋๋ก ์ด๋ํด ํ์ผ์ ๋น๋ํ๊ณ , server ํด๋์์ ์๋ฒ๋ฅผ ์คํํ๋๋ก ์์ฑ๋ ์คํฌ๋ฆฝํธ์ด๋ค.
// package.json
"scripts": {
"heroku-prebuild": "cd client && npm ci && npm run build ",
"start": "cd server && npm ci && npm run start",
"test": "echo \"Error: no test specified\" && exit 1"
},
#. Heroku ์ธํ ๋ฐ DB ์ฐ๊ฒฐ
heroku์ ๊ฐ์ ์ ํ๊ณ app์ ์์ฑํ๋ค. ๊ทธ๋ฆฌ๊ณ ๊นํ๋ธ๋ฅผ ์ฐ๋์ํค๊ณ Resources ํญ์ผ๋ก ์ด๋ํด JawsDB MySQL์ ์ค์นํ๋ค. JawsDB MySQL์ ์ค์นํ๋ ์ด์ ๋ ๊ธฐ์กด์ ๋ด ๋ ธํธ๋ถ์ ์๋ DB๋ฅผ ์ธ๋ถ์์๋ 24์๊ฐ ์๋ฌด๋๋ ์ ์ํ ์ ์๋๋ก ๋ง๋ค๊ธฐ ์ํด์๋ค. ์ฒ์์ ClearDB MySQL์ ์ด์ฉํ๋๋ฐ ClearDB MySQL๋ json ๋ฐ์ดํฐ ํ์ ์ ์ ๋๋ก ์ธ์ํ์ง ๋ชปํ๋ค. ๊ทธ๋์ JawsDB MySQL๋ก ๋ณ๊ฒฝํ๋ค. (์ด๊ฒ ์ ๊ฒ ์์ ํด๋ณด๋ฉด์ ์ถ์ธกํด๋ณด๊ธฐ๋ก๋ JawsDB MySQL๊ณผ ClearDB MySQL์ characterset ์ค์ ๊ฐ์ด ๋ฌ๋๋๋ฐ ์ด๊ฑฐ ๋๋ฌธ์ธ ๊ฒ ๊ฐ๋ค)
๋ค์ ๋ด ๋ ธํธ๋ถ์ ์๋ DB๋ฅผ JawsDB MySQL์ ์ฎ๊ธฐ๋ ์์ ์ ํ๋ค. ์ฒ์๋ถํฐ ๋ค์ DB ํ ์ด๋ธ์ ๋ง๋ค์ด๋ ๋์ง๋ง ๋๋ ๊ธฐ์กด์ DB ํ์ผ์ export, import ํ๋ ๋ฐฉ์์ ์ ํํ๋ค. mysql workbench๋ฅผ ์ด์ฉํด ์์ฝ๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ฎ๊ธธ ์ ์์๋ค. ๊ทธ๋ฆฌ๊ณ ๋ค์ heroku ์ฌ์ดํธ์์ setting ํญ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ จ ํ๊ฒฝ๋ณ์๋ค์ ๋ชจ๋ ์ ์ฅํด์คฌ๋ค.
์ด๋ ๊ฒ ๋ชจ๋ ์ธํ ์ด ์๋ฃ๋ ํ deploy ๋ฒํผ์ ๋๋ฌ ๋ฐฐํฌ๋ฅผ ์คํํด์ ๋ด ํ๋ก์ ํธ๋ก ์ ์ํ ์ ์๋ ๋ฐฐํฌ๋ URL์ ์ป์ ์ ์์๋ค.
'๊ฐ๋ฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
heroku ์๋๋ฐฐํฌ ์ค๋ฅ (0) | 2022.10.14 |
---|---|
session vs jwt ๋ก๊ทธ์ธ (0) | 2022.10.07 |
redux-saga๋ฅผ ์ด์ฉํ ๋น๋๊ธฐ ๊ตฌํ (0) | 2022.10.06 |
React + Express ๋ฌดํ ์คํฌ๋กค ๊ธฐ๋ฅ (0) | 2022.10.06 |
์๋ฐ์คํฌ๋ฆฝํธ ๋๊ธฐ์ ๋น๋๊ธฐ (0) | 2022.09.29 |