๐HOMEDONG : ๋ชจ๋๊ฐ ๊ฑด๊ฐํ๊ฒ ์ง์์ ์ฆ๊ธธ ์ ์๋ ์ด๋ ๊ฒ์ - SSAFY 5๊ธฐ ๊ณตํต ํ๋ก์ ํธ ์ฐ์์(2021.08.20)
ํ๋ ์๋๋ฆฌ์ค๋ ๐์ฌ๊ธฐ๐์์ ๋ ์์ธํ ๋ณด์ค ์ ์์ต๋๋ค.
1์ผ 1์ปค๋ฐ์ ์ดํ์ด ๋ถ๊ณ ์๋ ์ฌ๋ฌ๋ถ๋ค์ ๊ฑด๊ฐ์ ๊ด์ฐฎ์ผ์ ๊ฐ์? ๋ชจ๋์ ๊ฑด๊ฐ์ ์ฑ ์์ง๊ธฐ ์ํด ์ ํฌ HomeDong์ด ์์ต๋๋ค โ1์ผ 1ํ๋(ํ ํธ๋ ์ด๋ ์ด๋)์ ์์์ ํ๋๊ณผ ํจ๊ปํ๊ณ ๊ฑด๊ฐ์ ์ง์ผ๋ณด์ธ์!
์ธ์ ์ด๋์๋ ๊ฑด๊ฐ์ ์ฑ๊ธฐ๋ฉฐ ํจ๊ป ์ฆ๊ธด๋ค!
๐ฑBackend
๐ฑFrontend
๐ฑWeb RTC
๐ฑPose Detection
๐ฑCI/CD
์ ๊ฐ ๋ด๋นํ์ฌ ์๋น์ค ์ํคํ ์ฒ์ ๊ฐ์ด, Jenkins์ pipeline์ ์ด์ฉํ์ฌ ์๋ ๋ฐฐํฌ๋ฅผ ๊ตฌ์ถํ์์ต๋๋ค. Gitlab webhook์ ์ค์ ํ์ฌ Jenkins์ ๋น๋ ํธ๋ฆฌ๊ฑฐ๋ฅผ ์ค์ ํ๊ณ , ์ด์ ๋ฐ๋ผ Gitlab์์ master ๋ธ๋์น์ pushํ๋ฉด ์๋์ผ๋ก ๋ฐฐํฌ๋ ์ ์๋๋ก ๊ตฌ์ถํ์ฌ ๊ฐ๋ฐํ๋ ๊ณผ์ ์์ ๋ฐฐํฌ๋ก ์ธํ ์๊ฐ ๋ญ๋น๋ฅผ ์ค์์ต๋๋ค. ๋ํ ํ๋ก ํธ์๋์ธ React.js๋ Nginx์ ํจ๊ป docker image๋ก ๋น๋ํ์ฌ ๋ฐฐํฌํ์๊ณ , ๋ฐฑ์๋ ๋ฐ redis, openvidu ๋ํ docker container๋ก ๋ฐฐํฌํ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ Nginx์ letsencrypt๋ฅผ ์ด์ฉํ์ฌ ssl ์ธ์ฆ์๋ฅผ ์ ์ฉํ์๊ณ , ํ๋ก ํธ์๋๋ 443(https)๋ก ํ๋ก์๋ก ๋ถ๊ธฐ์์ผฐ๊ณ ๋ฐฑ์๋๋ /api ๊ฒฝ๋ก๋ก ํ๋ก์๋ฅผ ๊ฑธ์ด์คฌ์ต๋๋ค.
์์ธ๋ฅผ ํ์ต์์ผ pose detection์ ํตํ ๋ชจ์ ์ธ์์ผ๋ก ์์ธ ์ธ์์ ํตํด ์ ์ ๊ฐ ๊ฐ ์ด๋ ์ข ๋ชฉ์ ์ ์ํํ๋์ง ์ฒดํฌํ๊ณ , ์ด๋ ๊ฐ์๋ฅผ ์นด์ดํ ํ ์ ์๋๋ก ํ์์ต๋๋ค.
์ด๋ฐ ์์ผ๋ก Teachable Machine์ผ๋ก ํ์ต์ ์ํค๋ฉด ์์ธ๋ณ๋ก ๋์ถ๋ ๊ฐ์ ์ด์ฉํ ์ ์๊ฒ ๋ฉ๋๋ค. ์ฌ๊ธฐ์ ์ถ์ถ๋ ์ฝ๋์ ๊ฐ์ผ๋ก ํ๋ ์๋น์ค์ ๋ง๊ฒ ๊ฐ๊ณตํ์ฌ ๊ตฌํํ์์ต๋๋ค.
Openvidu๋ก๋ง ํ ์ ์๋ ๊ธฐ๋ฅ ๋ฟ๋ง์ด ์๋๋ผ ๋ฐฑ์๋๋ฅผ ํจ๊ป ์ด์ฉํ ๊ฐ๋ฐ๋ก ์ฌ๋ฌ ๊ธฐ๋ฅ์ ๊ตฌํํ์ต๋๋ค. ๊ฐ ๋ฐฉ๋ง๋ค ์ธ์์๊ฐ 6๋ช ๊น์ง๋ง ๋ค์ด๊ฐ ์ ์๊ฒ ๊ตฌํํ์๊ณ , ๋ฐฉ์ฅ๋ง ๊ฒ์์ ์์ํ ์ ์๊ธฐ์ ๋ฐฉ์ ๋ง๋ค๊ฑฐ๋ ๋ฐฉ์์ ์ธ์์ด ๋๊ฐ๋ฉด ์๋์ผ๋ก ๋ค๋ฅธ ์ฌ๋์๊ฒ ๋ฐฉ์ฅ ๊ถํ์ด ๋ถ์ฌ๋๊ฒ ํ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ private ๋ฐฉ์ ๋ง๋ค ์ ์๊ฒ ํ์ฌ ๋ฐฉ ๋ฒํธ์ ๋น๋ฐ๋ฒํธ๋ฅผ ์๋ ์ฌ์ฉ์ ์ธ์๋ ๋ค์ด์ค์ง ๋ชปํ๊ฒ ๊ตฌํํ์๊ณ , ๋น ๋ฅธ ์์ ๊ธฐ๋ฅ์ ๊ตฌํํ์ฌ ํ์ฌ ์กด์ฌํ๋ ๋ฐฉ์ ๋น ๋ฅด๊ฒ ์ ์ฅํ ์ ์๊ฒ ํ์๊ณ , ๋ฐฉ์ด ์์ผ๋ฉด ์๋์ผ๋ก ๋ฐฉ ์์ฑ๊น์ง ํ ์ ์๋๋ก ๊ตฌํํ์์ต๋๋ค.
๋ญํน ๊ธฐ๋ฅ์ ๋ค์ด๊ฐ๋ ๋ญํน ์ ๋ณด๋ ์์ ๋ง๋ค ์ ๋ฐ์ดํธ ๋๋ ์ ๋ณด์ฌ์ ๋จ์ํ ๊ตฌ์กฐ์ ์ ๋ณด์ด๊ณ , ๋ฐ๋ณต์ ์ผ๋ก ๋์ผํ๊ฒ ์ ๊ณต๋๊ณ , ์ต์ ํ๊ฐ ์ค์๊ฐ์ผ๋ก ํ์ํ์ง ์์ ์ ๋ณด์์ต๋๋ค. ์ด๋ฌํ ๋ฐ์ดํฐ์ ํน์ฑ์ผ๋ก ์บ์ฑ์ ์ ์ฉํ๊ธฐ์ ์ ์ ํ๋ค๊ณ ์๊ฐ์ ํ๊ณ , Redis์ ๋ญํน ์ ๋ณด๋ฅผ ์ ์ฅํ์ฌ DB๋ฅผ ๊ฑฐ์น์ง ์๊ณ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ ํธ๋ํฝ์ด ๋ง์์ง ๋ ๋ฐฑ์๋ ๋ถํ๋ฅผ ์ค์ด๊ณ , ์ ๋ณด ์กฐํ ์๋๋ฅผ ๋์์ต๋๋ค. ๋ํ ์ ํฌ๋ Spring Scurity์ JWT๋ฅผ ์ด์ฉํ์ฌ ์ธ์ฆ์ ๊ตฌํํ์๋๋ฐ, Redis๋ฅผ ์ด์ฉํด ๋ก๊ทธ์์์ํจ ํ ํฐ๋ค์ ๋ง๋ฃ์ฒ๋ฆฌํ์ฌ ํด๋น ํ ํฐ์ผ๋ก๋ ๋ค์ ์ธ์ฆํ ์ ์๋๋ก ๊ตฌํํ์์ต๋๋ค.
ํ๋ก ํธ์๋ ๊ตฌํ์์๋ React์ redux-toolkit์ ์ด์ฉํ์ฌ Ducks Pattern ๊ธฐ๋ฐ ์ํ ๊ด๋ฆฌ๋ฅผ ํ์์ต๋๋ค.
๋์ปค, Nginx, Jenkins๋ฅผ ์ด์ฉํ ์๋ ๋ฌด์ค๋จ ๋ฐฐํฌ๋ฅผ ๊ตฌํํ์์ต๋๋ค. ๋ฐฑ์๋๋ฅผ ๋์ปค ์ปจํ ์ด๋๋ก ๋ฐฐํฌํ์๊ณ , ํ๋ก ํธ๋ก Nginx์ ํจ๊ป ๋์ปค ์ปจํ ์ด๋๋ก ๋ฐฐํฌํ์์ต๋๋ค.
- ์๋ฏธ ์๋ ๋ณ์๋ช
X
โ ์ ์ง๋ณด์ ํ๋ค๊ณ , ์์๋ณด๊ธฐ ํ๋๋ ๋ฐ๋์ ์ง์! ex) text1, test2
- ๋ฉ์๋ ์ด๋ฆ์ ์๋ฌธ์๋ก ์์ํ๊ณ , ๋์ฌ๋ก ์ง์ผ๋ฉด ์ข๋ค! ex) getName()
- ๋ณ์๋ช
, ๋ฉ์๋ ์ด๋ฆ์ ์นด๋ฉ์ผ์ด์ค๋ก ์ง์ด์ฃผ์ธ์
- ํด๋์ค ์ด๋ฆ์ ๋๋ฌธ์๋ก ์์ํฉ๋๋ค
ํด๋น Code Convention ๊ฐ์ด๋, ๋ค์ด๋ฐ ๊ท์น๋ฅผ ์ฐธ๊ณ ํ์ฌ ์ ํ์ต๋๋ค.
FEAT: ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ ๊ฒฝ์ฐ
FIX: ๋ฒ๊ทธ๋ฅผ ๊ณ ์น ๊ฒฝ์ฐ
STYLE: ์ฝ๋ ํฌ๋งท ๋ณ๊ฒฝ, ๊ฐ๋จํ ์์ , ์ฝ๋ ๋ณ๊ฒฝ์ด ์๋ ๊ฒฝ์ฐ
REFATOR: ํ๋ก๋์
์ฝ๋ ๋ฆฌํฉํ ๋ง
DOCS: ๋ฌธ์๋ฅผ ์์ ํ ๊ฒฝ์ฐ(ex> Swagger)
Rename: ํ์ผ ํน์ ํด๋๋ช
์์ ๋ฐ ์ด๋
Remove: ํ์ผ ์ญ์
CHORE: ๋น๋ ์
๋ฌด ์์ (ex> dependency ์ถ๊ฐ)
์ปค๋ฐ ํ์
: ๋ด์ฉ ์์ธํ ์ ์ด์ฃผ๊ธฐ [#์ง๋ผ์ด์๋๋ฒ]
ex) FEAT: ๋ก๊ทธ์ธ rest api ์ถ๊ฐ [#์ง๋ผ์ด์๋๋ฒ]
ํด๋น Git ์คํ์ผ ๊ฐ์ด๋๋ฅผ ์ฐธ๊ณ ํ์ฌ์ ์ ํ์ต๋๋ค
Git Flow model์ ์ฌ์ฉํ๊ณ , Git ๊ธฐ๋ณธ ๋ช ๋ น์ด ์ฌ์ฉํ๋ค.
Git Flow ์ฌ์ฉ ๋ธ๋์น
Git Flow ์งํ ๋ฐฉ์
feature ๋ธ๋์น๊ฐ ์์ฑ๋๋ฉด develop ๋ธ๋์น๋ก pull request๋ฅผ ํตํด mergeํ๋ค.
โ pull request๊ฐ ์์ฒญ๋๋ฉด, ๋ชจ๋ ํ์๋ค์ด ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ํ์ฌ ์์ ํ๊ฒ mergeํ๋ค.
๋งค ์ฃผ๋ง๋ค develop ๋ธ๋์น๋ฅผ master ๋ธ๋์น๋ก ๋ณํฉํ์ฌ ๋ฐฐํฌ๋ฅผ ์งํํ๋ค.
feature ๋ธ๋์น ์ด๋ฆ ๋ช ๋ช ๊ท์น
feature/[front or back]/[๊ธฐ๋ฅ ์ด๋ฆ]
ex) feature/front/login
ex) feature/webrtc
ํ์ ๋ฐ ์ผ์ , ์ ๋ฌด ๊ด๋ฆฌ๋ฅผ ์ํด Jira๋ฅผ ์ด์ฉํ์์ต๋๋ค. ๋งค์ฃผ ์์์ผ ์ค์ ํ์์์ ํ ์ฃผ๋์ ์งํ๋์ด์ผ ํ ์ฃผ ๋จ์ ๊ณํ์ ์ง๊ณ , ์งํํ ์ด์๋ค์ ์คํ๋ฆฐํธ๋ฅผ ๋ง๋ค์ด ๋ฑ๋กํ์ต๋๋ค. ์คํ๋ฆฐํธ๋ ์ผ์ฃผ์ผ ๋จ์๋ก ์งํํ์์ต๋๋ค.
๋ง์ดํ์ด์ง์์ ํ๋กํ ๋ณ๊ฒฝ ๋ฒํผ์ ํตํด ํ๋กํ์ ๋ณ๊ฒฝ ํ๋ค
์ ๊ฐ์ด ์์ธํ๊ฒ ์์ฑํ์์ต๋๋ค.์ด ์ธ์, subtask์ ์์ ์๊ฐ์ ๊ธฐ๋กํด ๋ ์ธ์ธํ๊ฒ ์ผ์ ๊ด๋ฆฌ๋ฅผ ํ๊ณ ํ์ ๋ฉ์ ์ (Mattermost)์ ์๋์ ๋ฑ๋กํ์ฌ ์์ ์ํฉ์ ์ค์๊ฐ์ผ๋ก ํ์ธํ ์ ์๋๋ก ํ์ต๋๋ค.
๋ชจ๋๊ฐ ๋ด์ผํ ๊ณต์ง, ํจ๊ป ๊ณต๋ถํด์ผ ํ ๋งํฌ ๋ฑ์ ๋ชจ์ ๊ด๋ฆฌํ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ํญ์ ๋ชจ๋ ํ์ ๋ฐ ํผ๋๋ฐฑ์ ๊ธฐ๋ก์ผ๋ก ๋จ๊ฒจ๋์ด์ ์ ๋ฐ์ํ ์ ์๋๋ก ํ์์ต๋๋ค. ์ปจ๋ฒค์ ๊ท์น, ๋ธ๋์น ์ ๋ต ๋ฑ๋ ๋ ธ์ ์ ๊ธฐ๋กํ์ฌ ๋ชจ๋๊ฐ ํญ์ ํ์ธํ ์ ์๋๋ก ๊ด๋ฆฌํ์ต๋๋ค.
๋งค์ผ ์์นจ 9์์ ์ด์ ํ๋ ์ผ, ์ค๋ ํ ์ผ, ์ด์๋ฅผ ๊ฐ์ ์ ๋ฆฌํด์ 5~10๋ถ ๋์ ์๋ก ๊ณต์ ํ๋ ์๊ฐ์ ๊ฐ์ก์ต๋๋ค. Scrum์ ํตํด ํ์๋ค์ ํ์ฌ ์ํฉ์ ๊ณต์ ํ์ฌ ํ๋ก์ ํธ์ ๋ํด์ ๊พธ์คํ ๋ชจ๋ํฐ๋ง์ ํ ์ ์์์ต๋๋ค. ๋งค์ผ ์งํํ๋ Scrum ํ์๋ก์ Notion์ ์ ๋ฆฌํ์ต๋๋ค.
PORT | ์ด๋ฆ |
---|---|
443 | HTTPS |
80 | HTTP - HTTPS๋ก ๋ฆฌ๋ค์ด๋ ํธ(ํ๋ก ํธ ํ์ด์ง์ง๋ก ๋ฆฌ๋ค์ด๋ ํธ) |
8443 | Openvidu |
8379 | Redis |
3306 | MySQL |
8081 | Jenkins |
8080 | Spring boot Docker Container |
3000 | React, NginX Docker Container |
๐HomeDong ๊ธฐ์ ๋ธ๋ก๊ทธ ๋ณด๋ฌ๊ฐ๊ธฐ ๐
์์ธํ ํ๊ณ ๋ ๋ธ๋ก๊ทธ์์ ์์ธํ ๋ณด์ค ์ ์์ต๋๋ค.