'We All Lion' ์ ๋ณด๋๊ฒ์ '์คํ์ด ํด' ์ ๋ชจํฐ๋ธ๋ก ๋ง๋ ์จ๋ผ์ธ ํ์ ์ฑํ ๋ณด๋๊ฒ์ ํ๋ซํผ ์ ๋๋ค.
Position | ใNameใ | blog | Github |
---|---|---|---|
BE L |
๊น์ฐ์ | https://tastekim.notion.site/ | https://github.com/tastekim |
BE | ๊นํ์ | https://stone1207.tistory.com/ | https://github.com/kimhsno1 |
BE | ์ก๋ฏผํ | https://www.notion.so/Home | https://github.com/Minhyeong-S |
BE | ์ต์ค์ง | https://velog.io/@yunjin5450 | https://github.com/yunjin5450 |
FE VL |
๊ฐ์นํ | https://velog.io/@deepthink | https://github.com/seunghoonKang |
FE | ๋ฐํ์ | https://haro-e.tistory.com/ | https://github.com/parkharoi |
FE | ์ต์ง์ | https://www.notion.so/yoooooooung/ | https://github.com/yoooooooung |
Design | ์ด์ฃผ์ | https://cloudtraveljournal.tistory.com | Gmail : [email protected] |
- ์ฌ์๋ค ์ฌ์ด์ ์จ์ด๋ ๊ณ ์์ด๋ก ๋์์ธ ์ปจ์ ์ ์ ํด ๋ชจ๋ ์ฐ๋ น๋๊ฐ ์ ๊ทผํ๊ธฐ ์ฝ๊ฒ ์ ์ํ์ต๋๋ค.
- ์ต์ 4๋ช ๋ถํฐ ์ต๋ 8๋ช ๊น์ง ์ฝ๊ณ ๊ฐ๋จํ ๊ฒ์ ๊ท์น์ผ๋ก ์ฆ๊ธธ ์ ์์ต๋๋ค.
- ์ฐ๋ฆฌ๋ผ๋ฆฌ?! ์ง์ธ๋ค๊ณผ ์ฆ๊ธธ ์ ์๋๋ก ๋น๋ฐ๋ฐฉ ์ค์ ์ด ๊ฐ๋ฅํฉ๋๋ค.
- ์ค์๊ฐ ์ฑํ ๊ณผ ์บ ์ผ๋ก ์ ์ ๋ค๊ณผ ์ํตํ๋ฉฐ ์จ๋ผ์ธ์ผ๋ก ์ง๊ธ ๋น์ฅ ๊ฒ์์ ์ฆ๊ฒจ๋ณด์ธ์!
๊ฒ์์ค๋ช & ๋ก๊ทธ์ธ ํ์ด์ง | ๋ก๋น ํ์ด์ง |
---|---|
์ ์ ํ๋กํ ๋ณ๊ฒฝ | ๋ฐฉ ๋ง๋ค๊ธฐ |
---|---|
๋ฐฉ ์ ์ฅ & ๋๊ธฐ ํ์ด์ง | ๊ฒ์์์ ํ์ด์ง |
---|---|
๊ฒ์ํฌํ ํ์ด์ง | ๊ฒ์์ข ๋ฃ ํ์ด์ง |
---|---|
๊ฒ์์ค๋ช & ๋ก๊ทธ์ธ ํ์ด์ง
- ์นด์นด์ค ์์ ๋ก๊ทธ์ธ ํ์๊ฐ์
- ๊ฒ์ ์ค๋ช ๋ชจ๋ฌ
๋ก๋น ํ์ด์ง
- ๋ฐฉ ๋ชฉ๋ก (๋ฐฉ ์ ๋ณด ์ค์๊ฐ ํ์ธ ๊ฐ๋ฅ : ์ธ์, ๋ชจ๋, ๋ฐฉ ์ํ ๋ฑ)
- ๋ฐฉ ๋ง๋ค๊ธฐ ๋ฒํผ (๊ณต๊ฐ & ๋น๊ณต๊ฐ / EASY & HARD)
- ๋ก๋น ์ ์ฒด ์ฑํ
์ ์ ํ๋กํ ๋ณ๊ฒฝ
- ์ด๋ฏธ์ง, ์ ์ ์ด๋ฆ, ๊ฒ์ ์น๋ฅ
- ์ ์ ์ด๋ฆ ์์
๋ฐฉ ๋ง๋ค๊ธฐ
- ๋ฐฉ ๋ง๋ค๊ธฐ ๋ฒํผ (๊ณต๊ฐ & ๋น๊ณต๊ฐ / EASY & HARD)
๋ฐฉ ์ ์ฅ & ๋๊ธฐ ํ์ด์ง
- ๋ฐฉ ์ ๋ณด (๋ชจ๋, ์ธ์ ๋ฑ)
- ๊ฒ์ ์ค๋น/ ๊ฒ์ ์์
- ๋ฐฉ ์ ์ฒด ์ฑํ
- ๋ง์ดํฌ, ์นด๋ฉ๋ผ ๊ธฐ๋ฅ
๊ฒ์์์ ํ์ด์ง
- ๊ฐ์ ์ญํ ์นด๋ ๋ถ๋ฐฐ / ์ ์์ด ์นดํ ๊ณ ๋ฆฌ & ๋จ์ด ๋ชจ๋ฌ
- ์ฌ์ ํฌํ ๊ธฐ๋ฅ
๊ฒ์ํฌํ ํ์ด์ง
- ์คํ์ด ํฌํํ๊ธฐ
- ์คํ์ด ์ ๋ต ์ ์์ด ์ ํ
๊ฒ์์ข ๋ฃ ํ์ด์ง
- ์คํ์ด ๋ฐํ๊ธฐ
- ์ฌ์์ ๋ฐ ๋๊ฐ๊ธฐ
ํ๋ก์ ํธ ๊ตฌ์ฑ
โโโ Dockerfile
โโโ nodemon.json
โโโ package-lock.json
โโโ package.json
โโโ server.js
โโโ src
โย ย โโโ app.js
โย ย โโโ chat
โย ย โย ย โโโ chat-socket.js
โย ย โโโ game
โย ย โย ย โโโ game-provider.js
โย ย โย ย โโโ game-repo.js
โย ย โย ย โโโ game-socket.js
โย ย โโโ middlewares
โย ย โย ย โโโ auth-middleware.js
โย ย โย ย โโโ exception.js
โย ย โย ย โโโ passport
โย ย โย ย โย ย โโโ index.js
โย ย โย ย โย ย โโโ kakao-stratege.js
โย ย โย ย โโโ socket-auth-middleware.js
โย ย โย ย โโโ test.js
โย ย โย ย โโโ user-error-handler.js
โย ย โย ย โโโ wrap-async-controller.js
โย ย โโโ redis.js
โย ย โโโ rooms
โย ย โย ย โโโ room-provider.js
โย ย โย ย โโโ room-repo.js
โย ย โย ย โโโ room-socket.js
โย ย โโโ schemas
โย ย โย ย โโโ game.js
โย ย โย ย โโโ index.js
โย ย โย ย โโโ room.js
โย ย โย ย โโโ user.js
โย ย โโโ socket.js
โย ย โโโ users
โย ย โย ย โโโ user-controller.js
โย ย โย ย โโโ user-repo.js
โย ย โย ย โโโ user-route.js
โย ย โย ย โโโ user-service.js
โย ย โย ย โโโ util
โย ย โย ย โโโ jwt.js
โย ย โย ย โโโ user-function.js
โย ย โโโ webRTC
โย ย โโโ webRTC.js
โโโ test
โย ย โโโ mockData
โย ย โย ย โโโ user-data.js
โย ย โโโ user-test
โย ย โโโ jwt.spec.js
โย ย โโโ user-controller.spec.js
โย ย โโโ user-function.spec.js
โย ย โโโ user-repo.spec.js
โย ย โโโ user-service.spec.js
โโโ ์ ๋ชฉ ์๋ ๋ค์ด์ด๊ทธ๋จ.drawio
-
1. Nginx
ใ์ฌ์ฉ์ด์
- event-driven์ ๋น๋๊ธฐ ๊ตฌ์กฐ์ด๋ฏ๋ก ์ฑํ ๊ธฐ๋ฅ์ด๋ RTC๊ธฐ๋ฅ์ ์ฌ์ฉ ํ ๋, ๋์ ์ ์์ ์๊ฐ ์ฆ๊ฐ๋ฅผ ๋๋นํ์ฌ ์ ํฉํ ๋ฐฉ์์ ์น ์๋ฒ๋ผ๊ณ ์๊ฐํ์ต๋๋ค. ๋ํ NginX๋ ์ด๋ฒคํธ ์ฒ๋ฆฌ ๋ฐฉ์, ๋น๋๊ธฐ์ ์ฒ๋ฆฌ, ๋ ผ๋ธ๋กํน ๋ฐฉ์ ์ฒ๋ฆฌ๋ฅผ ํตํด ๊ณ ์์ผ๋ก ์ฒ๋ฆฌํ๋ ํน์ง์ด ์์ด ์ฌ์ฉํ๊ฒ ๋์์ต๋๋ค.
- ๋์ ์ ์์ ์๊ฐ ๋ง์์ ธ๋ Apache์ ๋นํด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ฅ ์ด ๋ฎ๊ณ , ์ฒ๋ฆฌํ๋ ์ด ๋น ์์ฒญ ์๊ฐ ์๋์ ์ผ๋ก ๋์ ๋ชจ์ต์ ๋ณด์ฌ์ค๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ข ๋ ํจ์จ์ ์ผ๋ก ์ด์ํ ์ ์๋ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ๊ณ ์ค๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ๊ฒ ๋์์ต๋๋ค.
- reverse proxy๋ก ์๋ฒ ํ์ฅ์ ์ฉ์ดํ๊ณ ๋ณด์์ ์ผ๋ก ๋ฐ์ด๋๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ์ต๋๋ค.
2. Socket.io
ใ์ฌ์ฉ์ด์
- ํต์์ ์ผ๋ก ์ฌ์ฉ์(์๋ฒ์ ์ฐ๊ฒฐ๋ ์์ผ๋ค)์ ์ธ๋ฐํ๊ฒ ๊ด๋ฆฌํด์ผํ๋ ์๋น์ค์๋ socket.io์ ์๋ ๋ธ๋ก๋์บ์คํ ์ ์ฌ์ฉํ๋๊ฒ ๋ ํจ์จ์ ์ด๋ผ๊ณ ํฉ๋๋ค.
- socket์ ์ด์ฉํด์ ๊ฒ์ ๋ก์ง๊ณผ ๊ฐ์ ๋ณต์กํ ๊ตฌ์กฐ๋ฅผ ๊ฐ๊ณ socekt์ด๋ผ๋ ๊ฐ์ฒด๋ฅผ ํ์ฉํด์ ์๋น์ค ๋ด์์ ํ์ฉํ๋ ๋ถ๋ถ๋ค์ ์๊ฐํ๋ฉด socekt.io๊ฐ ๋ ์ ํฉํ๋ค๊ณ ํ๋จํ์ต๋๋ค.
3. Redis
ใ์ฌ์ฉ์ด์
- ๊ฐ ๊ฒ์์ ๋ํด ํฌํ ๊ฒฐ๊ณผ ์ง๊ณ๋ ์ค๋น ์ํ ๋ฑ DB์ ์ ์ฅํ ํ์๋ ์๋ค๊ณ ์๊ฐํ์ต๋๋ค.
- I/O์ ๋น๋ฒํ ๊ฐ๋จํ ์ก์ ๋ค์ ๋ํด ๊ฐ๋ณ๊ฒ ์ ์ฅํด ๋ DB์ memcached๋ redis ๊ฐ ํ๋ณด์์ต๋๋ค. memcached๋ณด๋ค redis๊ฐ cloud์๋น์ค๋ก ์ ๊ณต์ด ์ด๊ธฐ ์ธํ ํ๊ธฐ์ ๋ ๋นจ๋ผ์ ์ ํํ๊ฒ ๋์ต๋๋ค.
- ๊ฐ๋จํ ๋ฐ์ดํฐ ํ์ ๋ค๊ณผ key, value ํ์์ผ๋ก ์ ์ฅํ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ DB๋ผ์ I/O์ ๋ค๋ฃจ๊ธฐ์๋ redis๊ฐ ์ ํฉํ๋ค๊ณ ์๊ฐํ์ต๋๋ค.
- redis๋ฅผ ์ ํํ ๋ local๊ณผ cloud ๋๊ฐ์ง ์ต์ ์ด ์์๋๋ฐ ํ์ ํ๋ฉด์ ์ฌ์ฉํ๊ธฐ์๋ ์๋ฌด๋๋ local๋ณด๋จ cloud๊ฐ ๋ ํจ์จ์ ์ผ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ด ๋ค์์ต๋๋ค.
4. JWT
ใ์ฌ์ฉ์ด์
- ์นด์นด์ค์์ ๋ฐ๊ธ๋ฐ์ accessToken์ ๊ทธ๋๋ก ์ฌ์ฉํด๋ ๋์ง๋ง ์นด์นด์ค์ accessToken ์ ์ ํจ์๊ฐ์ด 11์๊ฐ์ผ๋ก ๊ต์ฅํ ๊ธด ํธ์ด๋ผ๊ณ ์๊ฐํ์ต๋๋ค.
- ์ง์ accessToken์ ๋ฐ๊ธํ๊ณ ์ ํจ์๊ฐ์ ์ค์ฌ ๋ณด์์ ์กฐ๊ธ ๋ ๊ฐํํ๊ณ ์ ์๊ฐํ์ต๋๋ค.
- ์ธ์ ๋ฐฉ์๊ณผ ๋ค๋ฅด๊ฒ ๋ณ๋์ ์ธ์ฆ ์ ์ฅ์๊ฐ ํ์ํ์ง ์์ ์๋ฒ์์ ์ปค๋ฎค๋์ผ์ด์ ์ ์ต์ํ์ผ๋ก ํ ์ ์์ด ํธ๋ํฝ์ ๋ํ ๋ถ๋ด์ด ์ ๋ค๊ณ ์๊ฐ์ด ๋ค์์ต๋๋ค.
5. MongoDB
ใ์ฌ์ฉ์ด์
- ํ๋ก์ ํธ์์ DB์ ์ ์ฅํ๋ ๋์์ ์ ์ (์ ์ , ๊ฐ์ธ์ ๋ณด) / ๋ฃธ / ๊ฒ์ ์ด๋ ๊ฒ ์ธ ๊ฐ์ง ํ ์ด๋ธ(์ฝ๋ ์ ) ๋ฐ์ ํ์ํ์ง ์๊ณ , ๋ฐ์ดํฐ์ ์งํฉ ๊ฐ์ ์ข ์์ฑ์ด ๋ง์ง ์๋ค๊ณ ์๊ฐํ์ต๋๋ค.
- ๊ฒ์ ๋ด์์ ์ค์๊ฐ์ผ๋ก ๋ณํ๋ ์ ๋ณด๋ ๋ฐฉ ์ํ์ ๋ณํ์ ๊ฒฝ์ฐ ์ผ์์ ์ธ ์ ๋ณด๋ Redis๋ฅผ ํตํด์ ์ ์ฅํ๊ธฐ๋ ํ์ง๋ง, Redis๋ก ๋ชจ๋ ์ ๋ณด๋ฅผ ์ ๋ถ ์ฒ๋ฆฌํ ์๋ ์๊ธฐ์ DB๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์๊ณ , ๋ ๊ต์ฅํ ์์ฃผ DB์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๊ฑฐ๋ ์ ๋ฐ์ดํธํด์ผ ํ๋ ์ํฉ์ด ๋ฐ์ํ๋ค๊ณ ์๊ฐ์ด ๋ค์์ต๋๋ค.
- ๋ค๋ฅธ ๋ฐ์ดํฐ ์งํฉ์ ์ฐ๊ฒฐ์์ผ์ ๊ฐ์ ธ์์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค์ํผํ๊ธฐ์ ์ฒ๋ฆฌ ์๋๊ฐ ๋น ๋ฅธ NoSQL์ด ์ฐ๋ฆฌ์ ํ๋ก์ ํธ์ ๋ ์ ํฉํ๋ค๊ณ ํ๋จํ์ต๋๋ค.
- ์์ผ์ ํตํด ์ค์๊ฐ์ผ๋ก ๋ง์ ์ ๋ณด๊ฐ ์์ฑ, ๋ณ๊ฒฝ๋๋ ์๋น์ค์ด๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๋ฅผ ๋นจ๋ฆฌ ์ฝ์ด์ฌ ์ ์์ผ๋ฉฐ ์์ง ๋ฐ ์ํ ํ์ฅ์ด ๊ฐ๋ฅํ๋ค๊ณ ์๊ฐ์ด ๋ค์์ต๋๋ค.
6. Prettier / ESLint / Babel
ใ์ฌ์ฉ์ด์
- prettier ๊น๋ํ ์ฝ๋์ ํ์ ์ ์ํด์ ์ผ๊ด์ฑ ์๋ ์ฝ๋ ์คํ์ผ์ ์ ๊ณตํด์ค๋ค ์๊ฐํ์ฌ ์ฌ์ฉํ์ต๋๋ค.
- eslint ๋ค์ํ ๋ฐฉ์์ผ๋ก ๊ตฌํํ ์ ์๋ ์ฝ๋ ๋ฐฉ์์ ์ผ๊ด์ฑ ์๊ฒ ๊ตฌํํ ์ ์๋๋ก ํด์ค๋ค ์๊ฐํ์ฌ ์ฌ์ฉํ์ต๋๋ค.
- babel Babel์ ์ด์ฉํ๋ฉด ES6 ์ด์์ ์ต์ ๋ฌธ๋ฒ์ผ๋ก ์์ฑํ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ES5 ์ดํ์ ์์ ๋ฌธ๋ฒ์ผ๋ก ์์ฑํ ๊ฒ ์ฒ๋ผ ์์ค ์ฝ๋ ๋ด์ ๋ฌธ๋ฒ์ ํํ๋ฅผ ๋ณ๊ฒฝํด์ฃผ์ด ๋ค์ํ ์คํํ๊ฒฝ์์ ์๋ํ ์ ์๊ฒ ํด์ค๋ค ์๊ฐํ์ฌ ์ฌ์ฉํ์ต๋๋ค.
ใใ๐ ๊ธฐ์ ์ ์์ฌ ๊ฒฐ์
ใใ๐ ์นด์นด์ค์์
๋ก๊ทธ์ธ : ํ๋ก ํธ๋ก ๋ฐ์ดํฐ ์ ๋ฌ ๋ถ๊ฐ
ใใ๐ socket.js ๊ธฐ๋ฅ๋ณ ๋ถ๋ฆฌ ์ค ์ฐ๊ฒฐ ์๋ฌ
ใใ๐ ํน์ ๋ฃธ์ผ๋ก ์ฑํ
๋ฉ์ธ์ง ์ ๋ฌ ๋ถ๊ฐ (Socket.io)
ใใ๐ docker image๋ก ์๋ฒ ์คํ ์ 'Javascript heap out of memory' ํ์
ใใ๐ docker์์ openvidu ์๋ฒ๋ฅผ ํ์ฉํ SFU ๋ฐฉ์ ํ
์คํธ ์งํ ๋ด์ฉ
-
BackEnd: WeAllLion-BE
-
FrontEnd: WeAllLion-FE