# ๐ [J6] 8์ฃผ์ฐจ ํผ์ด์ธ์
## ๐ ์ฐธ์ฌ์
|[J130 ์ ์ ํ(J02B)](https://github.com/youjeonghan)|[J039 ๊น์์ง(J02B)](https://github.com/jin-Pro)|[J138 ์ด๊ด๋ฏผ(J01B)](https://github.com/LeeKwang-min)|[J102 ์ค๋ฏผ์ฑ(J11A)](https://github.com/blogSoul)|[J049 ๊น์ผํ(J11A)](https://github.com/illlama)|[J187 ์ ์ํ(J01B)](https://github.com/ingyeoking13)|[J042 ๊น์ฉ์ง(J16A)](http://github.com/Yongjin9660)
|---|---|---|---|---|---|---|
|<img src="https://github.com/youjeonghan.png" width="80"> |<img src="https://github.com/jin-Pro.png" width="80">|<img src="https://github.com/LeeKwang-min.png" width="80">|<img src="https://github.com/blogSoul.png" width="80">|<img src="https://github.com/illlama.png" width="80">|<img src="https://github.com/ingyeoking13.png" width="80">|<img src="https://github.com/Yongjin9660.png" width="80">
## ๐จโ๐งโ๐ฆ ๊ณํ
2:30~2:40 ์๊ธฐ์๊ฐ
2:40~4:00 ์์ ์ง๋ฌธ + ๋ฆฌ๋ทฐ ๋ด์ฉ ๊ณต์
4:00~ ์์ ํ ๋ก
## ๐ ํค์๋
- Canvas
- React ๋น๋๊ธฐ ์ฒ๋ฆฌ (axios, fetch)
- socket.io
- pm2
- ์ธ์คํด์ค ๋ถ๋ฆฌ
- ์ ๋๋ฉ์ด์
๊ตฌํ ๋ฐฉ์
- nginx
## ๐ง ์์ ์ง๋ฌธ
---
- ์ ๋ ์บ๋ฆญํฐ,๋งต,์ค๋ธ์ ํธ ํ๋๋น canvas๋ก ๊ทธ๋ ค์ฃผ์๊ณ , ๋งค๋ฒ ๋ฆฌ๋ ๋๋ง๋ ๋๋ง๋ค image๋ฅผ ์๋ก ์์ฑํด์ฃผ์๋๋ฐ ์๋ชป๋ ๋ฐฉ๋ฒ์ธ ๊ฒ์ ์๊ฒ๋์๋๋ฐ์, ํน์ canvasํ๋์ ์บ๋ฆญํฐ, ๋งต, ์ค๋ธ์ ํธ๋ฅผ ๊ทธ๋ ค์ฃผ์ ๋ถ๋ค ์ฝ๋๋ฅผ ๋๋ฌด ๊น์ง์๊ฒ ์ค-์ฝ ๋ณด๊ณ ์ถ์ต๋๋ค!
- ์บ๋ฆญํฐ๊ฐ 5๊ฐ๋ฉด canvas๋ 5๊ฐ๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํ์ ํ์๋๋ฐ, ์ด๋ ๊ฒ ๋ ๊ฒฝ์ฐ canvas๋ฅผ ๋๋ฌด ๋ง์ด ์จ์ ์ฐจ๋ผ๋ฆฌ canvas๋ฅผ ํ๋๋ง ์ฐ๋๊ฒ ๋ ๋์ ์ ์๋ค๊ณ ํฉ๋๋ค. canvas๋ฅผ ํ๋๋ง ์ฌ์ฉํ์ฌ ์ขํ๊ฐ์ผ๋ก ์ด๋ฏธ์ง๋ฅผ ๊ทธ๋ ค์ฃผ๋ ๋ฐฉ์์ ๊ตฌํ์ ํ์ ๋ถ์ด ์๋ค๋ฉด ์ฝ๋๋ฅผ ๋ณด๊ณ ์ถ์ต๋๋ค.
- ์ด๋ฏธ์ง ํ๊ทธ๋ฅผ ๋ฃ๋ ๋ฐฉ์์ด 2๊ฐ์ง๊ฐ ์๋ค. ์ด๋ฏธ์ง ๊ฐ์ฒด๋ฅผ ์๋ก ์์ฑํ์ฌ ์ถ๊ฐํ๋ ๋ฐฉ์, ์ด๋ฏธ์ง ํ๊ทธ๋ฅผ ์ง์ ๋ถ๋ฌ์ค๋ ๋ฐฉ์์ด ์๋ค. ์ด ์ค์์ ์ด๋ฏธ์ง ํ๊ทธ๋ฅผ ๋ฏธ๋ฆฌ ๋ง๋ค์ด ๋๊ณ ์ด๋ฅผ ๋ถ๋ฌ์์ ์ฌ์ฉํ๋ ๋ฐฉ์์ ์ฌ์ฉํ๊ฒ ๋์๋ค. CSS ํน์ฑ์ ์ฌ์ฉํ์ฌ ์ฒ๋ฆฌํ์๋ค.
- ์ด๋ฏธ์ง ํ๊ทธ๋ฅผ ๊ด๋ฆฌํ ๋ฐฉ์์ canvas ํ๊ทธ ํ์์ ์ด๋ฏธ์ง ํ๊ทธ๋ฅผ ๋ฃ์ด๋๊ณ className, id๋ฅผ ์ฌ์ฉํ์ฌ ๊ด๋ฆฌํ์๋ค.
- ์ด๋ฏธ์ง ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ ์ ์ ์์น์ ๋ํ ์ ๋ณด๋ฅผ setInterval์ ํด๋ผ์ด์ธํธ์์ ์๋ฒ๋ก, ์๋ฒ์์ ํด๋ผ์ด์ธํธ๋ก ๋ณด๋ด์ฃผ์ด ๊ณ์ํด์ ๋ค์ ๊ทธ๋ ค์ฃผ๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
---
- ์ปดํฌ๋ํธ ์์์ ๋น๋๊ธฐ ๋ฐ์ดํฐ๋ฅผ ์ด๋ค ๋ฐฉ์์ผ๋ก ๋ฐ์์์ ์ฒ๋ฆฌํ๋์?
๋น๋๊ธฐ ์ฒ๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฑ์ ์ด์ฉํ ๋ถ์ด ์์๊น์??
- fetch๋ฅผ ์ฌ์ฉํ๋๋ฐ ๋ฌธ์ ๊ฐ ์กฐ๊ธ ์์ด์ axios๋ฅผ ์ฌ์ฉํ์๋ค.
- nginx๋ฅผ ์ด๋ฒ์ ์ฒ์ ์ด์ฉํ๋๋ฐ get ์ด์ธ์ post, put ์์ฒญ์์ ์๋ฌ๊ฐ ๋ํ๋๋๋ฐ ๋ค๋ฅธ๋ถ๋ค์ get ์ด์ธ์ http method์์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ์
จ๋์?
- ์ด๋ค ์๋ฌ๊ฐ ๋์
จ๋์?
- > get ์ด์ธ์ ์์ฒญ์์ 405 ์๋ฌ์ฝ๋๋ฅผ ๋ฐํํ๋ ์๋ฌ์์ต๋๋ค! (nginx 405 Not Allowed ๋ผ๊ณ ๊ฒ์ํ๋ฉด ๋ง์ด ๋์ค๋๋ผ๊ตฌ์)
- > header์์ credential : true ์ถ๊ฐํ์
จ๋์? ์๋จ...
- > ํค๋ ์ค์ ๋ฌธ์ ์ผ ์๋ ์๊ฒ ๋ค๋ ์๊ฐ์ด ๋ญ๋๋ค!
- > ์๋๋ฉด " nginx์์๋ .html ํ์ผ์ ๋ํ post ์์ฒญ์ ์ง์ํ์ง ์๋๋ค. " ๋ผ๊ณ ํ๋ค๊ณ ํ๋ค์.
- ๋ก๊ทธ์ธ์ ํ๋ ๊ณผ์ ์์ ์๊ธฐ๋ ๋ฌธ์ ๋ค์ด ๋ช๊ฐ์ง ์๋ค.
- ์์์ ์์ ํ ๊ฒ๊ณผ ๊ฐ์ด header ๋ฌธ์ ์ผ ์๋ ์๋ค. header์์ credential์ ์ถ๊ฐํ์ง ์์ผ๋ฉด `CORS` ๋ฌธ์ ๊ฐ ๋ํ๋ ์ ์๋ค.
- 405 ์๋ฌ๊ฐ ๋๋ฉด ์ด๋ฅผ ํ์ธํ์ฌ 200๋ฒ๋ ์ํ๋ก ๋๊ฒจ์ฃผ๋ ๋ฐฉ์์ด ์๋ค. [ํ์ธ](https://stackoverflow.com/questions/24415376/post-request-not-allowed-405-not-allowed-nginx-even-with-headers-included)
- axios์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ๋ `data`๋ก ๊ฐ์ธ์ง๊ธฐ ๋๋ฌธ์ `data.data`๋ก ๋ฐ์ง์์์ ๊ทธ๋ฐ๊ฒ์ผ ์ ์๋ค.
- jwt๋ฅผ ์ฌ์ฉํด์ ๋ก๊ทธ์ธ์ ๊ตฌํํ ๋ถ์ด ์์ผ๋ฉด ํ ํฐ ๋ง๋ฃ์ ๋ฆฌํ๋ ์ ํ ํฐ์ ์ด์ฉํด์ ๊ฐฑ์ ์ ์ด๋ป๊ฒ ์ํค๋์ง ํ๋ก์ฐ๋ฅผ ์ข ๋ณด๊ฑฐ๋ ์๊ณ ์ถ์ต๋๋ค.
- ์๋ฌด๋ ์ฌ์ฉ์ ์ํ์ ๊ฑฐ ๊ฐ์ต๋๋ค.
---
- ์ ํฌ ํ์ ์บ๋ฒ์ค ๊ทธ๋ฆด ๋, setInterval์ ์ฌ์ฉํ์ต๋๋ค. ๋ค๋ฅธ draw ๋ฐฉ์์ ์ฑํํ์ ํ๋ค์ด ์์๊น์? ์ฌ์ฉ ์๊ฒฌ ๊ถ๊ธํฉ๋๋ค! ์ฐ์ setInterval์ ์ฐ๋ ค ์ธ๋ก ์ ๋์์ด์ :)
- Canvas๋ฅผ ๊ทธ๋ฆด ๋ requestAnimationFrame๊ณผ setInterval, OffscreenCanvas ๋ฑ์ด ์๋๋ฐ ๊ทธ ์ค์์ setInterval์ ์ฌ์ฉํ์๋ค. ๋ค๋ฅธ ๋ฐฉ์์ ์ฌ์ฉํ์ ๋ถ๋ค์ด ์๋ค๋ฉด ๊ตฌํํ ๋ ์ด๋ ์
จ๋์ง ์๊ฒฌ์ด ๊ถ๊ธํฉ๋๋ค.
- requestAnimationFrame์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ Canvas๋ฅผ ๊ทธ๋ฆฌ๊ณ ๋์ ์ฌ๊ท์ ์ผ๋ก ๋ฐ์์ค๋๋ก ์ฒ๋ฆฌํ๋ค.
- ๋ค๋ฅธ ์ ์ ๋ค์ ๋ฐ์ดํฐ๋ค์ ์๋ฒ๊ฐ ์๋ ํด๋ผ์ด์ธํธ์์ ๊ด๋ฆฌํ๋๋ก ์ฒ๋ฆฌํ์๋ค. socketํต์ ์ ํตํด ํด๋ผ์ด์ธํธ์์ ๋๊ฒจ์ค ๋ฐ์ดํฐ๋ฅผ ์๋ฒ๋ฅผ ํตํด ์ฐ๊ฒฐ๋ ๋ค๋ฅธ ์ ์ ๋ค์๊ฒ ๋๊ฒจ์ฃผ๋ ๋ฐฉ์์ ์ฌ์ฉ
- OffscreenCanvas์ ๊ฒฝ์ฐ ๋ฐ๋์ง ์๋ ๋งต๊ณผ ๊ฐ์ ๋ฐ์ดํฐ๋ค์ ์ด ๋ฐฉ์์ ์ฌ์ฉํ๊ฒ๋๋ฉด ํจ์ฌ ๋ถํ๊ฐ ์ค์ด๋๋ ๊ฒฝํ์ ํ ์ ์ด ์๋ค.
- ์ ์ฒด์ ์ธ ๊ตฌํ ํ๋ก์ธ์ค์์ ๊ณ ๋ฏผ ๋ง์ด ํ๋ point ์์๊น์? ์ ๋ ์ถฉ๋ ์ฒ๋ฆฌ๋ฅผ ์๋ฒ์์ ํ ์ง ํด๋ผ์ด์ธํธ์์ ํ ์ง ๊ณ ๋ฏผ ํ์์ด์.
- ์ด๋ฒ ๋ฏธ์
์ ๊ตฌํํจ์ ์์ด ์ด๋ค ๋ถ๋ถ์์ ๊ฐ์ฅ ๋ง์ ์์์ ์ฌ์ฉํ์
จ๋์ง
- ์ setInterval๋ก ๊ตฌํํ์๋๋ฐ, ๋๋ฌด ๋ง์ ์์ฒญ์ด ์ค๋ ๊ฒ์ด ์ฐ๋ ค๊ฐ ๋์ ์ด๋ค ๋ฐฉ๋ฒ์ ์ด์ฉํ๋ฉด ์ ๋นํ ์์ฒญ ํ์๋ฅผ ๋ณด๋ผ ์ ์๋์ง ๊ณ ๋ฏผํ์์ต๋๋ค.
- lodash์ debounce ๋ฉ์๋
- Dead Reckoning ๋ฐ๋ ๋ ์ปค๋
- TypeScript : ์ค๋ฌด์์ ์ ์ฐ๋์ง ์๊ฒ ๋ ๊ฒ ๊ฐ๋ค. ์ด๋ฒ ๊ธฐํ์ ์ ๋๋ก ํ์ตํด๋ณธ ๊ฒ ๊ฐ๋ค.
- recoil : redux ๋ณด๋ค boilerplate ๊ฐ ์ ๋ค. ์ํ๋ฅผ ์ ์ญ์ ์ผ๋ก ๊ด๋ฆฌํ์ฌ ํธํ๋ค.
---
- ์ด๋ฒ ๋ฏธ์
๊ณผ ๊ฐ์ด ํน์ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํํ๋ ๊ฒฝ์ฐ ์ด๋ฏธ์ง ๋ฆฌ์์ค๋ฅผ ์๋ฒ์ ์ ์ฅํด ๋๊ณ ํด๋ผ์ด์ธํธ์์ ์๋ฒ๋ก ์์ฒญ์ ํ์ฌ ๋ฐ์์ค๋ ๋ฐฉ์๊ณผ ํด๋ผ์ด์ธํธ๋จ์ ๋๊ณ ์ฌ์ฉํ๋ ๋ฐฉ์์ ๋ํ ์๊ฒฌ์ด ๋๋์์ต๋๋ค. ๋ค๋ฅธ ๋ถ๋ค์ ์๊ฒฌ์ด ๊ถ๊ธํฉ๋๋ค.
- ์์ง์๋ง๋ค ์๋ฒ์ ์์ฒญ์ ํ๋๊ฒ์ ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์๊ณ , ์๋ฒ๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ์์ํ ๋ ์๋ฒ๋ก๋ถํฐ ๋ฆฌ์์ค๋ค์ ๋ชจ๋ ๋ฐ์์์ ์ ์ฅํด๋๊ณ ์ฌ์ฉํ๋๋กํ๋ค.
- ์ด๋ ํ์ชฝ์ ๋ถํ๋ฅผ ์ค์ด๋ฉด ๋ค๋ฅธ ํ์ชฝ์ ๋ถํ๊ฐ ๋์ด๋ ์ ๋ฐ์ ์๊ธฐ ๋๋ฌธ์ ์ ๋ต์ ์๋ค. ํน์ ์ํฉ์ ์์ด์๋ง ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ผ๋ฉด ์๋ฒ์์ ์ ๊ณตํ๋ ๋ฐฉ์์, ๊ณ์ํด์ ์ฌ์ฉํด์ผํ๋ ๊ฒฝ์ฐ๋ผ๋ฉด ํด๋ผ์ด์ธํธ์์ ์ฌ์ฉํ๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
---
- db ์๋ฒ๋ฅผ ๋ถ๋ฆฌํ์ ๋ถ์ด ๊ณ์ ์ง ๊ถ๊ธํฉ๋๋ค. ๋ถ๋ฆฌํ์
จ๋ค๋ฉด, ์ด๋ค ์์ผ๋ก db์ ์ ๊ทผํ์
จ๋์ง ๊ถ๊ธํฉ๋๋ค.
- ์๋ฒ์ db ์ธ์คํด์ค๋ฅผ ๋ถ๋ฆฌํ์ฌ ์ฌ์ฉํ๊ฒ ๋์๊ณ , ssh ํฐ๋๋ง์ ์ฌ์ฉํ๊ฒ ๋์๋ค. ํ์ง๋ง, ๋์ผํ ์ฝ๋๋ก ์ํํ ํต์ ์ด ์ด๋ ค์ ๋ค. ๋ค๋ฅธ ๋ฐฉ์์ด ์๋์ง ๊ถ๊ธํ๋ค.
- mongodb์๋ฒ๋ฅผ ๋ฐ๋ก ์๋ฒ๋ก ๋ฐฐํฌํ์ฌ ์งํํ์ต๋๋ค. mongoose ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํตํด DB ์๋ฒ์ ์ฐ๋ ํ ์ฌ์ฉํ์ต๋๋ค! (ssh ์ ์๊ณผ ๋น์ทํฉ๋๋ค)
---
- ์๋ ๋ฐฐํฌ ๊ตฌํํ์ ๋ถ ๊ณ์ ๊ฐ์? ์๋ค๋ฉด ์ก ์คํฌ๋ฆฝํธ ์ด๋ป๊ฒ ์ง์
จ๋์ง ๊ถ๊ธํฉ๋๋ค.
- github action์ ์ฌ์ฉํ์ฌ ๊ตฌํ : ssh-action์ ์ฌ์ฉํ์๋ค.
- ๋ค๋ค ์ค์๊ฐ์ผ๋ก canvas์ ๊ทธ๋ ค์ผ ํ๋ ์ค๋ธ์ ํธ์ ๋ํ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ์
จ์ํ
๋ฐ, ์ด๋ค ๋ฐฉ์์ผ๋ก ๊ด๋ฆฌ๋ฅผ ํ์
จ๋์ง ๊ถ๊ธํฉ๋๋ค.
- `๋ก๊ทธ์ธ -> ์บ๋ฆญํฐ ์ ํ ์ ๋ณด, ์บ๋ฆญํฐ ์์น ์ ๋ณด ์ ์ฅ -> ํด๋น ์ ๋ณด๊ฐ ์ ์ฅ๋ ๋ฆฌ์คํธ๋ฅผ ๋ฟ๋ ค์ ์ฒ๋ฆฌ`ํ๊ณ ์ ํ์๋๋ฐ, ๋ค๋ฅธ ๋ถ๋ค์ ๊ตฌํ ํ๋ฆ์ ๋ํด ์๊ณ ์ถ์ต๋๋ค.
- ์ฌ์ ์์์ ์ด ์ ์ ์์น๋ฅผ DB์ ์ ์ฅํ๊ณ ๋ถ๋ฌ์ค๋ ๋ฐฉ์ (์จ๋ผ์ธ/์คํ๋ผ์ธ ์ ๋ณด๋ฅผ ์ํด์ ์ฌ์ฉํ๊ณ ์ ํ์๋ค)
- ์ฌ์ ์์์ default๊ฐ์ ์์น์ ์์ฑํ๋ ๋ฐฉ์
- ์๋ฒ์ ํด๋ผ์ด์ธํธ์์ ์ฃผ๊ธฐ์ ์ผ๋ก ์ ์์ค์ธ ์ ์ ์ ๋ณด๋ฅผ ๋ณด๋ด๋ ๋ฐฉ์์ ์ฌ์ฉ
- ์์ผ์์ ๋ธ๋ผ์ฐ์ ๋ฅผ ๋๋๊ฒ์ ํ์ธํ ์ ์๋ค. (disconnecting ์ด๋ฒคํธ ์ฌ์ฉ)
- ์์ผ ํต์ ์ ๊ฐ๋ฒผ์ด ๋๋์ด ๋ค์ด์ ๋ค์ํ ๋ฐฉ์์ ์ฌ์ฉํ ์ ์๋ค.
- disconnecting : ์์ผ ํต์ ์ด ๋๊ธฐ๊ธฐ ์ ์ ๋ฐ์ํ๋ ์ด๋ฒคํธ (์ฌ์ฉ์๊ฐ ๋๊ฐ๊ธฐ ์ ์ ์ด๋ฒคํธ ์ฒ๋ฆฌ : ๋๊ฐ๊ธฐ ์ ์ ๋ฐ์ดํฐ ์ ์ฅ)
- disconnect : ์์ผ ํต์ ์ด ๋๊ธฐ๊ณ ๋ฐ์ํ๋ ์ด๋ฒคํธ (์ฌ์ฉ์๊ฐ ๋๊ฐ๊ณ ๋์ ๋ฐ์ํ๋ ์ด๋ฒคํธ : ๋๊ฐ ์ ์ ์ ๋ํ ์๋ฆผ)