- ์ง์์ ์ฌ์ฌํ๊ณ ์ธ์ธํ๊ฒ ํผ์ ์ ๊ทธ๋ง! ํธ์ํ๊ฒ ์ง์์ ์ ์ง ๋ฉ์ดํธ ์ฐพ๊ธฐ!
- 2023๋ 5์ 19์ผ ~ 2023๋ 6์ 30์ผ
| ์ญํ | ์ด๋ฆ | GitHub |
|---|---|---|
| Front-end | ๋ฐฐ์ ํ(L) | https://github.com/JungHBae |
| Front-end | ์ต์ฑ๋น | https://github.com/sbchoi5451 |
| Front-end | ์กฐ์ ์ | https://github.com/princesssana |
| Back-end | ์งํ๊ฒฝ(VL) | https://github.com/Jello92 |
| Back-end | ๊น์งํ | https://github.com/jihyeon117 |
| Back-end | ๊น์์ฐ | https://github.com/kimsangwoo0505 |
| Designer | ๊ณฝ์คํฌ |
์์ด์ค ๋ธ๋ ์ดํน ์นด๋
์ด์ด๋งํ๊ธฐ ๊ฒ์
์ ํ๋ธ ๋์ ์์ฒญ
ํจ๊ป ์ฌ์ง์ฐ๊ธฐ
์ต๊ทผ์ ๋ง๋ ์ ์ , ํ๋ก์, ์ฐจ๋จ ์ ์ ๋ชฉ๋ก
๋์ ๋ ๋ฒจ
์ชฝ์ง ๊ธฐ๋ฅ
์ ์ ์ฐพ๊ธฐ
๋ฐฉ ๋ณ ์นดํ ๊ณ ๋ฆฌ
๋ฐฉ ์ค์ ๊ธฐ๋ฅ
FRONTEND
BACKEND
| ์ฌ์ฉ ๊ธฐ์ | ๊ธฐ์ ์ค๋ช | |
|---|---|---|
| ๊ณตํต | WebRTC | ์๋ฒ์ ๊ฐ์ ์ค๊ฐ์๋ฅผ ๊ฑฐ์น์ง ์๊ณ ๋ธ๋ผ์ฐ์ ๊ฐ์ P2P๋ก ์ฐ๊ฒฐ ํ ์ ์๊ณ , ์ค์๊ฐ์ผ๋ก ์ํธ์์ฉ์ ํ ์ ์๋ค๋ ํน์ฑ์ ๋ฐํ์ผ๋ก ๊ฐ์ธํ๋๊ณ ์ฐธ์ฌ ์ ๋์ ์ธ ์น ์๋น์ค์ ์ ํฉ |
| ๊ณตํต | Websockets | WebRTC์ signal channel๋ก ์ฌ์ฉ |
| ๊ณตํต | https | WebRTC์์ ์นด๋ฉ๋ผ ์ฌ์ฉ ๊ถํ ๋ฐ ๋ณด์์ ์ํ์ฌ https ์ฌ์ฉ |
| ๊ณตํต | Oauth2.0 | oauth2.0๋ฅผ ์ด์ฉํ ์นด์นด์ค ์์ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ์ถ๊ฐํ์ฌ ์ฌ์ฉ์๊ฐ ๋์ฑ ํธ๋ฆฌํ๊ฒ ๋ก๊ทธ์ธ ๋ฐ ์๋น์ค๋ฅผ ์ด์ฉํ ์ ์๊ฒํจ |
| ๊ณตํต | SSE | ์๋ฒ์์ ์ด๊ธฐ ์์ฒญ์ ํ์ง ์๊ณ ๋ ํ์ํ ๋๋ง๋ค ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด์ค ์ ์์ผ๋ฉฐ, ์ชฝ์ง๋ฅผ ๋ฐ๊ฑฐ๋ ํ๋ก์ํ๊ณ ์๋ ์ ์ ์ ๋ฐฉ ๊ฐ์ค์, ์๋ฆผ์ ๋ณด๋ด์ฃผ๋ ์ฉ๋์์ผ๋ก SSE๋ฅผ ์ฌ์ฉํ์ฌ ๋จ์ผ ๋จ๋ฐฉํฅ ์ฑ๋์ ์ด์ด์ค |
| FE | Typescript | ํจ์จ์ ์ธ Refactoring, ํ์ ๋ฐ ์ ์ง๋ณด์ & ์์ ํ๊ฒ Type ํ์ฉ ๊ฐ๋ฅ |
| FE | React Query | ๋น๋๊ธฐ ์์ฒญ์ ํด์ ๋ฐ์์จ ๋ฐ์ดํฐ ์บ์ฑ, ๋ฌดํจํ, stale time ๋ฑ์ ํ ์ ์๊ฒ ๋์์ฃผ๋ ๋๊ตฌ๋ก ์ฌ์ฉ |
| FE | Jotai | ํ๋ก์ ํธ์ ๊ตฌ์ฑ์ ๊ณ ๋ คํ์ฌ Redux์ ๊ฐ์ Flux ๊ธฐ๋ฐ ์ํ๊ด๋ฆฌ๋ณด๋ค atomic ์ํ๊ด๋ฆฌ ์ ํ. Recoil๋ณด๋ค ๋ ๊ฐ๋ณ๊ณ boilerplate๊ฐ ์ ์ Jotai ์ ํ |
| FE | CloudFront | React ํ๋ก์ ํธ๊ฐ ๋ฐฐํฌ๋ s3 ๋ฒํท์ HTTPS๋ฅผ ์ ์ฉ์ํค๊ธฐ ์ํด ์ฌ์ฉ |
| FE | CI/CD (FE) | Code Build, Code Deploy & Code Pipeline์ ์ฌ์ฉํ์ฌ ๋ฐฐํฌ ๋ฐ ๊ด๋ฆฌ |
| BE | CI/CD (BE) | Jenkins์ Github Actions (CI) + AWS CodeDeploy(CD) ์ค ๊ณ ๋ฏผ์ ํ์์ง๋ง, Jenkins์ ๊ฒฝ์ฐ Docker๋ฅผ ์ฌ์ฉํด์ผํ๋ฉฐ ๊ท๋ชจ๊ฐ ์์ ํ๋ก์ ํธ์ด๋ฏ๋ก ์ค์ ํ๋๋ฐ ๋ฆฌ์์ค ๋ญ๋น๊ฐ ๋ฐ์ํ ์ ์์ผ๋ฏ๋ก, ์ค์ ์ด ๋น๊ต์ ๊ฐ๋จํ๊ณ ๊ด๋ฆฌ์ ์ฉ์ดํ GithubAction, Code Deploy ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐฐํฌ ๋ฐ ๊ด๋ฆฌ |
| BE | Redis | ์ธ๋ฉ๋ชจ๋ฆฌ DB์ธ Redis๋ฅผ ์ด์ฉํด ๋ฐ์ดํฐ์ ๋ํ ์ ๊ทผ์๊ฐ์ ๋น ๋ฅด๊ฒ ๋ง๋ค๊ณ ํ์ ๋ ์๊ฐ๋ง ์ ํจํ Refresh Token์ ๋ํด ์ ํจ์๊ฐ์ ์ค์ ํ์ฌ ํจ์จ์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ๊ด๋ฆฌ |
| BE | Swagger | ํ๋ก ํธ์ ๋ฐฑ์๋์ ํจ์จ์ ์ด๊ณ ์ง๊ด์ ์ธ ์์ฌ์ํต์ ์ํ์ฌ API์ ๊ธฐ๋ฅ์ ๋ฌธ์ํํ๊ณ ํ ์คํธ ํ๊ธฐ ์ํด ์ ์ฉ |
| BE | S3 | ์ด๋ฏธ์ง๋ฅผ ์ง์ DB์ ์ ์ฅํ๋ฉด DB์ ํฌ๊ธฐ๊ฐ ์ปค์ ธ์ ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น ์ ์์ผ๋ฏ๋ก, S3์ ๊ฐ์ ์คํ ๋ฆฌ์ง ์๋น์ค์ ์ด๋ฏธ์ง๋ฅผ ์ ์ฅํ์ฌ ์ด๋ฏธ์ง ์ ๋ก๋ ๊ธฐ๋ฅ ๊ตฌํ |
| BE | Gradle | ์คํฌ๋ฆฝํธ ๊ธธ์ด์ ๊ฐ๋ ์ฑ ๋ฉด์์๋ ์ฐ์ํ๊ณ , ์์กด์ฑ์ด ๋์ด๋ ์๋ก ์ฑ๋ฅ๊ณผ ์คํฌ๋ฆฝํธ์ ํ์ง์ ์ฐจ์ด๊ฐ ๋๋ฉฐ, ๋น๋ ํ์ ์๋๋ ๋น ๋ฆ |
| BE | Junit | ํ ์คํธ ์์ ์ ์๋ํํ์ฌ ๊ฐ๋ฐ์์ ์์ ์๊ฐ ์ ์ฝ ๋ฐ ํ ์คํธ ์ฝ๋์ ์ค์ ์ฝ๋๋ฅผ ๋ถ๋ฆฌํ์ฌ ์์ฑ ํ ์ ์์ด ์ ์ง ๋ณด์์ ํจ๊ณผ์ ์. ํ ์คํธ ๊ฒฐ๊ณผ๋ฅผ ํ์ํ๋๋ฐ ์ฌ์ฉํ๊ธฐ ์ฌ์ด ํ์ ์ ๊ณตํ์ฌ ๊ฐ๋ ์ฑ์ด ์ข์ |
2023.06.17
- ๋น๋ฐฉ ๋ฒ๊ทธ ์์
2023.06.19
- Youtube ๊ตฌ์ถ, ์ ์ ํผ๋๋ฐฑ ๋ฐ์ (๋ฉ์ธ ํ์ด์ง ํ๋กํ ๋๋ ์๋ ๊ตญ๋ฌธ์ผ๋ก ๋ณ๊ฒฝ)
2023.06.20
- SSE ๋ฐ ์ชฝ์ง ๊ธฐ๋ฅ / ์ ์ ํผ๋๋ฐฑ ๋ฐ์ํ์ฌ ๋์์ธ ์์ ๋ฐ ์ชฝ์ง, ์ ์ ์ฐพ๊ธฐ ๊ธฐ๋ฅ ์ถ๊ฐ
2023.06.21
- ์ด์ด๋งํ๊ธฐ ๊ฒ์ ๊ธฐ๋ฅ ์ถ๊ฐ
- ๋ฐฉ์ ๋ชฉ, ๋๋ค์ ๊ธธ์ด ์ ํ
- ๋ฐฉ์์ ๋ฉ์ธ ํ ๋ฐฐ๋๋ฅผ ํตํด ์ดํํ ๊ฒฝ์ฐ ํ์ ๋ ธ์ถ
- ์ฑํ ๋ฐฉ์์ ์ ์ ํ๋กํ ๋๋ฅด๋ฉด, ๋ง์ดํ์ด์ง์ฒ๋ผ ๋ชจ๋ฌ ๋์ฐ๊ธฐ
- ๋น๊ณต๊ฐ ๋ฐฉ์ฌ๋ถ ์นด๋์ ๋ณด์ฌ์ฃผ๊ธฐ
- YouTube ์ ์ ์๋ฆฌ ์ฐ๊ฒฐ ๋ฐ ์ปจํธ๋กค ์ ์ด
- ์ ์ ์นด๋ ์ด๋ฉ์ผ ๋ ธ์ถ X / ๋์ ๋ ๋ฒจ ๊ด๋ จ ์ค๋ช ์ ๊ตฌ์ถ
- ๋ฉ์ธํ์ด์ง ๋ฐฉ ์นด๋ ๋ฐ ์ ์ฅ์ ๋ชจ๋ฌ ๋์์ธ ๋ณ๊ฒฝ ๋ฐ ๋ฐฉ์ฅ ์ ๋ณด ์ถ๊ฐ
- ์ ์ ์ฐพ๊ธฐ ๊ธฐ๋ฅ ์ถ๊ฐ
- ๋ง์ดํฌ, ์นด๋ฉ๋ผ state ๊ตญ๋ฌธ์ผ๋ก ๋ณ๊ฒฝ ๋ฐ ํ๋ฉด๊ณต์ ์์น / ๋ง์ดํฌ, ํ๋ฉด ๋ฒํผ ๋ฒ๊ทธ ์์
- ์ ๊ณ ๋ฒํผ ๋ชจ๋ฌ์ฐฝ ๋ซํ๊ธฐ ์์
- ์๋๋ฐฉ ๋๊ฐ๋ฉด ๋ฐ๋ก ํ๋ฉด ์ ํ ๋ ์ ์๊ฒ ์์
- ๊ฐํด ๋นํ์๋ ์๋๋ฐฉ์๊ฒ ๊ฐํด๋์๋ค๋ ๋ชจ๋ฌ ๋์ฐ๊ธฐ
- ๊ฒ์คํธ๋ ํธ์คํธ ๋๊ฐ์๋ ์๋๋ฐฉ์๊ฒ ๋ฉ์ธ์ง ๋ชจ๋ฌ ๋จ์ฐ๊ธฐ
2023.06.22
- ์ ์ ํผ๋๋ฐฑ ๋ฐ์ํ์ฌ ๊ฒ์ ์ค๋ช ๋ฐ ํ๋ก์ฐ ์ถ๊ฐ
- ์์ด์ค๋ธ๋ ์ด์ปค ๊ธฐ๋ฅ ๊ตฌํ (BE)
- Lighthouse ์ฑ๋ฅ ๊ฐ์ ์ํด ๋ฉ์ธ ๋ฐฐ๋ webp๋ก convert
- ์์ด์ค๋ธ๋ ์ด์ปค ๊ธฐ๋ฅ ๋์์ธ ๋ฐ ๊ตฌํ ์๋ฃ
- ํ์ค์๊ฐ 150์ ์ ํ
- ํ์๊ฐ์ ์นด์นด์ค ๋ฒํผ ์ถ๊ฐ
- ๋ง์ดํฌ, ๋น๋์ค on/off ๋ฒ๊ทธ ์์
- ๋ฐฉ ์ญ์ ๋ฒ๊ทธ ์์ ์๋ฃ
- ์ฌ์ง์ฐ๊ธฐ ๊ธฐ๋ฅ ๊ตฌํ ์๋ฃ
- ๋ฉ์ธ์ง ๊ธฐ๋ฅ ์ถ๊ฐ ์๋ฃ / ์ชฝ๊ธฐ ๊ธฐ๋ฅ ์ถ๊ฐ ์๋ฃ
2023.06.23
- ํ์ ํํด ๊ธฐ๋ฅ
- ์์ด์ค๋ธ๋ ์ด์ปค & ์ชฝ์ง ์ฌ์ฉ background ์์
- ๋ง์ดํ์ด์ง์ ์ชฝ์ง ๋ฒํผ ์ถ๊ฐ
2023.06.30
- Refresh Token Redis ์ ์ฉ
- ๋ณด์์ฒ๋ฆฌ๋ฅผ ์ํ์ฌ HTTP Only์ Secure ์ ์ฉ
FE
๋์ผ ๊ฒ์ ์ฟผ๋ฆฌ๋ฅผ ๊ฒ์ํ์ ๋ ๊ฒฐ๊ณผ๊ฐ์ ์๋ก ๋ถ๋ฌ์ค์ง ์์๋ ๋ฌธ์
๋ฌธ์ ์ฌํญ
๊ฒ์ input์ผ๋ก ์ด์ ๊ณผ ๋์ผ ๊ฒ์์ด๋ฅผ ์๋ ฅํ์ ๋ ๊ฐ์ ์๋ก ๋ถ๋ฌ์ค์ง ์์.
ํด๊ฒฐ๋ฐฉ์
๊ฒ์์ด๊ฐ atom์ผ๋ก ๋ฉ์ธํ์ด์ง ์ปดํฌ๋ํธ์ ์ ๋ฌ๋์ด ๊ฐ์ update๊ฐ ์์ ๊ฒฝ์ฐ useMutation์ผ๋ก ๋ฐฉ ๋ฆฌ์คํธ ๋ถ๋ฌ์ด.
๊ทธ๋ฌ๋ ์ด์ ๊ณผ ๋์ผ ๊ฐ์ ์ ๋ ฅํ ๊ฒฝ์ฐ ๊ฐ์ ๋ณํ๊ฐ ์๊ธฐ ๋๋ฌธ์, trigger์ฉ boolean atom์ ๋ง๋ค์ด์ useEffect๋ฅผ ํ์ฉํด ๊ฒ์ ์ฑ๊ณต
Input๊ฐ์ด ๋ง์ ์ปดํฌ๋ํธ์ input์ด ๋ฐ๋๋๋ง๋ค ์ ์ฒด ๋ ๋๋ง ๋ฐ์ ๋ฌธ์
๋ฌธ์ ์ฌํญ
CI/CDํ๊ฒฝ์ ๊ตฌ์ถํ๋ ๊ณผ์ ์์ ๊ธฐ์กด์ jarํ์ผ์ EC2๋ฅผ ํตํด ๋ฐฐํฌํ๋ ๋ฐฉ์๊ณผ ํ์ด๋ฐ์ ์ผ๋ก ์ถฉ๋๋ ๊ฒฝ์ฐ EC2๋ฅผ ์ฌ์์ ํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ๊ณ ํ๋ ฅ์ ip๋ก ์ค์ ํ์ง ์์ ์ฌ์์ํ๋ฉด IP๊ฐ ๋ณ๊ฒฝ๋์ด ์๊ธฐ๋ ์ค์ ๋ฌธ์ ๊ฐ ๋ฐ์
๋ฌธ์ ๋ถ์
์์์น ๋ชปํ ๋ฌธ์ ๋ก EC2๋ฅผ ์ฌ์์ํ ๊ฒฝ์ฐ ๋งค๋ฒ IP๊ฐ ๋ณ๊ฒฝ๋๋ค๋ฉด DNS๋ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํด์ผ ํ๊ณ DNS์ ํ์๊ฐ ๋๋ฌธ์ ์์ ํ๊น์ง ๊ธธ๋ฉด 48์๊ฐ๊น์ง๋ ๊ฑธ๋ฆด์ ์๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ๊ฐ ๋ฐ์
ํด๊ฒฐ๋ฐฉ์
EC2์ค์ ์ ํ๋ ฅ์ ip๋ก ๋ฐ๊พผ๋ค๋ฉด CI/CD๊ตฌ์ถ๊ณผ์ ์์ ์๊ธด ์ถฉ๋ ๋ฌธ์ ๋ง๊ณ ๋ ๋ค๋ฅธ ๋ฌธ์ ์๋ ๋๋นํ ์ ์๊ฒ ๋จ
์๊ฒฌ์กฐ์จ ๋ฐ ์์ฌ๊ฒฐ์
๋น์ฅ์ DNS์ ํ ์๊ฐ์ผ๋ก ์ธํด ์๋ฒ๊ฐ ๋ถ์์ ํด์ง ์ ์๋๋ผ๋ CI/CDํ๊ฒฝ ๊ตฌ์ถ๊ณผ์ ์์ ์๊ธด ์ถฉ๋๊ฐ์ด ์ธ์ ๋ผ๋ EC2๋ฅผ ์ฌ์์ํด์ผ ํ ์ ์๊ธฐ ๋๋ฌธ์ ํ๋ ฅ์ IP๋ก ๋ฐ๊พธ๊ณ DNS๋ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ๊ธฐ๋ก ๊ฒฐ์
OSX ํ๊ฒฝ์์ Input๊ฐ์ด ํค๋ณด๋ Enter์ด๋ฒคํธ ๋ ์ ๋ ฅ์ด ๋๋ฒ ์ด์ ๋๊ฐ๋ ํ์
๋ฌธ์ ์ฌํญ
๋ช Mac OS ํ๊ฒฝ์์ Input๊ฐ์ ์ ๋ ฅํ๊ณ Enter๋ฅผ ์ ๋ ฅํ์ ๋ Keydown event๊ฐ ๋๋ฒ ๋๊ฐ๋ฉด์ ์ ๋ ฅ์ด ๋๋ณ ์ธ์ ๋๋ ํ์์ด ๊ด์ธก๋จ
๋ฌธ์ ์ฌํ
์ด ํ์์ ์ฌํํ๊ธฐ ์ํด ํ ์คํธ ํด๋ณธ ๊ฒฐ๊ณผ, ํฌ๋กฌ ๋ธ๋ผ์ฐ์ ์์ ํ๊ธ์ ์ ๋ ฅ ํ ๋ keycode 229๊ฐ ๋ฐ์ํ๋ค๋ ๊ฒ์ ์๊ฒ ๋์์. ํ๊ธ์ ์กฐํฉ์ ํตํ ๊ธ์์ ๋ ฅ์์ฑ์ ํน์ฑ์ ์ ๋ ฅ ๋์ค ์ ๋ ฅ ์๋ฃ๋ก ์ธ์ํ์ง ์๊ณ ์์ง ์ ๋ ฅ์ค์ธ๊ฒ์ผ๋ก ์ธ์ํ์ฌ ์์ง IME composing ๋จ๊ณ์์๋ ์์ง composing์ด๊ธฐ ๋๋ฌธ์ 229 ์ฝ๋๊ฐ ๋ํ๋จ.
ํด๊ฒฐ๋ฐฉ์
์์ง composing ๋จ๊ณ์์๋ ์ด๋ฒคํธ๊ฐ ํธ๋ฆฌ๊ฑฐ ๋๋ฉด ์๋๊ธฐ ๋๋ฌธ์, 229๋ฅผ ์์ธ์ฒ๋ฆฌ ํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํจ.
event.keyCode !== eventTarget.addEventListener("keydown", event => {
if (event.isComposing || event.keyCode === 229) {
return;
}
});BE
EC2๋ฅผ ์ฌ์์ํ ๊ฒฝ์ฐ ์๊ธฐ๋ ์ค์ ๋ฌธ์
๋ฌธ์ ์ฌํญ
CI/CDํ๊ฒฝ์ ๊ตฌ์ถํ๋ ๊ณผ์ ์์ ๊ธฐ์กด์ jarํ์ผ์ EC2๋ฅผ ํตํด ๋ฐฐํฌํ๋ ๋ฐฉ์๊ณผ ํ์ด๋ฐ์ ์ผ๋ก ์ถฉ๋๋ ๊ฒฝ์ฐ EC2๋ฅผ ์ฌ์์ ํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ๊ณ ํ๋ ฅ์ ip๋ก ์ค์ ํ์ง ์์ ์ฌ์์ํ๋ฉด IP๊ฐ ๋ณ๊ฒฝ๋์ด ์๊ธฐ๋ ์ค์ ๋ฌธ์ ๊ฐ ๋ฐ์
๋ฌธ์ ๋ถ์
์์์น ๋ชปํ ๋ฌธ์ ๋ก EC2๋ฅผ ์ฌ์์ํ ๊ฒฝ์ฐ ๋งค๋ฒ IP๊ฐ ๋ณ๊ฒฝ๋๋ค๋ฉด DNS๋ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํด์ผ ํ๊ณ DNS์ ํ์๊ฐ ๋๋ฌธ์ ์์ ํ๊น์ง ๊ธธ๋ฉด 48์๊ฐ๊น์ง๋ ๊ฑธ๋ฆด์ ์๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ๊ฐ ๋ฐ์
ํด๊ฒฐ๋ฐฉ์
EC2์ค์ ์ ํ๋ ฅ์ ip๋ก ๋ฐ๊พผ๋ค๋ฉด CI/CD๊ตฌ์ถ๊ณผ์ ์์ ์๊ธด ์ถฉ๋ ๋ฌธ์ ๋ง๊ณ ๋ ๋ค๋ฅธ ๋ฌธ์ ์๋ ๋๋นํ ์ ์๊ฒ ๋จ
์๊ฒฌ์กฐ์จ ๋ฐ ์์ฌ๊ฒฐ์
๋น์ฅ์ DNS์ ํ ์๊ฐ์ผ๋ก ์ธํด ์๋ฒ๊ฐ ๋ถ์์ ํด์ง ์ ์๋๋ผ๋ CI/CDํ๊ฒฝ ๊ตฌ์ถ๊ณผ์ ์์ ์๊ธด ์ถฉ๋๊ฐ์ด ์ธ์ ๋ผ๋ EC2๋ฅผ ์ฌ์์ํด์ผ ํ ์ ์๊ธฐ ๋๋ฌธ์ ํ๋ ฅ์ IP๋ก ๋ฐ๊พธ๊ณ DNS๋ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ๊ธฐ๋ก ๊ฒฐ์
Game ๊ตฌํ ์ค ์ํ ์ฐธ์กฐ ์๋ฌ ๋ฐ์
game์ ๊ตฌํํ๋ ๊ณผ์ ์์ ์ํ ์ฐธ์กฐ ์ค๋ฅ๊ฐ ๋จ
๋ฌธ์ ๋ถ์
SignalHandler๋ IdiomGameService๋ฅผ ์ฐธ์กฐํจ
IdiomGameService๋ SignalHandler ์ธ์คํด์ค๋ฅผ ๋ฉค๋ฒ ๋ณ์ signalHandler๋ก ๊ฐ์ง๊ณ ์์
โ ์ํ ์ฐธ์กฐ ๋ฐ์
ํด๊ฒฐ๋ฐฉ์
IdiomGameService์์ SignalHandler์ ์์กด์ฑ์ ์ ๊ฑฐํจ
์๊ฒฌ์กฐ์จ ๋ฐ ์์ฌ๊ฒฐ์
IdiomGameService๊ฐ SignalHandler๋ฅผ ์ง์ ์์กดํ๋ ๋์ ApplicationContext๋ฅผ ๋ฉค๋ฒ ๋ณ์๋ก ๊ฐ์ง๊ณ startGame๋ฉ์๋ ๋ด์์ ํ์ํ ๋๋ง๋ค SignalHandler ์ธ์คํด์ค๋ฅผ ๊ฐ์ ธ์์ ์ฌ์ฉํจ. ์ง์ ์ ์ธ ์์กด์ฑ์ด ์ ๊ฑฐ๋๋ฉฐ ์ํ ์ฐธ์กฐ ํด๊ฒฐ๋จ
DB์ ์ ์ฅ๋ ์๋ฃ๊ฐ null๊ฐ์ผ๋ก ์กฐํ๋๋ ๋ฌธ์
๋ฌธ์ ์ฌํญ
๋ฃธ์์ฑ๋ถ๋ถ์์ save๋ก ์ ๋ณด๋ฅผ db์ ์ ์ฅํ๋ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ๊ทธ ์ ๋ณด๋ฅผ db์์ ์กฐํํ๋ ์ฝ๋๋ฅผ ์์ฑํ์๋๋ฐ ๊ณ์ null๊ฐ์ด ์กฐํ๋๋ ๋ฌธ์ ๋ฐ์
๋ฌธ์ ๋ถ์
์ฝ๋์ ๋ก์ง๊ณผ์ ์์ ์ ๋ณด๋ฅผ ์กฐํํ๋ ๋ถ๋ถ์ด ์กฐํ ์ ๋ณด์ saveํ return์ด ๋๋๊ธฐ ์ด์ ์ ๊ณผ์ ์ด์๊ธฐ ๋๋ฌธ์ ์ ๋๋ก ์กฐํํ ์ ์์์
ํด๊ฒฐ๋ฐฉ์
- ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๋ ๋ถ๋ถ์ ๋ค๋ฅธ ํํธ๋ฅผ ํตํด์ ํด๊ฒฐ
- ๊ธฐ์กด์ save๋ก ์ ์ฅํ๋ ๋ถ๋ถ์ saveAndFlush๋ฅผ ์จ์ ํด๊ฒฐ
์๊ฒฌ์กฐ์จ ๋ฐ ์์ฌ๊ฒฐ์
saveAndFlush๋ฅผ ์จ์ ํด๊ฒฐํด๋ ์ฑ๋ฅ์ ์ธ ๋ถ๋ถ์์ ๋ฌธ์ ๊ฐ ์๊ณ ์ฝ๋์ ๊ฐ๋ ์ฑ๋ ๋ ์ข์ ๋ณด์ด๋ฏ๋ก 2๋ฒ๋ฐฉ์์ ํตํด์ ํด๊ฒฐ
Host๊ฐ ๋น์ ์์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก ๋ฐฉ์ ๋๊ฐ๋ฉด ๋ฐฉ์ญ์ ์๋จ
๋ฌธ์ ์ฌํญ
Host User๊ฐ ๋ฐฉ์ ๋ง๋ค๊ณ ๋๊ฐ๊ธฐ ๋ฒํผ์ ํตํด ๋ฐฉ์ ๋๊ฐ๋๊ฒ์ด ์๋ ๋น์ ์์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก ๋ฐฉ์ ๋๊ฐ๋ฉด ๋ฐฉ์ญ์ ๊ฐ ์๋จ. (ex: URL์ ํตํด ๋ค๋ฅธ ์ฌ์ดํธ๋ก ์ด๋, ๋ธ๋ผ์ฐ์ ๋ฅผ ์ข ๋ฃ)
๋ฌธ์ ๋ถ์
๋ฐฉ๋๊ฐ๊ธฐ ๋ฒํผ์ ๋๋ฌ์ ์ ๋๋ก ์ ์ ๊ฐ ๋๊ฐ๋ค๋ฉด ๋ฒํผ์ ๋ฐ์ํ๋ ๋ก์ง์ด ์๋๋๋๋ก ํ ์ ์๋๋ฐ ๋น์ ์์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก host๊ฐ ๋๊ฐ๋ค๋ฉด ์ด๋ฌํ ๋ก์ง์ด ์๋ํ์ง ์์์ ๋ฌธ์ ๊ฐ ์๊ธด ๊ฒ์ผ๋ก ๋ถ์๋จ
ํด๊ฒฐ๋ฐฉ์
-
Session ์ ๋ณด์ ์ฐ๊ฒฐ๋ user์ ๋ณด ๋ฐ room์ ๋ณด๋ฅผ ์ ์ฅํ๊ณ ์ด๋ฅผ ์ด์ฉํ์ฌ ์์ผ์ด Close๋์ ๋ ๋ฐ์ํ๋ ๋ก์ง์ ๋ง๋ค์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐ
-
์ ์ ๋ค์๊ฒ ์๋ด๋ฉ์ธ์ง๋ฅผ ํตํด์ ๊ฐ์ด๋๋ผ์ธ ์ ์
-
Socket์ด Close ๋ ํ, ์ผ์ ์๊ฐํ ๋ฐฉ์ด ์๋์ผ๋ก ์ญ์ ๋๋๋ก ๊ตฌํ
์๊ฒฌ์กฐ์จ ๋ฐ ์์ฌ๊ฒฐ์
์์ผ์ด Close๋์ ๋ ๋ฐ์ํ๋ ๋ก์ง์ ํตํ๋๊ฒ ๊ฐ์ฅ ํ์คํ ๋ฐฉ๋ฒ์ธ๊ฑธ๋ก ํ๋จ๋์ด, ์ ์ ๊ฐ ๋ค์ด์ค๊ณ MSG_TYPE_JOIN์ ๋ฐ์ํ๋ ๋ก์ง์ ์ด์ฉํ์ฌ ์ ์ ์ Session์ ๋ณด์ ์ ์ ๊ฐ ๋ค์ด์จ ๋ฐฉ์ ID๊ฐ์ ๋งต์ผ๋ก ์ฐ๊ฒฐ์ํค๊ณ , Session์ ๋ณด์ ์ ์ ์ ID๊ฐ์ ๋งต์ผ๋ก ์ฐ๊ฒฐ์์ผ ์ ์ฅํ๊ณ ์ด ์ ๋ณด์ ํจ๊ป ์์ผ์ด ๋ซํ๋ ๊ฒ์ ๋ฐ์ํ๋ afterConnectionClosed๋ฉ์๋๋ฅผ ์ด์ฉํด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐ
๊ณตํต
https ์ธ์ฆ์ ๋ฐ ๋ณด์๋ฌธ์ ๋ก SDP์ ๋ณด๊ฐ ์ ์ ๊ฐ์ ์ ๋๋ก ์ ์ก์ด ๋์ง ์๋ ๋ฌธ์
๋ฌธ์ ์ฌํญ
- https๋ SSL/TLS ํ๋กํ ์ฝ์ ์ฌ์ฉํ์ฌ ํต์ ์ ์ํธํํ๋ฏ๋กย ๊ณต๊ฒฉ์๊ฐ ๋ฐ์ดํฐ๋ฅผ ํ์ทจํ ์ ์๊ณ ์น ์ฌ์ดํธ ์๋ฒ๊ฐ ์ค์ ์๋ฒ์์ ํ์ธํ๋ฏ๋ก ์ฌ์นญ์ด ๋ฐฉ์ง๋จ
- ์๊ทธ๋ ์ฑ๋์ด https๊ฐ ์๋ http๋ก ๋ฐฐํฌ๋์์ ๋ SDP์ ๋ณด๊ฐ ์ ์ ๊ฐ์ ์ ๋๋ก ์ ์ก์ด ๋์ง ์์ ํ์์ฐ๊ฒฐ์ด ๋์ง์๋ ๋ฌธ์ ๊ฐ ๋ฐ์. ๋๋ค์์ ์น๋ธ๋ผ์ฐ์ ๋ ๋ณด์์ด์๋ก ์ธํด WebRTC๊ธฐ๋ฅ์ ๋ํด https๋ฅผ ํตํด ํ์ด์ง๊ฐ ์ ๊ณต๋๋๋ก ๊ฐ์ ํ๊ณ ์์ผ๋ฉฐ ์๊ทธ๋ ์ฑ๋์ด https๊ฐ ์๋ http๋ก ์ ๊ณต๋๋ค๋ฉด sdp์ ๋ณด๊ฐ ์ ๋๋ก ์ ๋ฌ๋์ง ์๊ฒ ๋จ
ํด๊ฒฐ๋ฐฉ์
1-1. ๋ฌด๋ฃ HTTPS ์ธ์ฆ์ ๋ฐ๊ธ ๊ธฐ๊ด์ธ Letโs Encrypt๋ฅผ ํตํด ์ธ์ฆ์๋ฅผ ๋ฐ๊ธ๋ฐ์ https ์ ์ฉ
1-2. AWS์ ELB์ Route 53, ACM์ ์ด์ฉํ์ฌ ์ธ์ฆ์๋ฅผ ๋ฐ๊ธ๋ฐ์ ์ ์ฉ
- ๊ธฐ์กด์ ๋ฐฐํฌ๋์๋ ๋ฐฑ์๋ ์๋ฒ๋ฅผ http๊ฐ ์๋ https๋ฅผ ํตํด ๋ฐฐํฌํ์ฌ ์ ์ ๊ฐ์ sdp์ ๋ณด๊ฐ ์ ๋๋ก ์ ๋ฌ๋๋๋ก ํ๋ฉด ๋จ
์๊ฒฌ์กฐ์จ ๋ฐ ์์ฌ๊ฒฐ์
1-1. ๋ณดํต ์๋น์ค๊ฐ ์๊ท๋ชจ๋ผ๋ฉด 1๋์ ์๋ฒ์ Nginx(ELB ๋์ ์ ๋ก๋๋ฐธ๋ฐ์๋ก ์ฌ์ฉ)๋ฅผ ์ค์นํ๊ณ Let's Encrypt์์ ๋ฐ๊ธ๋ฐ์ ์ธ์ฆ์๋ฅผ ๋ฑ๋กํจ. ๊ทธ๋ฌ๋ ์์ผ๋์นด๋ ์ธ์ฆ์์ ๊ฒฝ์ฐ ์๋ ๊ฐฑ์ ์ด ์ด๋ ต๋ค๋ ์ ๊ณผ 3๊ฐ์๋ง๋ค ๊ฐฑ์ ์ ํด์ผ ํ๋ค๋ ๋จ์ ์ด ์์
1-2. AWS์์ ์๋ฒ๋ฅผ ์ฌ์ฉํ๊ณ ์์ผ๋ฏ๋ก ๊ฐฑ์ ์ด ํ์ ์๋ ์ธ์ฆ์๋ฅผ ๋ฐ๊ธ๋ฐ์ ์ ์ฉํ ์ ์์
๊ฒฐ๋ก :
1. ์ด๋ฏธ AWS ์๋ฒ๋ฅผ ์ด์ฉ ์ค์ด๋ฏ๋ก ELB์ Route 53, ACM์ ์ด์ฉํ์ฌ ํ๋ฒ์ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ด ๋ ๊ฐํธํ๊ณ ์ฝ๋ค๊ณ ํ๋จํ์ฌ ACM์ ์ด์ฉํ์ฌ ์ธ์ฆ์๋ฅผ ๋ฐ๊ธ๋ฐ์ ์ ์ฉํจ
2. ๋ฐฑ์๋ ์๋ฒ๊ฐ https๋ก ๋ฐฐํฌ๋ ์ ์๋๋ก ์์ ์ ํ๊ธฐ๋ก ํ์ผ๋ฉฐ, ์๋ฃ๋๊ธฐ ์ ์๊ฐ๋์์ http๋ก ๋ฐฐํฌ๋ ์๋ฒ๋ฅผ ์ด์ฉํด์ ์์ ์ ํ๊ธฐ๋ก ํจ
๋ฐฉ ๊ฐ์ค ํ Guest๊ฐ 1๋ถ์์ ๋ค์ด์ค์ง ์์ผ๋ฉด ์๋์ผ๋ก ์์ผ ๋๊ธฐ๋ ํ์ ๋ฐ์
๋ฌธ์ ์ฌํญ
๋ฐฉ์ ๋ง๋ค๊ณ ์๋์ด ์๋ค์ด์จ ์ํ๋ก 1๋ถ์ ๋ ์ง์๋๋ฉด ์๋์ผ๋ก ์์ผ์ด ๋๊ธฐ๋ ํ์ ๋ฐ์
๋ฌธ์ ๋ถ์
๋ฐ๋ก ์ถ๊ฐ์ ์ธ ์ค์ ์ ํด์ฃผ์ง ์์ผ๋ฉด ์์ผ๋ด์ ํน์ ํ๋์ด ์์ผ๋ฉด 1๋ถ๋ด ๋๊ธฐ๋ ๊ฒ์ด Default๊ฐ์ธ ๊ฒ์ผ๋ก ๋ถ์
ํด๊ฒฐ๋ฐฉ์
- ์์ผ์ ํ์์์ ์ค์ ์ ๋ณ๊ฒฝํ์ฌ ์์ผ์ด ๋ ๊ธธ๊ฒ ์ง์๋๋๋ก ํจ
- ์ฃผ๊ธฐ์ ์ผ๋ก Ping๋ฉ์ธ์ง๋ฅผ ์์ผ์ ๋ณด๋ด, ํน์ ํ๋์ ํ๊ณ ์๋ค๋ ๊ฒ์ ์๋ ค ์ฐ๊ฒฐ ์ ์ง
์๊ฒฌ์กฐ์จ ๋ฐ ์์ฌ๊ฒฐ์
ํ์์์ ์ค์ ์ ํด๋ ํน์ ์์ ์์ ๋๊ธฐ๋ฏ๋ก Ping๋ฉ์ธ์ง๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ๋ณด๋ด์ ์์ผ์ฐ๊ฒฐ์ ์ ์งํ๋ ๋ฐฉ๋ฒ์ ์ ํํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐ
Guest ํด์ฅ ํ, Host๊ฐ ๋๊ฐ๋ฉด ๋ฐฉ์ด ์ญ์ ๊ฐ ์๋๋ ๋ฌธ์
๋ฌธ์ ์ฌํญ
host๊ฐ ๋ฐฉ์ ๋ง๋ค๊ณ ๋๊ฐ๊ฑฐ๋, guest๋ ๋ง๋๊ณ host๊ฐ ๋จผ์ ๋ฐฉ์ ๋๊ฐ๋ฉด ๋ฐฉ์ด ์ ๋๋ก ์ญ์ ๊ฐ ๋๋๋ฐ guest ๋จผ์ ๋๊ฐ๊ณ ๊ทธ๋ค์ host๊ฐ ๋๊ฐ๋ฉด ๋ฐฉ์ด ์ญ์ ๊ฐ ์๋จ
๋ฌธ์ ๋ถ์
ํน์ ์ ์ ์ ์์ผ์ด ์ฐ๊ฒฐ๋์ง ์์ ์ํ์์ ๊ทธ ์ ์ ์๊ฒ ์ ๋ณด๋ฅผ ์ ๋ฌํ๋ฉด ์์ผ์ด ์๋ฌ๊ฐ ๋ฐ์ํด์ ์ดํ๋ถํฐ ๋ก์ง์ด ์ ๋๋ก ์๋ํ์ง ์๊ฒ๋๋ ๊ฒ์ผ๋ก ๋ถ์๋จ
ํด๊ฒฐ๋ฐฉ์
ํน์ ์ ์ ์๊ฒ ์ ๋ณด๋ฅผ ๋ณด๋ด๊ธฐ์ if๋ฌธ๊ณผ isOpen์ ์ด์ฉํด session์ด ๋ฏธ๋ฆฌ ์ด๋ ค์๋ ์ฒดํฌํ๋๋ก ๋ก์ง์ ์ง์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐ
์๊ฒฌ์กฐ์จ ๋ฐ ์์ฌ๊ฒฐ์
์์ผ์ ์ฐ๊ฒฐ๋ ์ ์ ์๊ฒ ๋ฉ์์ง๋ฅผ ๋ ๋ฆด ๋ ์ฐ๊ฒฐ๋ ์ํ๊ฐ ์๋ ์ ์ ์๊ฒ ๋ก์ง์ ๋ ๋ฆฌ๋ ๊ฒฝ์ฐ๋ฅผ ์ ๊ฒํ๊ณ isOpen๊ณผ if๋ฌธ์ ์ด์ฉํด ์์ผ์ด ์ฐ๊ฒฐ๋์ง ์์ ์ ์ ์๊ฒ ์ ๋ณด๋ฅผ ์ ๋ฌํด ์ฃผ๋ ์ค๋ฅ๋ฅผ ํด๊ฒฐ
Guest 2๋ช ์ด ๋์์ ์ ์ฅํ๋ฉด 3๋ช ์ด ์ ์ฅ๋๋ ์ค๋ฅ
๋ฌธ์ ์ฌํญ
๋ฐฉ์ฅ์ด ๋ฐฉ์ ๋ง๋ค๊ณ ๋๋ช ์ด ๋ฃธ์ฒดํฌ๋ฅผ ํ๊ณ ๋น์ทํ ํ์ด๋ฐ์ ์ ์ฅํ๋ฉด 3๋ช ์ด ์ ์ฅํ๋ ์ค๋ฅ๋ฐ์
๋ฌธ์ ๋ถ์
์ฒดํฌ๋ฃธ์ GET ์์ฒญ์ ํตํด์ ์ธ์์ด 2๋ช ๋ณด๋ค ๋ง์ ๊ฒฝ์ฐ ๋ก์ง์ด ํต๊ณผ๋์ง ์๋๋ก ์ ํ์์ผฐ๋๋ฐ, ๋ฐฉ์ธ์์ด 1๋ช ์ผ ๊ฒฝ์ฐ ๋ฉ์ธํ๋ฉด์ 2๋ช ์ ์ ์ ๊ฐ ๋น์ทํ ํ์ด๋ฐ์ ๋ฐฉ ์ ์ฅ์ ๋๋ฅด๊ณ ์ ์ฅ์ ์ฒดํฌ ๋ชจ๋ฌ์ด ๋จ๋ฉด ๋๋ค ์ฒดํฌ๋ฃธ์ ๋ก์ง์ด ํต๊ณผ๋์ด 3๋ช ์ด ์ ์ฅ๋๋ ์ค๋ฅ ๋ฐ์
ํด๊ฒฐ๋ฐฉ์
- ๋ฃธ ์ํฐ๋ถ๋ถ์์๋ ํ๋ฒ๋ ์ธ์์ ์ ํํ๋ ์์ผ๋ก ํต์
- ์์ผ์์ ์ธ์์ด 2๋ช ๋ณด๋ค ๋ง์ ๊ฒฝ์ฐ ๋จ์ ์ธ์์ ์์ผ์ด ์ ๋๋ก ์ฐ๊ฒฐ๋์ง ์๋๋ก ํ์ฌ ํต์
์๊ฒฌ์กฐ์จ ๋ฐ ์์ฌ๊ฒฐ์
๊ฐ์ฅ ํ์คํ ๋ฐฉ๋ฒ์ ์์ผ์ฐ๊ฒฐ ์์ฒด๊ฐ ์๋๊ฒ ํ๋ ๋ฐฉ๋ฒ์ด๋ผ๋ ์๊ฒฌ์ด ์ฑํ๋์ด MSG_TYPE_JOIN์ ํตํด ๋ก์ง์ด ์คํ๋ ๋ ๋ฐฉ์ธ์์ ์ฒดํฌํ๊ณ 2๋ช ๋ณด๋ค ๋ง์๊ฒฝ์ฐ ์กฐ๊ธ์ด๋ผ๋ ๋๋ ธ๋ ๋๋จธ์ง ํ์ฌ๋์ ์์ผ์ ๋์ด์ ํด๊ฒฐ

















