-
๋ฐ์ ํ๋์ธ๋ค์ ์ํด ๋๋ง์ ๋ณด์์ ์ ์ฌํ๋ ๋ณด์ ์์นด์ด๋น ์๋น์ค
์ฝ๊ฒ ์ ์ฅํ๊ณ ! ๋ด๊ฐ ์ํ๋ ๋๋ก ๋ชจ์ผ๊ณ ! ๋ณด์์ ๊ณจ๋ผ ๊ธฐ๋ค๋ฆฌ๋ ์ค๋ ๊น์ง!
์์๋ ๋๋ฅผ ์ํ ์๊ฐ์ ํธ๋์บ๋๋ก ์์๊ฐ์ธ์.
๋ณด์, ๋ณด์๋ ์ ์ฅ-์ํ ๋ ์ด๋ ๊ฐ๋ฅ-๋ณด์์ ํตํ ๋ง์กฑ๊ฐ
-
SOPT 28th APPJAM, HANDY-CANDY
-
ํ๋ก์ ํธ ๊ธฐ๊ฐ: 2021.06.26~2021.07.17
๋ด ์ ์์ ๋ฌ์ฝคํ ๋ณด์, HANDY-CANDY
- src
- Logger
- api
- config
- interfaces
- middleware
- models
- jobs
- services
- controllers
- Dockerfile
- eslint
- prettierrc
- commitlint
- tsconfig
Class & Constructor
- ํด๋์ค/์์ฑ์ ์ด๋ฆ์ UpperCamelCase๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ๊ธ์์ ๊ธธ์ด๋ 20์ ์ด๋ด๋ก ์ ํํฉ๋๋ค.
์ข์ ์ >
class HandyCandy
๋์ ์ >
class handycandy {}
ํจ์ & ๋ณ์ & ์ธ์คํด์ค
- ํจ์์ ๋ณ์, ์ธ์คํด์ค์๋ lowerCamelCase๋ฅผ ์ฌ์ฉํฉ๋๋ค.
// MARK:
๋ฅผ ์ฌ์ฉํด์ ์ฐ๊ด๋ ์ฝ๋๋ฅผ ๊ตฌ๋ถ์ง์ต๋๋ค./** */
๋ฅผ ์ฌ์ฉํด์ ์ฝ๋ ์์ฑ์์ ์ด๋ฆ์ ๋ช ์ํฉ๋๋ค.
- , ๋ค์ ๋ฐ๋์ ๋์ด์ฐ๊ธฐ๋ฅผ ํฉ๋๋ค.
- ํจ์๋ผ๋ฆฌ 1์ค ๊ฐํํฉ๋๋ค.
- ์ค๊ดํธ๋ ์๋์ ๊ฐ์ ํ์์ผ๋ก ์ฌ์ฉํฉ๋๋ค.
if (condition) {
Statements;
/*
...
*/
}
์๋ฒ์บ๋ ๋ค์ Git Commit Message Rules
- ๋ฐ์์ฌํญ์ ๋ฐ๋ก ํ์ธํ ์ ์๋๋ก ์์ ๊ธฐ๋ฅ ํ๋๋ผ๋ ๊ตฌํ๋๋ฉด ์ปค๋ฐ์ ๊ถ์ฅํฉ๋๋ค.
- ์ปค๋ฐํ ๋ ์๋ฒ์ฌ๋์ ๋ ธํฐ, pr ํ์, review request ํ์์ ๋๋ค.
- ๊ธฐ๋ฅ ๊ตฌํ์ด ์๋ฒฝํ์ง ์์ ๋, ๊ฐ์ ๋ธ๋์น์ ์ปค๋ฐ์ ํด์ฃผ์ธ์.
์ปค๋ฐ ๊ท์น์ ์งํค์ง ์์ผ๋ฉด commitlint์์ ์๋์ผ๋ก ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค.
- feat : ๊ธฐ๋ฅ (์๋ก์ด ๊ธฐ๋ฅ)
- fix : ๋ฒ๊ทธ (๋ฒ๊ทธ ์์ )
- refactor: ๋ฆฌํฉํ ๋ง
- style : ์คํ์ผ (์ฝ๋ ํ์, ์ธ๋ฏธ์ฝ๋ก ์ถ๊ฐ: ๋น์ฆ๋์ค ๋ก์ง์ ๋ณ๊ฒฝ ์์)
- docs : ๋ฌธ์ (๋ฌธ์ ์ถ๊ฐ, ์์ , ์ญ์ )
- test : ํ
์คํธ (ํ
์คํธ ์ฝ๋ ์ถ๊ฐ, ์์ , ์ญ์ : ๋น์ฆ๋์ค ๋ก์ง์ ๋ณ๊ฒฝ ์์)
- chore : ๊ธฐํ ๋ณ๊ฒฝ์ฌํญ (๋น๋ ์คํฌ๋ฆฝํธ ์์ ๋ฑ)
์ปค๋ฐ๋ฉ์ธ์ง: ์ค๋ช
ํ์์ผ๋ก ์ปค๋ฐ ๋ฉ์์ง๋ฅผ ์์ฑํฉ๋๋ค.- ์ปค๋ฐ ์ค๋ช ์ ๋ฌด์กฐ๊ฑด ์์ด๋ก ํ๋ค๊ณ ์ข์๊ฒ ์๋๋๋ค.
- ์ต๋ํ ๋ด์ฉ ํฌํจ๊ณผ ์์ธํ ์๋ก ์ข์ต๋๋ค.
- ํ์ง๋ง ๋๋ฌด ๊ธธ๊ฒ๋ ์๋ฉ๋๋ค.
์ข์ ์ >
feat: search api ์ถ๊ฐ
๋์ ์ >
๊ฒ์ api ์ถ๊ฐ
์ข์ ์ >
test: ํ์๊ฐ์
๋ก์ง test code ์์ฑ
๋์ ์ >
test code ์์ฑ,
test: test code ์์ฑ
์๋ฒ์บ๋ ๋ค์ WorkFlow : Gitflow Workflow
-
Main๊ณผ Develop ๋ธ๋์น
๋ฉ์ธ(main): ๋ฉ์ธ ๋ธ๋์น -> product
๊ฐ๋ฐ(development): ๊ธฐ๋ฅ๋ค์ ํตํฉ ๋ธ๋์น ์ญํ โ๏ธ ์ด ๋ธ๋์น์์ ๊ธฐ๋ฅ๋ณ๋ก ๋ธ๋์น๋ฅผ ๋ฐ ๋ชจ๋ ๊ตฌํ์ด ์ด๋ฃจ์ด์ง๋๋ค. -> alpha
-
Main์ ์ง์ ์ ์ธ commit, push๋ ๊ฐ๊ธ์ ๊ธ์งํฉ๋๋ค. (X)
-
์ปค๋ฐ ๋ฉ์ธ์ง๋ ๋ค๋ฅธ ์ฌ๋๋ค์ด ๋ด๋ ์ดํดํ ์ ์๊ฒ ์จ์ฃผ์ธ์.
-
ํ๋ฆฌํ์คํธ๋ฅผ ํตํด ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ํด๋ณด์์.
development์ ๋ฐ๋ก mergeํ์ง ์์ต๋๋ค.
pr์ development๋ก ํด์ฃผ์ธ์.
development์์ ์์ฑ์ด ๋๋ฉด main์ผ๋ก ๊ทธ๋ ๊ทธ๋ mergeํฉ๋๋ค.
merge๋ github์์ ์งํํฉ๋๋ค.
merge pull request ๊ธ์ง -> squash and merge ํด๋ฆญ
rebase ๋๋ conflict ํด๊ฒฐ์ github์์ ํ์ง ์์ต๋๋ค.
local code์์ git status๋ก ํ์ธํด๊ฐ๋ฉฐ ์ ์ฉ ํ force push ์งํํฉ๋๋ค.
force push ์ ๋ง ์กฐ์ฌํด์ฃผ์ธ์.
์ด์ ์ฐ๋ ๋ฐฉ๋ฒ
-
์ด์ ์์ฑ
Github์ issue ํญ์ ๋ค์ด๊ฐ์ ๊ธฐ๋ฅ ์ ์์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก issue๋ฅผ ์์ฑํฉ๋๋ค. commit message rules์ ๋์ผํ๊ฒ ์ด์๋ฅผ ์์ฑํด์ฃผ์ธ์. ์ด์๋ฅผ ์์ฑํ๋ฉด ์๋์ผ๋ก ๋ฒํธ๊ฐ ๋ฐ๊ธ๋ฉ๋๋ค. ์ด ๋ฒํธ๋ฅผ ์ฌ์ฉํ์ฌ feature ๋ธ๋์น๋ฅผ ์์ฑํฉ๋๋ค.
-
๋ธ๋์น๋ฅผ ์์ฑํ์ฌ ํด๋น ๋ธ๋์น์ commit, push ํฉ๋๋ค.
-
PR์ ๋ ๋ฆด ๋ ์์ฑ์์ ๋ฆฌ๋ทฐ์ด๋ฅผ ์ค์ ํฉ๋๋ค.
-
์ด ๋ resolved #์ด์๋ฒํธ๋ก ์์ฑํ๋ฉด merge๋ ๋ ํด๋น issue๋ ์๋ ์ญ์ ๋ฉ๋๋ค.
-
์ด๋ ๊ฒ PR์ด ์์ฑ๋๋ฉด ์๋ก์ด issue๋ฒํธ๊ฐ ๋ถ์ฌ๋ฉ๋๋ค. ์ฆ, PR๋ issue์ ๋๋ค.
๊ฐ์ ์์ ์ด ๋งก์ ๊ธฐ๋ฅ ๊ตฌํ์ ์ฑ๊ณต์! ๋ธ๋์น ๋ค ์ฐ๊ณ ๋ณํฉํ๋ ๋ฐฉ๋ฒ
- ๋ธ๋์น ๋ง๋ฆ
git branch feature/issue-๋ฒํธ
- ๋ธ๋์น ์ ํ
git checkout feature/issue-๋ฒํธ
- ๋ธ๋์น ๋ง๋ฆ๊ณผ ๋์์ ์ ํ
git checkout -b feature/issue-๋ฒํธ
- ์ฝ๋ ๋ณ๊ฒฝ (ํ์ฌ feature/issue-๋ฒํธ ๋ธ๋์น)
git add .
git commit -m "์ปค๋ฐ ๋ฉ์ธ์ง" -a // ์ด์๋ณด๋ ์ด๋ฆ๋๋ก ์ปค๋ฐ
- git add . ๋ฅผ ๊ธฐ๋ฅ๋ณ๋ก ๋ชจ์๋๊ฒ ์๋๋ผ๋ฉด ์์ฃผ ์ฐ์ง ๋ง์์ฃผ์ธ์.
- ํด๋น ๊ธฐ๋ฅ๋ผ๋ฆฌ ๋ฌถ์ด์ ์ปค๋ฐํด์ฃผ์ธ์.
- ํธ์ (ํ์ฌ feature/issue-๋ฒํธ ๋ธ๋์น)
git push origin feature/issue-๋ฒํธ ๋ธ๋์น
- feature/๊ธฐ๋ฅ ์ด์ ๋ฒํธ ๋ธ๋์น์์ ํ ์ผ ๋ค ํ์ผ๋ฉด pr์์ ๋จธ์ง ํ development ๋ธ๋์น๋ก ์ ํ
git checkout development
- ๋ค ์ด ๋ธ๋์น ์ญ์ (local) (ํ์ฌ development ๋ธ๋์น)
git branch -d feature/issue-๋ฒํธ
- ๋ค ์ด ๋ธ๋์น ์ญ์ (remote) (ํ์ฌ development ๋ธ๋์น)
git push origin :feature/issue-๋ฒํธ
- development pull (ํ์ฌ development ๋ธ๋์น)
git pull origin development
- ์ต์ development ์ปค๋ฐ ๋ฐ์ rebase
git rebase development
git status
-> conflict ์์ผ๋ฉด ํด๊ฒฐ
ํด๊ฒฐํ ํ์ผ๋ง๋ค git add services/UserService ์ ๊ฐ์ ๋ฐฉ์์ผ๋ก add
git rebase --continue (๋ค ๋ฐ์ํ์ผ๋ฉด ๋ค์ conflict๋ก ๋์ด๊ฐ)
{
"name": "handycandy",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"dev": "ts-node src",
"start": "tsc && node dist",
"build": "tsc && node dist",
"test": "echo \"Error: no test specified\" && exit 1",
"postinstall": "husky install"
},
"author": "",
"license": "ISC",
"devDependencies": {
"@commitlint/cli": "^12.1.4",
"@commitlint/config-conventional": "^12.1.4",
"@types/cors": "^2.8.12",
"@types/node": "^15.12.5",
"@typescript-eslint/eslint-plugin": "^4.28.1",
"@typescript-eslint/parser": "^4.28.1",
"eslint": "^7.29.0",
"eslint-config-airbnb-base": "^14.2.1",
"eslint-config-prettier": "^8.3.0",
"eslint-plugin-import": "^2.23.4",
"eslint-plugin-prettier": "^3.4.0",
"husky": "^7.0.0",
"lint-staged": "^11.0.0",
"prettier": "2.3.2",
"ts-node": "^10.0.0",
"typescript": "^4.3.4"
},
"dependencies": {
"bcryptjs": "^2.4.3",
"cookie-parser": "^1.4.5",
"cors": "^2.8.5",
"dotenv": "^10.0.0",
"express": "^4.17.1",
"express-validator": "^6.12.0",
"gravatar": "^1.8.1",
"jsonwebtoken": "^8.5.1",
"moment": "^2.29.1",
"moment-timezone": "^0.5.33",
"mongoose": "^5.12.15",
"nodemailer": "^6.6.2",
"nodemailer-smtp-transport": "^2.7.4"
},
"husky": {
"hooks": {
"pre-commit": "lint-staged",
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
}
},
"commitlint": {
"extends": [
"@commitlint/config-conventional"
]
},
"lint-staged": {
"**/*.{js,ts}": "eslint"
}
}