๐ ์ฑ ์์ ๋ฌธ์ฅ์ ์ ๊ณตํจ์ผ๋ก์จ, ๋ณด๋ค ๊น์ด ์๋ ๊ฐ์ ๊ธฐ๋ก์ ๋์์ฃผ๋ ์ผ๊ธฐ ์ฑ ์๋น์ค 'MOMO'
- SOPT 27th APPJAM
- 2020.12.28 ~ 2021.01.16
MOMO๋ ์ฑ
์์ ๋ฌธ์ฅ๊ณผ ์ผ๊ธฐ๋ฅผ ๊ฒฐํฉํ์ฌ '๋ณด๋ค ์ฌ์ด ๊ฐ์ ๊ธฐ๋ก'์ ๋์์ฃผ๋ ์ผ๊ธฐ ์ฑ์๋น์ค ์
๋๋ค.
์ค๋์ ๊ฐ์ ์ ์ ํํ๋ฉด, โจ๋งค์ผ 3๊ฐ์ฉ ์๋ก์ด ๋ฌธ์ฅ์ด ์ ๊ณต๋ฉ๋๋ค.
๋ง์์ ๋๋ ๋ฌธ์ฅ์ ์ ํํ๊ณ โ์ค๋์ ๊ฐ์ ์ ๊ธฐ๋กํด๋ณด์ธ์.
๋ฌธ์ฅ์ด ๊ฐ์์ฑ์ ์๊ทนํด์ ํ์๋ณด๋ค ํจ์ฌ ์ฝ๊ฒ ๊ฐ์ ์ ๊ธฐ๋กํ ์ ์์ ๊ฑฐ์์.
๐ณ ๊น์ด์ง ๊ฐ์ ์ ๋ฐ๋ค์ ๊น์ด๋ก ํํํด์ ๋๋ง์ ๋ฐ๋ค๋ฅผ ๋ง๋ค์ด๋ณด์ธ์.
์ํฌํ๋ก์ฐ๋ฅผ ๋ณด๋ ค๋ฉด ๐ ์๋๋ฅผ ํด๋ฆญํ์ธ์
๐ MOMO workflow
"์ค๋์ ๊ฐ์ ์ ์ด๋ ๋์?"
"๋ง์์ ํ๋์ด ์ด๋ ๋ฌธ์ฅ์ ๋ง๋๋ณด์ธ์."
โจ์ ์ ๋ณ๋ก ๋งค์ผ ๋งค์ผ ์๋ค๋ฅธ 3๊ฐ์ ๋ฌธ์ฅ์ ๊ฐ์ ๋ณ๋ก ์ ๊ณต
"๊ฐ์ ์ด ์ผ๋ง๋ ๊น์๊ฐ์?
๋๋ง์ ๋ฐ๋ค์ ๊ธฐ๋กํด๋ณด์ธ์"
โ์๊ฐ์ ๊ฐ์ ํํ์ ๋น๋ ค ๊น์ด๊ฐ ๋ด๊ธด ์ผ๊ธฐ๋ฅผ ๊ธฐ๋ก
'2M,30M,700M ๊ทธ๋ฆฌ๊ณ 1005M'
"ํ๋ฌ๊ฐ์ ๊ฐ์ ์ ๋ฐ๋ค ๊น์ํ ์ ์ํ๋ฉฐ ๋๊ปด๋ณด์ธ์"
๐ณ ์๊ฐ ์ผ๊ธฐ ๋ฆฌ์คํธ - ๊น์ด๋ณ ์กฐํ (์ผ๊ธฐ ๋ฌผ๋ฐฉ์ธ ๋๋ค ๋ฐฐ์น)/๋ ์ง๋ณ/ํํฐ๋ณ ์กฐํ ์ ๊ณต
์๊ฐ ์ผ๊ธฐ ํต๊ณ - ํ๋ฌ๊ฐ ๊ฐ์ ์ ํ ๋์ ๋ณผ ์ ์๋ ํต๊ณ ์ ๊ณต
๊ฐ๋ณ ์ผ๊ธฐ ์กฐํ
![]() | ![]() | ![]() |
๊ฐ์์ฐ | ์์ํ | ๊น์ฑ์ |
---|---|---|
๐YeongWoooo | ๐ yeonghyeonSeok | ๐กchaeppy |
์ผ๊ธฐ ์์ฑ, ์กฐํ ์ผ๊ธฐ ํต๊ณ ๊ฐ๋ฐํ๊ฒฝ ์ค์ AWS ์ธํ๋ผ ํ๊ฒฝ ์ค์ Dockerizing |
๋ฌธ์ฅ ์ถ์ฒ, ๋ฑ๋ก ๊ฐ์ ์กฐํ ํ์ ๊ด๋ฆฌ ์๋ฆผ Continuous Deploy |
๋ก๊ทธ์ธ ํ์๊ฐ์ ๋น๋ฐ๋ฒํธ ์ฐพ๊ธฐ Continuous Integration |
typescript
- ํ์ ์คํฌ๋ฆฝํธ ์ง์ ๋ชจ๋ts-node
- typescript node์๋ฒ ๊ตฌ๋nodemon
- ์ฝ๋ ์์ ์ ์๋ ์ฌ์์ ๋๊ตฌswagger
: Api Docssequelize
: ORMcross-env
: ํ๊ฒฝ ๋ณ์jsonwebtoken
: Token ์์ฑ ๋ฐ ์ธ์ฆyup
: ์ ๋ ฅ ๊ฒ์ฆcrypto
: ๋น๋ฐ๋ฒํธ ์ํธํ ๋ฐ ์ธ์ฆdayjs
: ๋ ์ง/์๊ฐaxios
: http ํต์node-schedule
: ์ค์ผ์ฅด๋ฌnodemailer
: ์ด๋ฉ์ผ ๋ฐ์กgoogle-auth-library
: ๊ตฌ๊ธ๋ก๊ทธ์ธprettier
- ์ฝ๋ ํฌ๋ฉงํฐeslint
- ๋ฌธ๋ฒ ์ ์ ๋ถ์ ๋๊ตฌjest
: ํ ์คํธsupertest
- ํตํฉํ ์คํธ ๋ชจ๋
"dependencies": {
"@types/cookie-parser": "^1.4.2",
"@types/cors": "^2.8.9",
"@types/http-errors": "^1.8.0",
"@types/morgan": "^1.9.2",
"@types/yup": "^0.29.11",
"axios": "^0.21.1",
"body-parser": "^1.19.0",
"cookie-parser": "~1.4.4",
"cors": "^2.8.5",
"dayjs": "^1.10.1",
"debug": "~2.6.9",
"dotenv": "^8.2.0",
"errorhandler": "^1.5.1",
"express": "^4.16.4",
"google-auth-library": "^6.1.3",
"http-errors": "~1.6.3",
"jade": "~1.11.0",
"jsonwebtoken": "^8.5.1",
"morgan": "~1.9.1",
"mysql2": "^2.2.5",
"node-schedule": "^1.3.2",
"nodemailer": "^6.4.17",
"rand-token": "^1.0.1",
"sequelize": "^5.22.0",
"sequelize-cli": "^6.2.0",
"swagger-cli": "^4.0.4",
"swagger-jsdoc": "^6.0.0",
"swagger-ui-express": "^4.1.6",
"yamljs": "^0.3.0",
"yup": "^0.32.8"
},
"devDependencies": {
"@types/errorhandler": "^1.5.0",
"@types/express": "^4.17.9",
"@types/jest": "^26.0.20",
"@types/jsonwebtoken": "^8.5.0",
"@types/node": "^14.14.16",
"@types/node-schedule": "^1.3.1",
"@types/nodemailer": "^6.4.0",
"@types/supertest": "^2.0.10",
"@types/swagger-ui-express": "^4.1.2",
"@types/yamljs": "^0.2.31",
"@typescript-eslint/eslint-plugin": "^4.11.1",
"@typescript-eslint/parser": "^4.11.1",
"cross-env": "^7.0.3",
"eslint": "^7.16.0",
"eslint-config-airbnb-base": "^14.2.1",
"eslint-config-prettier": "^7.1.0",
"eslint-plugin-import": "^2.22.1",
"eslint-plugin-prettier": "^3.3.0",
"jest": "^26.6.3",
"nodemon": "^2.0.6",
"prettier": "2.2.1",
"supertest": "^6.0.1",
"ts-jest": "^26.4.4",
"ts-node": "^9.1.1",
"typescript": "^4.1.3"
}
-
๋ณ์๋ช : camel case
-
fommating: prettier
-
lint: eslint
-
airbnb ํ์ ์ฌ์ฉ- ์ธ๋ฏธ์ฝ๋ก , ํญ: 2
-
async await ์ฌ์ฉ
-
ํ์ผ๋ช
- snake case
- ํด๋๋ช : ๋ณต์ํ
- controller์ ๊ฒฝ์ฐ (๋ผ์ฐํฐ๋ช )s_controller.js
- ๋ฉ์๋์ ๋ผ์ฐํฐ๋ช ๋ถ์ด์ง ์๊ธฐ
- ๊ฐ ํด๋์ ์ธ๋ฑ์ค ๋ฃ๊ธฐ
-
๋ณ์๋ช
-
camel case
-
๋ฐฐ์ด: List
-
๋ฐ์ดํฐ๋ฅผ ๋ด๋ ๋ณ์: ๋์ฌ ํฌํจ ๊ธ์ง
-
ํจ์: ๋์ฌ๊ฐ ์ ์ผ ์์ ์์น
-
๋ฉ์๋: READ(์ฐพ๊ธฐ) CREATE(๋ง๋ค๊ธฐ) UPDATE(์์ ํ๊ธฐ) DELETE(์ญ์ ํ๊ธฐ)
-
ํต์ API ์๋ต์ ์ํ ๋ณ์: data๋ก ํต์ผ
{ message: "", data: {}, } res.status(200).json(resJsone~~~)
-
-
๋ธ๋์น ์ค์ฌ ์ด์
- master - ๋ฐฐํฌ์ฉ
- develop - ํ ์คํธ์ฉ
- feat/ - ์๋ก์ด ๊ธฐ๋ฅ ๊ฐ๋ฐ
- fix/ - ์ค๋ฅ๊ฐ ๋ ๊ธฐ๋ฅ ์์
-
์ปค๋ฐ ๋ฉ์ธ์ง
- Feat: ์๊ธฐ๋ฅ
- Refactor: ์๋์๋ ์ฝ๋์ ์์ (๊ธฐ๋ฅ ๋ณ๊ฒฝO)
- Style: ์๋์๋ ์ฝ๋์ ์์ (๊ธฐ๋ฅ ๋ณ๊ฒฝX)
- Docs: ๋ฌธ์๋ณ๊ฒฝ
- Fix: ์ค๋ฅ ์์
- Etc: ์ ๋งคํ๊ฑฐ
- ํ๊ธ๋ก ์ปค๋ฐ
- ์ปค๋ฐ์ ์ดํดํ๊ธฐ ํธํ ๋จ์๋ก ์๊ฒ ์ชผ๊ฐ๊ธฐ
-
๋จธ์ง ๊ท์น
- Pull request
- ์์ฑ์ ์ธ 1๋ช ์ด์์ด ๋ฆฌ๋ทฐ(develop),
- squash and merge ์ฌ์ฉ
-
๋ธ๋์น ์๋๋ฆฌ์ค
- ์ ๊ธฐ๋ฅ ๊ฐ๋ฐ
- master, develop (branch๋ฐ๊ธฐ) โ feat/users(๊ฐ๋ฐ์๋ฃ) โ develop ๋จธ์ง(develop ๋ฌธ์ ์์) โ master๋ก ๋จธ์ง
- ์ค๋ฅ ๋ฐ์
- master (branch๋ฐ๊ธฐ) โ fix/users(์์ ์๋ฃ) โ develop ๋จธ์ง(develop ๋ฌธ์ ์์) โ master๋จธ์ง
- ์ ๊ธฐ๋ฅ ๊ฐ๋ฐ
- Gather Town
- Slack
- Notion
- GitHub - Issue & Projects
- Zoom