๋น๊ฑด ์ผํ๋ชฐ
- branch๋ช ๊ท์น
feature/signup : ์๋ก์ด ๊ธฐ๋ฅ ์ถ๊ฐํ ๋(๊ธฐ๋ฅ๋ณ 1๊ฐ์ฉ๋ง signup1, signup2 => x)
fix/๋ธ๋์น๋ช
: ๋ฒ๊ทธ ์์ ํ ๋
refactor/๋ธ๋์น๋ช
: ๊ฒฐ๊ณผ๋ฌผ์ ๊ทธ๋๋ก์ง๋ง ์ฝ๋๋ฅผ ๊น๋ํ๊ฒ ์ ๋ฆฌํ ๋
- commit ๋ฉ์ธ์ง ๊ท์น
feat : ์๋ก์ด ๊ธฐ๋ฅ ์ถ๊ฐ, ๊ธฐ์กด์ ๊ธฐ๋ฅ์ ์๊ตฌ ์ฌํญ์ ๋ง์ถ์ด ์์
fix : ๊ธฐ๋ฅ์ ๋ํ ๋ฒ๊ทธ ์์
chore : ํจํค์ง ๋งค๋์ ์์ , ๊ทธ ์ธ ๊ธฐํ ์์ ex) .gitignore
test : ํ
์คํธ ์ฝ๋ ์ถ๊ฐ/์์
๋ณธ ํ ํ๋ฆฟ์ ์ํํธ์คํ์ด๋ ์๋ฒ ๊ต์ก์ฉ Node.js ํ ํ๋ฆฟ ์ ๋๋ค. (2022 ver.)
REST API์ ๊ธฐ๋ณธ ๊ตฌ์ฑ ์๋ฆฌ๋ฅผ ๋ฐ๋์ ๊ตฌ๊ธ๋งํ์ฌ ์ตํ ๋ค์ Route๋ฅผ ๊ตฌ์ฑํ์.
src
: ๋ฉ์ธ ๋ก์งsrc
์๋ ๋๋ฉ์ธ ๋ณ๋ก ํจํค์ง๋ฅผ ๊ตฌ์ฑํ๋๋ก ํ๋ค. ๋๋ฉ์ธ์ด๋ ํ์(User), ๊ฒ์๊ธ(Post), ๋๊ธ(Comment), ์ฃผ๋ฌธ(Order) ๋ฑ ์ํํธ์จ์ด์ ๋ํ ์๊ตฌ์ฌํญ ํน์ ๋ฌธ์ ์์ญ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค. ๊ฐ์ ์ค๊ณํ APP์ ๋ถ์ํ๊ณ ํ์ํ ๋๋ฉ์ธ์ ๋์ถํ์ฌsrc
ํด๋๋ฅผ ๊ตฌ์ฑํ์.config
๋ฐutil
ํด๋: ๋ฉ์ธ ๋ก์ง์ ์๋์ง๋งsrc
์์ ํ์ํ ๋ถ์ฐจ์ ์ธ ํ์ผ๋ค์ ๋ชจ์๋์ ํด๋- ๋๋ฉ์ธ ํด๋ ๊ตฌ์กฐ
Route - Controller - Provider/Service - DAO
-
Route: Request์์ ๋ณด๋ธ ๋ผ์ฐํ ์ฒ๋ฆฌ
-
Controller: Request๋ฅผ ์ฒ๋ฆฌํ๊ณ Response ํด์ฃผ๋ ๊ณณ. (Provider/Service์ ๋๊ฒจ์ฃผ๊ณ ๋ค์ ๋ฐ์์จ ๊ฒฐ๊ณผ๊ฐ์ ํ์ํ), ํ์์ Validation
-
Provider/Service: ๋น์ฆ๋์ค ๋ก์ง ์ฒ๋ฆฌ, ์๋ฏธ์ Validation
-
DAO: Data Access Object์ ์ค์๋ง. Query๊ฐ ์์ฑ๋์ด ์๋ ๊ณณ.
-
๋ฉ์๋ ๋ค์ด๋ฐ๋ฃฐ ์ด ํ ํ๋ฆฟ์์๋ ์ฌ์ฉ๋๋ ๋ฉ์๋ ๋ช ๋ช ๊ท์น์ User ๋๋ฉ์ธ์ ์ฐธ๊ณ ํ์. ํญ์ ์ด ๊ท์น์ ๋ฐ๋ผ์ผ ํ๋ ๊ฒ์ ์๋์ง๋ง, ๋ค์ด๋ฐ์ ํต์ผ์ฑ ์๊ฒ ํด์ฃผ๋ ๊ฒ ์ข๋ค.
3๊ฐ ํ ํ๋ฆฟ ๋ชจ๋ ๋ค์๊ณผ ๊ฐ์ด Request์ ๋ํด DB ๋จ๊น์ง ๊ฑฐ์น ๋ค, ๋ค์ Controller๋ก ๋์์ Response ํด์ฃผ๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ๋๋ค. ๊ตฌ์กฐ๋ฅผ ๋จผ์ ์ดํดํ๊ณ ํ ํ๋ฆฟ์ ์ฌ์ฉํ์.
Request
-> Route -> Controller -> Service/Provider -> DAO -> DB
DB -> DAO -> Service/Provider -> Controller -> Route ->
Response
๋ค์์ ๊ฐ ํ ํ๋ฆฟ ๋ณ ์ฐจ์ด์ ์ ๋น๊ต ๊ธฐ์ ํด ๋์ ๊ฒ์ด๋ค.
Request(์์) / Response(๋) โ Router (index.php) โ Controller โ Service (CUD) / Provider (R) โ PDO (DB)
Request(์์) / Response(๋) โ Router (*Route.js) โ Controller (*Controller.js) โ Service (CUD) / Provider (R) โ DAO (DB)
Request(์์) / Response(๋) โ Controller(= Router + Controller) โ Service (CUD) / Provider (R) โ DAO (DB)
์๋ฒ API ๊ตฌ์ฑ์ ๊ธฐ๋ณธ์ Validation์ ์ ์ฒ๋ฆฌํ๋ ๊ฒ์ด๋ค. ์ธ๋ถ์์ ์ด๋ค ๊ฐ์ ๋ ๋ฆฌ๋ Validation์ ์ ์ฒ๋ฆฌํ์ฌ ์๋ฒ๊ฐ ํฐ์ง๋ ์ผ์ด ์๋๋ก ์ ์ํ์. ๊ฐ, ํ์, ๊ธธ์ด ๋ฑ์ ํ์์ Validation์ Controller์์, DB์์ ๊ฒ์ฆํด์ผ ํ๋ ์๋ฏธ์ Validation์ Provider ํน์ Service์์ ์ฒ๋ฆฌํ๋ฉด ๋๋ค.
์์ (*)์ด ๋ถ์ด์๋ ํ์ผ(or ํด๋)์ ์ถ๊ฐ์ ์ธ ๊ณผ์ ์ดํ์ ์์ฑ๋๋ค.
โโโ config #
โ โโโ baseResponseStatus.js # Response ์์ Status๋ค์ ๋ชจ์ ๋์ ๊ณณ.
โ โโโ database.js # ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ จ ์ค์
โ โโโ express.js # express Framework ์ค์ ํ์ผ
โ โโโ jwtMiddleware.js # jwt ๊ด๋ จ ๋ฏธ๋ค์จ์ด ํ์ผ
โ โโโ secret.js # ์๋ฒ key ๊ฐ๋ค
โ โโโ winston.js # logger ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์
โโโ * log # ์์ฑ๋ ๋ก๊ทธ ํด๋
โโโ * node_modules # ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํด๋ (package.json ์ dependencies)
โโโ src #
โ โโโ app # ์ฑ์ ๋ํ ์ฝ๋ ์์ฑ
โ โ โโโ User # User ๋๋ฉ์ธ ํด๋
โ โ โ โโโ userDao.js # User ๊ด๋ จ ๋ฐ์ดํฐ๋ฒ ์ด์ค
โ โ โ โโโ userController.js # req, res ์ฒ๋ฆฌ
โ โ โ โโโ userProvider.js # R์ ํด๋นํ๋ ์๋ฒ ๋ก์ง ์ฒ๋ฆฌ
โ โ โ โโโ userService.js # CUD์ ํด๋นํ๋ ์๋ฒ ๋ก์ง ์ฒ๋ฆฌ
โโโ .gitignore # git ์ ํฌํจ๋์ง ์์์ผ ํ๋ ํด๋, ํ์ผ๋ค์ ์์ฑ ํด๋๋ ๊ณณ
โโโ index.js # ํฌํธ ์ค์ ๋ฐ ์์ ํ์ผ
โโโ * package-lock.json
โโโ package.json # ํ๋ก๊ทธ๋จ ์ด๋ฆ, ๋ฒ์ , ํ์ํ ๋ชจ๋ ๋ฑ ๋
ธ๋ ํ๋ก๊ทธ๋จ์ ์ ๋ณด๋ฅผ ๊ธฐ์
โโโ README.md
๋ณธ ํ
ํ๋ฆฟ์ Node.js
์ Express
(Node.js
์ ์น ํ๋ ์์ํฌ)๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ฑ๋์๋ค. Node.js
์ Express
์ ์์ธํ ๋ด์ฉ๊ณผ ์๋ฆฌ๋ ๊ฐ์ ๊ตฌ๊ธ๋ง์ ํตํด ์ดํด๋ณด๊ธฐ ๋ฐ๋๋ค.
node index.js
๋ฅผ ํตํด์ js ํ์ผ์ ์คํํ๋ค.- node๋ js ํ์ผ์ ์คํํ ๋
package.json
์ด๋ผ๋ ํ์ผ์ ํตํด์ ์ด๋ค ํ๊ฒฝ์ผ๋ก ๊ตฌ๋ํ๋์ง, ์ด๋ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ์ผ๋์ง(dependencies) ๋ฑ์ ๊ธฐ๋ณธ์ ์ธ ์ค์ ๊ฐ ๋ค์ ์ฐธ๊ณ ํ๋ค. npm install
npm(node package manager)์ ํตํด package.json์ ์๋ dependencies ๋ฑ์ ์ฐธ๊ณ ํ์ฌ node_modules ํด๋๋ฅผ ์์ฑํ๊ณ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ผ์ ๋ค์ด๋ก๋ ํ๋ค. ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ์ฌ์ฉํ๊ณ ์ถ์ ํ์ผ์์ require ํ์ฌ ์ฌ์ฉํ ์ ์๋ค.
config > express.js ์์ express ํ๋ ์์ํฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ app ๋ชจ๋์ export ํ๋๋ก ํ์ฌ ์ด๋ ํด๋์์๋ ์ฌ์ฉํ ์ ์๋๋ก ๊ตฌ์ฑํ๋ค. ์๋ก์ด ๋๋ฉ์ธ์ ๋ง๋ค ๊ฒฝ์ฐ, ํด๋น ํ์ผ์ ๋ค์๊ณผ ๊ฐ์ด Route ํด๋๋ฅผ ์ถ๊ฐํ์ฌ express.js์์ ๋ง๋ app ๋ชจ๋์ ์ฌ์ฉํ ์ ์๋๋ก ๊ตฌ์ฑํ๋ฉด ๋๋ค.
require('../src/app/User/userRoute')(app);
index.js
์์ express์์ ๋ง๋ app์ด 3000๋ฒ ํฌํธ๋ฅผ Listen ํ๋๋ก ๊ตฌ์ฑํ๋ค. ๋ณธ์ธ์ด ์ฌ์ฉํ๊ณ ์ถ์ ํฌํธ ๋ฒํธ๋ ์ด๊ณณ์์ ์ง์ ํด์ฃผ๋ฉด ๋๋ค.
Database๋ config > database.js์ mysql2 ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด ๊ตฌ์ฑํ๋ค. ์์ธํ ์ค๋ช ๊ณผ ์ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ๋ค์ mysql2 ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ณต์ README๋ฅผ ์ฐธ๊ณ ํ์. cf. connection์ ๋ค ์ฌ์ฉํ๋ค๋ฉด release๋ฅผ ํตํด ๊ผญ ํ ๋น ํด์ ๋ฅผ ํด์ผ ํ๋ค.
Log๋ winston, winston-daily-rotate-file ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด ๊ตฌ์ฑํ๋ค. ์๋ฒ ์ ๊ทผ ์์ ์๋ก ์๊ธฐ๊ฒ ๋ log ํด๋์์ ๋ก๊ทธ๋ฅผ ์ด๋ป๊ฒ ๋จ๊ธฐ๋์ง ์ดํด๋ณด์. (์ปค์คํ ํด๋ ์ข๋ค.)
๋ก์ปฌ์์ npm install์ ํตํด node_modules ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํด๋๋ฅผ ์์ฑํ๋ค.
[DB ์ฐ๊ฒฐ ์์ด TEST]
- userRoute.js์ 0. ํ ์คํธ API ๋ถ๋ถ์ ์ฃผ์ ํด์ ํ๋ค.
- userController.js์ ํ ์คํธ API ๋ถ๋ถ์ ์ฃผ์ ํด์ ํ๋ค.
- node index.js๋ฅผ ํตํด ๋ก์ปฌ ์๋ฒ๋ฅผ ๊ตฌ๋์ํค๊ณ ํฌ์คํธ๋งจ์ ํตํด GET localhost:3000/app/test๋ก ํ ์คํธ๊ฐ ์ ๋๋์ง ํ์ธํ๋ค.
[DB ์ฐ๊ฒฐ ์ดํ TEST]
- config > database.js์์ ๋ณธ์ธ์ DB ์ ๋ณด๋ฅผ ์ ๋ ฅํ๋ค.
- DB์ TEST๋ฅผ ์ํ ๊ฐ๋จํ ํ ์ด๋ธ์ ํ๋ ๋ง๋ ๋ค.
- userRoute.js, userController.js, userProvider.js, userDao.js๋ฅผ ๊ตฌ์ฑํ์ฌ ํด๋น ํ ์ด๋ธ์ ๊ฐ๋ค์ ๋ถ๋ฌ์ค๋ ๋ก์ง์ ๋ง๋ ๋ค.
- node index.js๋ฅผ ํตํด ๋ก์ปฌ ์๋ฒ๋ฅผ ๊ตฌ๋์ํค๊ณ ํฌ์คํธ๋งจ์ ํตํด ๋ณธ์ธ์ด ๋ง๋ API ํ ์คํธ๊ฐ ์ ๋๋์ง ํ์ธํ๋ค.
๋ฌด์ค๋จ ์๋น์ค๋ฅผ ์ํด PM2๋ฅผ ์ฌ์ฉํ๋ค. (JavaScript ๋ฐํ์ Node.js์ ํ๋ก์ธ์ค ๊ด๋ฆฌ์) ์์ธํ ์ฌ์ฉ๋ฒ์ ๊ณต์ ์ฌ์ดํธ๋ฅผ ์ฐธ๊ณ ํ์.
๊ธฐ๋ณธ์ ์ธ ๋ฌธ๋ฒ๋ค์ ์ค์ค๋ก ํ์ตํ์. ํ์ตํ ์ ์๋ ์ฌ์ดํธ๋ค์ ๋ค์๊ณผ ๊ฐ์ด ๋ค์ํ๋ค.
์๋ฒ Error๋ฅผ ๋ง์ฃผํ๋ค๋ฉด, ์์ธ์ ํ์ ํ ์ ์๋ ๋ค์ํ ๋ฐฉ๋ฒ๋ค์ ํตํด ๋ฌธ์ ์์ธ์ ์ฐพ์.
- Nginx ๋ก๊ทธ ํ์ธ (๋ก๊ทธ ๊ฒฝ๋ก๋ ๊ตฌ๊ธ๋ง)
- pm2 log ํ์ธ (๋ก๊ทธ ๊ฒฝ๋ก๋ ๊ตฌ๊ธ๋ง)
- console.log ๋ก ๋๋ฒ๊น
- ๊ทธ ์ธ ๋ฐฉ๋ฒ๋ค
- ๋ณธ ํ ํ๋ฆฟ์ ์์ ๊ถ์ ์ํํธ์คํ์ด๋์ ์์ต๋๋ค. ๋ณธ ์๋ฃ์ ๋ํ ์์ ์ ์ด์ฉ ๋ฐ ๋ฌด๋จ ๋ณต์ , ๋ฐฐํฌ ๋ฐ ๋ณ๊ฒฝ์ ์์น์ ์ผ๋ก ๊ธ์งํ๋ฉฐ ์ด๋ฅผ ์๋ฐํ ๋์๋ ํ์ฌ์ฒ๋ฒ์ ๋ฐ์ ์ ์์ต๋๋ค.