ํ์์ผ๋ก ์ฆ๊ธฐ๋ ๋งํผ์ ๊ฒ์
https://ssafia.r-e.kr/home
- ์งํ ๊ธฐ๊ฐ: 2021.07.12 ~ 2021.08.20
- ๋ชฉํ
- ํ๋ ์ด์ด๋ ์์ฑ๊ณผ ์์์ ํตํด ์๋ก ์ํตํ๋ฉฐ, ์คํ๋ผ์ธ์ผ๋ก๋ง ์ฆ๊ธฐ๋ ๋งํผ์ ๊ฒ์์ ์จ๋ผ์ธ์ผ๋ก ์ฆ๊ธธ ์ ์์ต๋๋ค.
- ์ดํ๋ฆฌ์ผ์ด์ ์ ์ค์นํ์ง ์๊ณ ๋ ์น ๋ธ๋ผ์ฐ์ ๋ก ๊ฐํธํ๊ฒ ์ ์ํด ์ด๋์๋ SSAFIA๋ฅผ ์ด์ฉํ ์ ์์ต๋๋ค.
- ํ์๊ฐ์ ์ ํ์ง ์์๋ ๊ตฌ๊ธ ๋ก๊ทธ์ธ๋ง ํ๋ฉด ์ฝ๊ฒ ๋ฐฉ์ ์์ฑํ ์ ์์ต๋๋ค.
- URL๋ก ์น๊ตฌ๋ค์ ์ด๋ํ๋ฉด ๋ก๊ทธ์ธ์ ๋ฒ๊ฑฐ๋ก์ ์์ด ๊ฒ์์ ์ฆ๊ธธ ์ ์์ต๋๋ค.
- ์ฌ๋ฏธ์๋ ์ ๋๋ฉ์ด์ ๊ณผ ์ฌ์ฉ์ ์นํ์ ์ธ UI/UX๋ฅผ ์ค๊ณํด ๊ฒ์์ ๋ชฐ์ ๊ฐ์ ๋์ ๋๋ค.
SSAFIA๋ ์จ๋ผ์ธ์ผ๋ก ๋งํผ์ ๊ฒ์์ ์ฆ๊ธธ ์ ์๋ ํ์ ๊ธฐ๋ฐ ๋งํผ์ ์น ๊ฒ์์ ๋๋ค.
์ฝ๋ก๋ 19 ๋ฐ์ด๋ฌ์ค๋ก ์ธํด ์ธํํธ ์๋์ ๋ค์ด์๋ฉฐ ๋์ ์ผ๋ก ํ ์ ์๋ ๊ฒ์, ํ์, ๋์ด, ์๋ค ๋ฌธํ ๋ฑ์ ์ธ๊ธฐ๊ฐ ๋์์ก์ต๋๋ค. ํ์ฌ๊น์ง๋ ZOOM์ด๋ ์น์์ค ๋ฑ์ ๊ธฐ์กด ํ์์ฑํ ๋๊ตฌ๋ฅผ ์ด์ฉํ์ฌ ๊ฒ์์ ํ์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ฏธํ ๊ธฐ๋ฅ์ ์ด์ ์ด ๋ง์ถฐ์ง ์ดํ๋ฆฌ์ผ์ด์ ์์๋ ๊ฒ์ ์งํ์ ํ๊ณ๊ฐ ์์์ต๋๋ค. ๊ทธ๋์ "SSAFIA"๋ ๋งํผ์ ๊ฒ์ ๊ธฐ๋ฅ์ ์ด์ ์ ๋ง์ถ ํ์ ์ฑํ ์๋น์ค๋ฅผ ์ ๊ณตํ๊ณ ์ ํฉ๋๋ค.
-
์ธ์ ์์ ๋ฐ๋ฅธ ์ง์ ๋ถ๋ฐฐ
- ์ต์ 4์ธ์ด ๊ฐ์ถฐ์ ธ์ผ ๊ฒ์ ์์ ๊ฐ๋ฅ
- 4์ธ์ ๊ฒฝ์ฐ ํน์์ง์ ์์ด ๋งํผ์ 1, ์๋ฏผ 3์ผ๋ก ์์
- 5์ธ์ ๊ฒฝ์ฐ ํน์์ง์ ์์ฌ ์ถ๊ฐ, ์์ฌ1, ๋งํผ์1, ์๋ฏผ3์ผ๋ก ์์
- 6์ธ๋ถํฐ๋ ํน์์ง์ ์์ฌ์ ๊ฒฝ์ฐฐ ๋ชจ๋ ๋ฑ์ฅ, ์์ฌ1, ๊ฒฝ์ฐฐ1, ๋งํผ์ (์ธ์์//3), ์๋ฏผ (๋๋จธ์ง)๋ก ์์
-
์น๋ฆฌ์กฐ๊ฑด
- ๋งํผ์์ ๊ฒฝ์ฐ: ์๋ฏผ์ ์๊ฐ ๋งํผ์์ ๊ฐ์์ง๋ฉด ๊ฒ์ ์น๋ฆฌ
- ์๋ฏผ, ์์ฌ, ๊ฒฝ์ฐฐ์ ๊ฒฝ์ฐ: ๋ชจ๋ ๋งํผ์๋ฅผ ์ ๊ฑฐํ๋ฉด ๊ฒ์ ์น๋ฆฌ, ํน์ ์ ํ๋ ํด์ด 15ํด ์์ ๊ฒ์์ด ๋๋์ง ์์ ๊ฒฝ์ฐ ์น๋ฆฌ
-
ํฌํ ๊ท์น
- ํฌํ์ ์ข
๋ฅ๋ ํฌ๊ฒ 3๊ฐ์ง
๋ฎ ํฌํ
: ์ด์์๋ ๋ชจ๋ ์ฌ๋์ด ์ฐธ๊ฐํ ์ ์๋ ํฌํ๋ก ์ฌ๊ธฐ์ ์ต๋ค๋ํ์๋ ์ต์ข ํฌํ ํ๋ณด๊ฐ ๋จ์ต์ข ํฌํ
: ์ต์ข ํฌํ ํ๋ณด์๋ฅผ ์ ๊ฑฐํ ์ง ์๋์ง๋ฅผ ์ ํ๋ ํฌํ๋ฐค ํฌํ
: ์๋ฏผ์ ์ ์ธํ ๋งํผ์, ๊ฒฝ์ฐฐ, ์์ฌ๊ฐ ํ๋ ํฌํ๋ก ๊ฐ๊ฐ์ ์ง์ ๋ง๋ค ๋ค๋ฅธ ํจ๊ณผ๋ฅผ ์ง๋- ๋งํผ์: ๋๋ฃ๋ผ๋ฆฌ ์ํตํด ์๋ฏผ์ ์ ๊ฑฐํ ์ ์์
- ๊ฒฝ์ฐฐ: ํฌํํ ์ฌ๋์ ์ง์ ์ ์ ์ ์์
- ์์ฌ: ํฌํํ ์ฌ๋์ ์ด๋ฒ ๋ฐค ํฌํ์์ ์ด๋ฆด ์ ์์
- ๋ชจ๋ ํฌํ๋ ์๋์ ๊ฐ์ ๊ท์น์ ๋ฐ๋ฆ
- ๊ฐ ํ์ด์ฆ๋ณ ๋จ์์๋ ์๊ฐ๋์ ๋ง์๊ป ํฌํ๋์์ ๋ฐ๊ฟ ์ ์์ผ๋ฉฐ, ๋ด๊ฐ ํ ํฌํ๋ฅผ ์ทจ์ํ ์๋ ์์
- ๊ธฐ๋ณธ์ ์ผ๋ก ํฌํํ์ง ์๋๋ค๋ฉด ์ด๋ ๋ฌดํจํ๋ฅผ ๋์ง ๊ฒ์ผ๋ก ๊ฐ์ฃผ
- ๋ฎ ํฌํ๋ ์ ๊ธฐ๋ช ํฌํ๋ก ์์ ์ด ๋๊ตฌ์๊ฒ ํฌํํ๋์ง๋ฅผ ์ค์๊ฐ์ผ๋ก ๋ฐ์
- ๋ฐค ํฌํ์ ๊ฒฝ์ฐ ๋งํผ์๋ผ๋ฆฌ๋ง ์์ ์ด ๋๊ตฌ์๊ฒ ํฌํํ๋์ง๋ฅผ ์ค์๊ฐ์ผ๋ก ๋ฐ์
- ๋ฌดํจํ์ ๋๋ฅ ์ ๊ดํ ์กฐํญ
- ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฌดํจํ๊ฐ ๊ณผ๋ฐ์ด ๋์ด๊ฐ๋ฉด ๊ทธ ํฌํ๋ ๋ฌดํจ๋ก ์ฒ๋ฆฌํ๊ณ ๋ค์ ํ์ด์ฆ๋ก ๋์ด๊ฐ๋ค.
- ๋ฎ ํฌํ์์ ์์กด์๊ฐ 5์ธ ์ดํ์ผ๊ฒฝ์ฐ 2๋ช , ์์กด์๊ฐ 6์ธ ์ด์์ผ๊ฒฝ์ฐ 3๋ช ๊น์ง ์ต์ข ํฌํ ํ๋ณด์ ์ฌ๋ผ๊ฐ ์ ์๋ค.
- ๋ฐคํฌํ์ ์ต์ข ํฌํ์ ๊ฒฝ์ฐ ๋๋ฅ ์ด ๋์ค๋ฉด ํฌํ๊ฒฐ๊ณผ๋ฅผ ๋ฌดํจ๋ก ์ฒ๋ฆฌํ๊ณ ์งํํ๋ค.
- ํฌํ์ ์ข
๋ฅ๋ ํฌ๊ฒ 3๊ฐ์ง
์์
: ๊ฐ ํ๋ ์ด์ด๋ ์์ ์ ์ง์ ์ด ๋ฌด์์ธ์ง ๋ฐ์๋ณด๊ฒ ๋ฉ๋๋ค.๋ฎ ํฌํ
: ๊ฐ ํ๋ ์ด์ด๋ ์์ฌ์ค๋ฌ์ด ์ฌ๋์ ํฌํ ํ ์ ์์ต๋๋ค.์ต์ข ํฌํ
: ์ต์ข ๋ณ๋ก ์๋ ์ฃผ์ด์ง ์๊ฐ ๋์ ๋ณ๋ก ํ๊ฒ ๋ฉ๋๋ค. ๋๋จธ์ง ํ๋ ์ด์ด๋ ์ต์ข ๋ณ๋ก ์์๊ฒ KILL/SAVE ํฌํํฉ๋๋ค. ๋ฎ ํฌํ๊ฐ ๋ฌดํจ์ฒ๋ฆฌ๋ ๊ฒฝ์ฐ ์คํต๋ฉ๋๋ค.์ต์ข ํฌํ ๊ฒฐ๊ณผ ๋ฐํ
: ์ต์ข ํฌํ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํฉ๋๋ค.๋ฐค ํฌํ
: ์์ฌ, ๋งํผ์, ๊ฒฝ์ฐฐ์ ๊ฐ๊ฐ ํฌํ๋ฅผ ์งํํ๊ฒ ๋ฉ๋๋ค.๋ฐค ํฌํ ๊ฒฐ๊ณผ ๋ฐํ
: ์์ฌ, ๋งํผ์, ๊ฒฝ์ฐฐ์ ํฌํ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํฉ๋๋ค.์ฌ๋ง ์
: ์ฌ๋ง์ ๊ด์ ์ ๋ชจ๋๊ฐ ๋์ด ์ค๋์ค์ ๋น๋์ค๊ฐ ๊ฐ์ ๋ก ๊บผ์ง๋๋ค. ๊ด์ ์๋ ๋ชจ๋ ํ๋ ์ด์ด์ ์ค๋์ค์ ๋น๋์ค๋ฅผ ๋ณผ ์ ์์ผ๋ฉฐ ์ง์ ๋ํ ์ ์ ์์ต๋๋ค.์ข ๋ฃ
: ์ด๋์ธก์ด ์น๋ฆฌํ๋์ง๋ฅผ ๋ฐํํ๊ฒ ๋๋ฉฐ, ๋๊ธฐ ์ํ๋ก ๋ค์ ๋์๊ฐ๊ฒ ๋ฉ๋๋ค.
SSAFIA๋ ํ์๊ฐ์ ์ ๋ฐ๋ก ํ์ง ์์๋ ๊ธฐ์กด ๊ตฌ๊ธ ์์ด๋๋ก ๋ก๊ทธ์ธํ๋ฉด ๋ฐ๋ก ๋ฐฉ์ ๋ง๋์ค ์ ์์ต๋๋ค.
- ๊ฒ์ ๋ชจ๋๋ฅผ ์ ํํ๊ณ , ๋๋ค์์ ์ ๋ ฅํ๋ฉด ๋ฐฉ์ ์์ฑํ ์ ์์ต๋๋ค
- ๋ฐฉ์ฅ์ url์ ํตํด ์น๊ตฌ๋ฅผ ์ด๋ํ ์ ์์ต๋๋ค.
openvidu๋ฅผ ํ์ฉํด ํ์์ฑํ ์ ๊ตฌํํ์ต๋๋ค. ํ๋ ์ด์ด๋ค์ ๋ํ๋ฅผ ํตํด ์ธํผ์ ๊ฒ์์ ํ๋ ์ดํ ์ ์์ต๋๋ค.
- ๋์์ ๋งํ ๋ ํท๊ฐ๋ฆฌ์ง ์๋๋ก ํ์ฌ ๋งํ๋ ์ฌ๋์ด ๋๊ตฌ์ธ์ง ํ์๋ฉ๋๋ค.
์ค์ ์น๊ตฌ๋ค๊ณผ ๋ชจ์ฌ์ ํ๋ ๊ฒ์ฒ๋ผ ๋งํ๊ณ , ํฌํํ๊ณ , ์ ์นํ ์ ์์ต๋๋ค.
- webSocket์ ์ด์ฉํด ๋งํผ์ ๊ฒ์ ๊ธฐ๋ฅ์ ๊ตฌํํ์ต๋๋ค.
-
๋ฐค์ ๋งํผ์๋ค์ ๊ณ ๊ฐ๋ฅผ ๋ค์ด ๋๊ตด ์ ๊ฑฐํ ์ง ๊ณ ๋ฏผํ๋ ๊ฒ ์ฒ๋ผ ์ธํผ์์์๋ ๋๊ฐ์ ์ฒดํ์ ํ ์ ์์ต๋๋ค.
-
ํฌํ๊ธฐ๋ฅ
- ํฌํํ๊ณ ์ถ์ ์ฌ๋์ ํด๋ฆญํ๋ฉด ํฌํํ์ค ์ ์์ต๋๋ค.
- ์ ํ์๊ฐ ์์๋ ํฌํ๋ฅผ ๋ฐ๊ฟ์๋ ์๊ณ ์ทจ์ํ ์ ์์ต๋๋ค.
- ๋ ์ด์ ๋ฐ๊ฟ ๋ง์์ด ์๋ค๋ฉด ํฌํํ์ ๋ฒํผ์ ํด๋ฆญํด ํ์ ํ ์ ์์ต๋๋ค.
- ๊ด์ ๊ธฐ๋ฅ
- ์ฌ๋ง ์, ์๋ฌด ์ญํ ์์ด ๊ฒ์์ด ์งํ๋๋ ๊ฒ์ ๋ณด๊ธฐ๋ง ํ๋ ๊ฒ์ด ์๋๋ผ, ๋ค๋ฅธ ์ฌ๋๋ค์ ์ง์ ์ด ๋ฌด์์ธ์ง ๋ฌด์จ ์๊ธฐ๋ฅผ ํ๊ณ ์๋์ง ๋ค์ ์ ์์ต๋๋ค.
- ๋น๋์ค ์จ์คํ ๊ธฐ๋ฅ
- ์ง์ง ๋ชจ์ฌ์ ๋งํผ์๋ฅผ ํ๋ ๊ฒ์ฒ๋ผ ๋ฐค์ด ๋๋ฉด ๋ค๋ฅธ ์ฌ๋์ ์์์ด๋ ์ค๋์ค๋ฅผ ๋ฃ์ง ๋ชปํ๊ฒ ๋๊ณ , ํน์ ์ฌ๋๋ค๋ผ๋ฆฌ๋ง ํ์ธํ ์ ์๋๋ก ๋ฉ๋๋ค.
- frontend
- vue 3.1.5
- vuex 4.0.2
- vue-router 4.0.10
- sockjs-client 1.5.1, webstomp-client 1.2.6
- backend
- MariaDB 10.4.20
- redis 6.2.4
- spring Boot 2.5.2
- ํ์๋ฏธํ
๊ด๋ จ
- openvidu-browser 2.19.0
- openvidu 2.19.0
- ๋ฐฐํฌ
- aws
- nginx
- jenkins
- algular commit message convention
- type(scope): short summary
- type ์ข
๋ฅ
- feat : ์๋ก์ด ๊ธฐ๋ฅ ์ถ๊ฐ
- fix : ๋ฒ๊ทธ ์์
- docs : ๋ฌธ์ ๊ด๋ จ
- style : ์คํ์ผ ๋ณ๊ฒฝ (ํฌ๋งคํ ์์ , ๋ค์ฌ์ฐ๊ธฐ ์ถ๊ฐ, โฆ)
- refactor : ์ฝ๋ ๋ฆฌํฉํ ๋ง
- test : ํ ์คํธ ๊ด๋ จ ์ฝ๋
- build : ๋น๋ ๊ด๋ จ ํ์ผ ์์
- ci : CI ์ค์ ํ์ผ ์์
- perf : ์ฑ๋ฅ ๊ฐ์
- short summary
- ๋ง์นจํ ์ฐ์ง ์๊ธฐ
- ํ๊ธ ์๋ฌธ, ๋ชจ๋ ๊ฐ๋ฅ
- master - develop - feature
- ๊ฐ์ธ ๊ฐ๋ฐํ ๊ฒ๋ค์ ๋ชจ๋ feature/๊ธฐ๋ฅ ๋ธ๋์น์์ ์ํ
- ํ๋ก ํธ์ ๋ฐฑ์์ asignee๋ก ์ง๋ช ๋ ์ด๋ค์ด ์ฌ์ฌํ develop์ผ๋ก merge
- master์ mergeํ ๊ฒฝ์ฐ ํ์ ๋ชจ๋ ๋ชจ์ฌ์ ํ์ ํ ์งํ
frontend/src/constant/prod.js์์ ์ฌ๋ฐ๋ฅธ ๋๋ฉ์ธ ์ด๋ฆ์ผ๋ก ๋ณ๊ฒฝํฉ๋๋ค.
WebRTC๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ STUN/TURN ์๋ฒ๊ฐ ํ์ํฉ๋๋ค.
์คํ ์์ค ํ๋ก์ ํธ์ธ coturn์ ์ค์นํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค
sudo apt-get update && sudo apt-get install --no-install-recommends --yes coturn
/etc/default/coturn
์ ๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ์ด ์์ ํฉ๋๋ค.
TURNSERVER_ENABLED=1
/etc/turnserver.conf
์ ๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ์ด ์์ ํฉ๋๋ค.
listening-port=3478
tls-listening-port=5349
listening-ip=<EC2์ ํ๋ผ์ด๋น IPv4 ์ฃผ์>
external-ip=<EC2์ ํผ๋ธ๋ฆญ IPv4 ์ฃผ์>/<EC2์ ํ๋ผ์ด๋น IPv4 ์ฃผ์>
relay-ip=<EC2์ ํ๋ผ์ด๋น IPv4 ์ฃผ์>
fingerprint
lt-cred-mech
user=myuser:mypassword
realm=myrealm
log-file=/var/log/turn.log
simple-log
coturn์ ์ฌ๊ธฐ๋ํฉ๋๋ค.
sudo service coturn restart
๋ค์ ๋ช ๋ น์ด๋ฅผ ํตํด coturn์ ์ํ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
sudo systemctl status coturn
๋ฐฐํฌ๋ฅผ ํ๊ธฐ ์ํด์๋ ์๋ฒ์ docker์ docker-compose๊ฐ ์ค์น๋์ด ์์ด์ผ ํฉ๋๋ค.
docker๋ ๊ณต์ ์นํ์ด์ง์ ๋์ ์๋ debian์์์ ์ค์น ๋ฐฉ๋ฒ์ผ๋ก ์ค์นํ๋ฉด ๋๊ณ , docker-compose๋ apt-get ๋ช
๋ น์ด๋ฅผ ํตํด ์ค์น๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
ํ๋ก์ ํธ์ root ์์น์์ docker-compose๋ฅผ ์คํํ๋ฉด ๋น๋ ๋ฐ ๋ฐฐํฌ๊น์ง ์๋์ผ๋ก ์ด๋ฃจ์ด์ง๋๋ค.
docker-compose up -d
๋จ, docker-compose๋ฅผ ์คํํ๊ธฐ ์ํด์๋ prod.env
ํ์ผ์ด ํ์ํฉ๋๋ค. prod.env
์ ๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
# backend
GOOGLE_CLIENT_ID=1q2w3e4r-1q2w3e4r.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=4r3e2w1q4r3e2w1q
SPRING_DATASOURCE_USERNAME=a104
SPRING_DATASOURCE_PASSWORD=a1041234
JWT_SECRET=1q2w3e4r
#OPENVIDU_URL=https://<service domain name>:3333/
OPENVIDU_URL=https://openvidu:3333/
APP_BASE_URL=https://<service domain name>
# openvidu
KMS_STUN_IP=<coturn server ip>
KMS_STUN_PORT=3478
KMS_TURN_URL=myuser:mypassword@<coturn server ip>:3478?transport=udp
DOMAIN_OR_PUBLIC_IP=<service domain name>
# backend & openvidu
OPENVIDU_SECRET=MY_SECRET
# mysql
MYSQL_USER=a104
MYSQL_PASSWORD=a1041234
MYSQL_ROOT_PASSWORD=a1041234
์ฒซ ๋ฐฐํฌ์์๋ init-letsencrypt.sh์ ์คํ์์ผ certbot์ ์ํด SSL/TLS ์ธ์ฆ์๋ฅผ ์์ฑํ๋๋ก ํด์ผ ํฉ๋๋ค.
init-letsencrypt.sh ๋ด์ฉ์์ domains
์ data_path
, email
์ ์๋ง๊ฒ ์์ ํ ๋ค ์คํ์ํค๋ฉด ๋ฉ๋๋ค.
redis/redis-data์ mysql/mysql-data๋ ๊ฐ๊ฐ redis container์ mysql(mariadb) container์ ๋ฐ์ดํฐ ์ ์ฅ directory๋ฅผ mountํ๊ณ ์์ผ๋ ๊ฐ๋ณํ ์ฃผ์ํด์ผ ํฉ๋๋ค.