์ฐจ์์์, ์ฐจ๋ก์์์์ ์ฆ๊ฑฐ์์ ์ถ๊ตฌํ๋ ๊ฒฝํ ๊ธฐ๋ฐ ๋๋ผ์ด๋ธ ์ฝ์ค ๊ณต์ ํ๋ซํผ
Core Value : ์ฐจ๋ก์ ํต์ฌ ๊ฐ์น๋ '์ฆ๊ฑฐ์๊ณผ ํธ๋ฆฌํจ'์ ๋๋ค.
SOPT 28th APPJAM
ํ๋ก์ ํธ ๊ธฐ๊ฐ: 2021.06.26 ~ 2021.07.17
- Async & Await
- request(HTTP)
- Node.js - Chrome V8 ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ผ๋ก ๋น๋๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐํ์
- Express.js - Node.js ์น ์ ํ๋ฆฌ์ผ์ด์ ํ๋ ์์ํฌ
- NPM - ์๋ฐ ์คํฌ๋ฆฝํธ ํจํค์ง ๊ด๋ฆฌ์
- vscode - ํธ์ง๊ธฐ
- mySQL - DataBase
- Sequelize - Sequelize ORM
- AWS EC2 - ํด๋ผ์ฐ๋ ํ๊ฒฝ ์ปดํจํ ์์คํ
"dependencies": {
"@angular/common": "^12.1.1",
"@angular/core": "^12.1.1",
"@types/express": "^4.17.11",
"@types/multer": "^1.4.6",
"@types/multer-s3": "^2.7.9",
"aws-sdk": "^2.938.0",
"bcryptjs": "^2.4.3",
"dotenv": "^9.0.2",
"express": "^4.17.1",
"express-validator": "^6.10.0",
"jsonwebtoken": "^8.5.1",
"mongoose": "^5.12.10",
"morgan": "^1.10.0",
"multer": "^1.4.2",
"multer-s3": "^2.9.0",
"mysql2": "^2.2.5",
"nodemon": "^2.0.7",
"pakage.json": "^1.0.0",
"request": "^2.88.2",
"rxjs": "^7.2.0",
"sequelize": "^6.6.4",
"sequelize-cli": "^6.2.0"
}
ํด๋ผ์ด์ธํธ - ์๋ฒ - ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๊ธฐ ์ํด DTO๋ฅผ ์์ฑํ์ต๋๋ค.
API์ request์ response์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ด์ฉํด ๋ฐ์ดํฐ๋ฅผ ์ฝ์
ํ๊ฑฐ๋ ์กฐํํ๋ ๋ชจ๋ ๊ฒฝ์ฐ์ DTO๋ฅผ ์ค๊ณํจ์ผ๋ก์จ
data์ mapping์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ์ต๋๋ค.
postDTO
export default interface postDTO{
title?: string;
userId?: string;
province?: string;
region?: string;
isParking?: boolean;
parkingDesc?: string;
courseDesc?: string;
}
mainDTO
import briefInformationDTO from "./briefInformationDTO";
import bannerDTO from "./bannerDTO";
type briefCollectionDTO = briefInformationDTO[];
type bannerCollectionDTO = bannerDTO[];
export default interface mainDTO {
banner: bannerCollectionDTO,
todayCharoDrive: briefCollectionDTO,
trendDrive: briefCollectionDTO,
customThemeTitle: string,
customThemeDrive: briefCollectionDTO,
localTitle: string,
localDrive : briefCollectionDTO
}
๐ ํด๋๊ตฌ์กฐ
๐ node_modules
๐ src
- api ๐
- config ๐
- Loaders ๐
- middleware ๐
- models ๐
- service ๐
- controller ๐
indes.ts
.env
nodemon.json
package.json
tsconfig.json
๐ ๋ค์ด๋ฐ
Class & Contructor
-
Class, Contructors๋ **Pascal Case (=UpperCamelCase)**๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ข์ ์
CamelCase
๋์ ์
camelCase
**ํจ์ & ๋ณ์ & ์์**
-
ํจ์์ ๋ณ์์๋ lowerCamelCase๋ฅผ ์ฌ์ฉํฉ๋๋ค.
-
ํจ์์ ๊ฒฝ์ฐ ๋์ฌ+๋ช ์ฌํํ๋ก ๊ตฌ์ฑํฉ๋๋ค.
- ex) getUserInformation()
-
๊ธ์์ ๊ธธ์ด
- ๊ธ์์ ๊ธธ์ด๋ 20์ ์ด๋ด๋ก ์ ํํฉ๋๋ค.
- 4๋จ์ด ์ด์์ด ๋ค์ด๊ฐ๊ฑฐ๋, ๋ถ๋์ดํ๊ฒ 20์ ์ด์์ด ๋๋ ๊ฒฝ์ฐ์๋ ํ์๊ณผ์ ์์๋ฅผ ๊ฑฐ์ณ์ผ ํฉ๋๋ค.
-
flag๋ก ์ฌ์ฉ๋๋ ๋ณ์
- Boolean์ ๊ฒฝ์ฐ ์กฐ๋์ฌ+flag ์ข ๋ฅ๋ก ๊ตฌ์ฑํฉ๋๋ค.
- ex) isNum, hasNum
-
์ฝ์นญ์ ์ฌ์ฉ
- ์ฝ์ด๋ ๋๋๋ก ์ฌ์ฉํ์ง ์์ต๋๋ค.
์ข์ ์
let index; let count; let array; let seoulToBucheon;
๋์ ์
let idx; let cnt; let arr; let seoul2Bucheon;
๐ท ์ฃผ์
- ํ์ค์
//
๋ก ์ ๊ณ , ๊ทธ ์ด์์/** */
๋ก ์ ์ต๋๋ค.
// ํ์ค ์ฃผ์์ผ ๋
/**
* ์ฌ๋ฌ์ค
* ์ฃผ์์ผ ๋
*/
- ํจ์์ ๋ํ ์ฃผ์
-
backend์์ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉํ๋ ํจ์์ ๊ฒฝ์ฐ, ๋ชจ๋ํ๋ฅผ ํตํด ํ๋์ ํ์ผ๋ก ๊ด๋ฆฌํฉ๋๋ค.
-
ํ๋์ ํ์ผ์ ์์ ๋ถ๋ถ์ ์ฃผ์์ผ๋ก ์์ธ ๋ด์ฉ์ ์์ฑํฉ๋๋ค.
- ํจ์์ ์ ์ฒด ๊ธฐ๋ฅ์ ๋ํ ์ค๋ช
- ํจ์์ ํ๋ผ๋ฏธํฐ์ ๋ํ ์ค๋ช (type: ..., ์ญํ )
- router ๋๋ api์ผ ๋์๋ ์ฑ๊ณต ์ฌ๋ถ๋ ์ ์ด์ค๋๋ค.
- ์์ ์ฝ๋
/** * @route Post api/auth * @desc Authenticate user & get token(๋ก๊ทธ์ธ) * @access Public */ router.get( );
-
๐ ๊ธฐํ
-
ํญ ์ฌ์ด์ฆ๋ 2๋ก ์ฌ์ฉํฉ๋๋ค.
-
ํ ์ค์ ์ต๋ ๊ธธ์ด๋ 80์๋ก ์ ํํฉ๋๋ค.
-
์ต๋ tab depth ์ ํ
- tab์ ์ต๋ depth๋ 4๋ก ์ ํํฉ๋๋ค.
- ์ด ์ด์์ผ๋ก depth๊ฐ ๊ธธ์ด์ง๋ฉด ํจ์๋ฅผ ํตํด ๋๋ ์ ์๋๋ก ํฉ๋๋ค.
- ๊ทธ ์ด์์ผ๋ก ๊ฐ์ ํ ์ ์๋ค๊ณ ํ๋จ๋๋ ๊ฒฝ์ฐ, ํ์๋ค๊ณผ์ ์ฝ๋๋ฆฌ๋ทฐ๋ฅผ ํตํด ๊ฐ์ ํฉ๋๋ค.
function func() { //tab1 if() { //tab2 array.reduce((pre, cur) => { //tab3 if(cur == status) { //tab4 } } } }
-
๊ดํธ ์ฌ์ฉ
- (if, while, for)๋ฌธ ๊ดํธ ๋ค์ ํ์นธ์ ๋์ฐ๊ณ ์ฌ์ฉํฉ๋๋ค.
if (left == true) { // logic }
-
๋์ด์ฐ๊ธฐ
let a = 5; ( = ์์ชฝ ์ฌ์ด๋ก ๋์ด์ฐ๊ธฐ ํ๊ธฐ) if (a == 3) { // logic }
๐๐ป Coding Convention ํ ๋์ ๋ณด๊ธฐ
๐๐ป ๋ค์ Style Guide๋ฅผ ์ฐธ๊ณ ํ์ต๋๋ค.
๐ Charo-Server Git Commit Message Rules ๐
- ๋ฐ์์ฌํญ์ ๋ฐ๋ก ํ์ธํ ์ ์๋๋ก ์์ ๊ธฐ๋ฅ ํ๋๋ผ๋ ๊ตฌํ๋๋ฉด ์ปค๋ฐ์ ๊ถ์ฅํฉ๋๋ค.
- ๊ธฐ๋ฅ ๊ตฌํ์ด ์๋ฒฝํ์ง ์์ ๋, ๊ฐ์ ๋ธ๋์น์ ์ปค๋ฐ์ ํด์ฃผ์ธ์.
- feat : ๊ธฐ๋ฅ (์๋ก์ด ๊ธฐ๋ฅ)
- fix : ๋ฒ๊ทธ (๋ฒ๊ทธ ์์ )
- refactor: ๋ฆฌํฉํ ๋ง
- style : ์คํ์ผ (์ฝ๋ ํ์, ์ธ๋ฏธ์ฝ๋ก ์ถ๊ฐ: ๋น์ฆ๋์ค ๋ก์ง์ ๋ณ๊ฒฝ ์์)
- docs : ๋ฌธ์ (๋ฌธ์ ์ถ๊ฐ, ์์ , ์ญ์ )
- test : ํ
์คํธ (ํ
์คํธ ์ฝ๋ ์ถ๊ฐ, ์์ , ์ญ์ : ๋น์ฆ๋์ค ๋ก์ง์ ๋ณ๊ฒฝ ์์)
- chore : ๊ธฐํ ๋ณ๊ฒฝ์ฌํญ (๋น๋ ์คํฌ๋ฆฝํธ ์์ ๋ฑ)
[์ปค๋ฐ๋ฉ์ธ์ง] ์ค๋ช
ํ์์ผ๋ก ์ปค๋ฐ ๋ฉ์์ง๋ฅผ ์์ฑํฉ๋๋ค.
์ข์ ์ >
[Feat] ๋ฉ์ธ๋ทฐ ์กฐํ API ๊ตฌํ ์๋ฃ
๋์ ์ >
๋ฉ์ธ๋ทฐ API ๊ตฌํ ์ฑ๊ณต
๐ Charo-Server Gitflow ๐
- main ๋ธ๋์น
- develop ๋ธ๋์น
- feat ๋ธ๋์น
default๋ main๋ธ๋์น์
๋๋ค.
ํ์์ develop๋ธ๋์น๋ฅผ ๋ง๋ค์ด ์์ ํ๊ฒ ๊ด๋ฆฌํฉ๋๋ค.
๊ธฐ๋ฅ ๊ฐ๋ฐ์ โ feat/๋ฒํธ ๋ก ๋ธ๋์น๋ฅผ ํ์ ๊ด๋ฆฌํฉ๋๋ค.
* ๋จ feat์ ์์ธํ ๊ธฐ๋ฅ ํ ๊ฐ์ง๋ฅผ ๋ด๋นํ๋ฉฐ, ๊ธฐ๋ฅ ๊ฐ๋ฐ์ด ์๋ฃ๋๋ฉด develop๋ธ๋์น๋ก Pull Request๋ฅผ ๋ณด๋
๋๋ค.
* ๋ค๋ฅธ ํ์์ด pr์ ํ์ธํ๊ณ , ์ฝ๋๋ฆฌ๋ทฐ๋ฅผ ์งํํ ๋ค ๋ฌธ์ ๊ฐ ์์ผ๋ฉด develop ๋ธ๋์น์ ๋ณํฉ์ ํฉ๋๋ค.
- Main
- develop
โโโ feat/๊ธฐ๋ฅ๋ฒํธ
๊ฐ์ ์์ ์ด ๋งก์ ๊ธฐ๋ฅ ๊ตฌํ์ ์ฑ๊ณต์! ๋ธ๋์น ๋ค ์ฐ๊ณ ๋ณํฉํ๋ ๋ฐฉ๋ฒ
- ๋ธ๋์น ๋ง๋ฆ
git branch ๊ธฐ๋ฅ(or ์ด๋ฆ ๋ธ๋์น)
- ์๊ฒฉ ์ ์ฅ์์ ๋ก์ปฌ ๋ธ๋์น push
git push --set-upstream origin ๋ธ๋์น์ด๋ฆ(feat/๊ธฐ๋ฅ๋ฒํธ ๋ธ๋์น)
git push -u origin ๋ธ๋์น์ด๋ฆ(feat/๊ธฐ๋ฅ๋ฒํธ ๋ธ๋์น)
- ๋ธ๋์น ์ ํ
git checkout feat/๊ธฐ๋ฅ๋ฒํธ ๋ธ๋์น
- ์ฝ๋ ๋ณ๊ฒฝ (ํ์ฌ feat/๊ธฐ๋ฅ๋ฒํธ ๋ธ๋์น)
git add .
git commit -m "์ปค๋ฐ ๋ฉ์ธ์ง" origin feat/๊ธฐ๋ฅ๋ฒํธ ๋ธ๋์น
- ํธ์ (ํ์ฌ feat/๊ธฐ๋ฅ๋ฒํธ ๋ธ๋์น)
git push origin feat/๊ธฐ๋ฅ๋ฒํธ ๋ธ๋์น
- ๋ทฐ์ด๋ฆ ๋ธ๋์น์์ ํ ์ผ ๋ค ํ์ผ๋ฉด develop ๋ธ๋์น๋ก ์ ํ
git checkout develop
- ๋จธ์ง (ํ์ฌ develop ๋ธ๋์น)
git merge feat/๊ธฐ๋ฅ๋ฒํธ ๋ธ๋์น
- ๋ค ์ด ๋ธ๋์น ์ญ์ (local) (ํ์ฌ develop ๋ธ๋์น)
git branch -d feat/๊ธฐ๋ฅ๋ฒํธ ๋ธ๋์น
- ๋ค ์ด ๋ธ๋์น ์ญ์ (remote) (ํ์ฌ develop ๋ธ๋์น)
git push origin :feat/๊ธฐ๋ฅ๋ฒํธ ๋ธ๋์น
- main pull (ํ์ฌ develop ๋ธ๋์น)
git pull or git pull origin develop
- main push (ํ์ฌ develop ๋ธ๋์น)
git push or git push origin develop
์ค์์ | ํฉ์ง์ |
---|---|
yaeoni | hwangji-dev |