์ค๋๋ '์นดํ ์ด๋๊ฐ์ง?' ๊ณ ๋ฏผํ๋ ๋ถ๋ค์ ์ํ ์นดํ๋งต ์ฑ ์๋น์ค / Service OPR
Team-CA:PIN Server
SOPT 28th APPJAM
ํ๋ก์ ํธ ๊ธฐ๊ฐ: 2021.06.26 ~ 2021.07.16
CXVB seu11ee ๐ป |
NJMB snowedev ๐ป |
"devDependencies": {
"@types/bcryptjs": "^2.4.2",
"@types/express": "^4.17.11",
"@types/mongoose": "^5.10.4",
"@types/node": "^14.14.37",
"nodemon": "^2.0.7",
"ts-node": "^9.1.1",
"typescript": "^4.2.3"
}
"dependencies": {
"bcryptjs": "^2.4.3",
"dotenv": "^8.2.0",
"express": "^4.17.1",
"express-validator": "^6.10.0",
"jsonwebtoken": "^8.5.1",
"mongoose": "^5.12.3",
"request": "^2.88.2"
}
Coding Convention ์์ธํ ๋ณด๊ธฐ
๋ค์ ์คํ์ผ Guide๋ฅผ ์ฐธ๊ณ ํ์ต๋๋ค. ๐๐ปAirbnb Style Guide
๐ ํด๋๊ตฌ์กฐ
src
โ index.ts # App entry point
โโโโapi # Express route controllers for all the endpoints of the app
โโโโconfig # Environment variables and configuration related stuff
โโโโinterfaces # All the interfaces is here
โโโโloaders # Split the startup process into modules
โโโโmiddleware # auth.ts
โโโโmodels # Database models
โโโโservices # All the business logic is here
๐ ๋ค์ด๋ฐ
-
๋ณ์, ํจ์, ์ธ์คํด์ค๋ *Camel Case(=lower ์นด๋ฉ ์ผ์ด์ค)*๋ฅผ ์ฌ์ฉํ๋ค.
ex) camelCase
-
ํจ์์ ๊ฒฝ์ฐ ๋์ฌ+๋ช ์ฌ ํํ๋ก ๊ตฌ์ฑํ๋ค.
ex) getUserInfomation()
-
Class, Contructor๋ *Pascal Case(=upper ์นด๋ฉ ์ผ์ด์ค)*๋ฅผ ์ฌ์ฉํ๋ค.
ex) CamelCase
-
๊ธ์์ ๊ธธ์ด
- ๊ธ์์ ๊ธธ์ด๋ 20์ ์ด๋ด๋ก ์ ํํ๋ค.
- 4๋จ์ด ์ด์์ด ๋ค์ด๊ฐ๊ฑฐ๋, ๋ถ๋์ดํ๊ฒ 20์ ์ด์์ด ๋๋ ๊ฒฝ์ฐ ํ์๊ณผ์ ์์๋ฅผ ๊ฑฐ์น๋ค.
-
flag๋ก ์ฌ์ฉ๋๋ ๋ณ์
- Boolean์ ๊ฒฝ์ฐ ์กฐ๋์ฌ+flag ์ข ๋ฅ๋ก ๊ตฌ์ฑ๋๋ค. ex) isNum, hasNum
-
์ฝ์นญ์ ์ฌ์ฉ
- ์ฝ์ด๋ ๋๋๋ก ์ฌ์ฉํ์ง ์๋๋ค.
- ๋ถ๋์ดํ๊ฒ ์ฝ์ด๊ฐ ํ์ํ๋ค๊ณ ํ๋จ๋๋ ๊ฒฝ์ฐ ํ์๊ณผ์ ์์๋ฅผ ๊ฑฐ์น๋ค.
let idx; // bad let index; // good let cnt; // bad let count; // good let arr; // bad let array; // good let seoul2Bucheon; // bad let seoulToBucheon; // good
๐ท ์ฃผ์
ํ์ค์ //๋ก ์ ๊ณ , ๊ทธ ์ด์์ /** */๋ก ์ ๋๋ค.
// ํ์ค ์ฃผ์์ผ ๋
/**
* ์ฌ๋ฌ์ค
* ์ฃผ์์ผ ๋
*/
ํจ์์ ๋ํ ์ฃผ์
- backend์์ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉํ๋ ํจ์์ ๊ฒฝ์ฐ, ๋ชจ๋ํ๋ฅผ ํตํด ํ๋์ ํ์ผ๋ก ๊ด๋ฆฌํ๋ค.
- ํ๋์ ํ์ผ์ ์์ ๋ถ๋ถ์ ์ฃผ์์ผ๋ก ์์ธ ๋ด์ฉ์ ์์ฑํ๋ค.
- ํจ์์ ์ ์ฒด ๊ธฐ๋ฅ์ ๋ํ ์ค๋ช
- ํจ์์ ํ๋ผ๋ฏธํฐ์ ๋ํ ์ค๋ช (type: ..., ์ญํ )
- router ๋๋ api์ผ ๋์๋ ์ฑ๊ณต ์ฌ๋ถ๋ ์ ์ด์ค๋ค.
- ์์ ์ฝ๋
/** * @api {get} /study/:roomNumber/questions?sort_by=created&order_by=asc ๋ฐฉ์ ์ง๋ฌธ ๋ชฉ๋ก์ ๊ฐ์ ธ์ด * @apiName GetQuestions * @apiGroup Question * * @apiParam {String} roomNumber ์ ์ผํ ๋ฐฉ ๋ฒํธ * * @apiSuccess {Boolean} success API ํธ์ถ ์ฑ๊ณต ์ฌ๋ถ * @apiSuccess {String} message ์๋ต ๋ฉ์์ง * @apiSuccess {Object} data ํด๋น ๋ฐฉ์ ์ง๋ฌธ ๋ฆฌ์คํธ */ router.get( "/study/:roomNumber/questions", [checkParamAndQuery("roomNumber").isNumeric()], getQuestions.default );
โ๏ธ CA:PIN Server Git Commit Message Rules
๋ฐ์์ฌํญ์ ๋ฐ๋ก ํ์ธํ ์ ์๋๋ก ์์ ๊ธฐ๋ฅ ํ๋๋ผ๋ ๊ตฌํ๋๋ฉด ์ปค๋ฐ์ ๊ถ์ฅํฉ๋๋ค.
- init : ์ด๊ธฐํ
- feat : ๊ธฐ๋ฅ ์ถ๊ฐ
- update : ๊ธฐ๋ฅ ๋ณด์ (์
๊ทธ๋ ์ด๋)
- fix : ๋ฒ๊ทธ ์์
- refactor: ๋ฆฌํฉํ ๋ง
- style : ์คํ์ผ (์ฝ๋ ํ์, ์ธ๋ฏธ์ฝ๋ก ์ถ๊ฐ: ๋น์ฆ๋์ค ๋ก์ง์ ๋ณ๊ฒฝ ์์)
- docs : ๋ฌธ์ (๋ฌธ์ ์ถ๊ฐ(Add), ์์ , ์ญ์ )
- test : ํ
์คํธ (ํ
์คํธ ์ฝ๋ ์ถ๊ฐ, ์์ , ์ญ์ : ๋น์ฆ๋์ค ๋ก์ง์ ๋ณ๊ฒฝ ์์)
- chore : ๊ธฐํ ๋ณ๊ฒฝ์ฌํญ (๋น๋ ์คํฌ๋ฆฝํธ ์์ , ์์
์ถ๊ฐ ๋ฑ)
[์ปค๋ฐ๋ฉ์ธ์ง] ์ค๋ช
ํ์์ผ๋ก ์ปค๋ฐ ๋ฉ์์ง๋ฅผ ์์ฑํฉ๋๋ค.- ์ปค๋ฐ ๋ฉ์์ง๋ ์์ด ์ฌ์ฉ์ ๊ถ์ฅํฉ๋๋ค.
[feat] add user model
๐ป CA:PIN Server Branch Strategy
- main ๋ธ๋์น - ํ๋ก์ ํธ ์ด๊ธฐ ์ ํ
- dev ๋ธ๋์น - default branch๋ก ์ค์
- ํ ์ผ issue ๋ฑ๋ก ํ issue ๋ฒํธ๋ก ๋ธ๋์น ์์ฑ ํ ์์
- feature/#์ด์๋๋ฒ
- PR โก๏ธ ์ฝ๋๋ฆฌ๋ทฐ โก๏ธ ๋จธ์ง( โ dev)
- ๋จธ์ง ํ feature ๋ธ๋์น ์ญ์
- ๋ธ๋์น ์์ฑ ์ dev ์ต์ ํ
- PR ์ tsc or yarn run build๋ก dist ์ ๋ฐ์ดํธ ํ ์ปค๋ฐ
- main
- dev
- feature
โโโ #1
โโโ #2
โโโ #3