๐Ÿค”์งง์€๊ณต๋ถ€ ์„œ๋น„์Šค ํ›„๊ธฐ

์ด์Šน์ค€ยท2023๋…„ 9์›” 22์ผ
0

ํ”„๋กœ์ ํŠธ ๋ช… : ์งง์€๊ณต๋ถ€ ( Short - Bean )

1. ์†Œ๊ฐœ

  • ํ•™์ƒ๋“ค์ด ์›น์—์„œ ๋ฌธ์ œ๋ฅผ ๊ณต์œ ํ•˜๊ณ , ์„ ์ƒ๋‹˜๊ณผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ฑ„ํŒ…๊ณผ ํ™”์ƒ ์ฑ„ํŒ…์„ ํ•˜์—ฌ ๊ฑฐ๋ฆฌ์˜ ์ œ์•ฝ์„ ๋ฐ›์ง€ ์•Š๊ณ  ํ•™์Šตํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค.
  • ๊ธฐ๊ฐ„ : '23.08.14 ~ '23.09.18 ( ๋ฐฑ์—”๋“œ 5๋ช…, 5์ฃผ )

2. ์‚ฌ์šฉ์Šคํƒ

  • ํ™˜๊ฒฝ : node.js ( v18.16.0 ) Express
  • DB : Mysql, MongoDB, AWS S3
  • ๋ฐฐํฌ : AWS EC2, Nginx
  • ์‚ฌ์šฉํ•œ ๊ธฐ์ˆ 
    • WebRTC, socket.IO
    • ๋กœ๊ทธ์ธ : JWT

3. ์ฃผ์š”๊ธฐ๋Šฅ

  1. ๋กœ๊ทธ์ธ ๋กœ๊ทธ์•„์›ƒ
    • ํšŒ์›๊ฐ€์ž… ์‹œ sms์ธ์ฆ์„ ํ†ตํ•ด ๊ฐ€์ž…์ด ์ง„ํ–‰๋˜๋ฉฐ,
      ๋กœ๊ทธ์ธ ์‹œ JWTํ† ํฐ์ด ์ฟ ํ‚ค์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
    • ๋กœ๊ทธ์•„์›ƒ์€ cookie๋ฅผ ์‚ญ์ œํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.
  2. ํ™”์ƒ์ฑ„ํŒ…
    • ์†Œ์ผ“๊ณผ HTML canvas๋ฅผ ์ด์šฉํ•˜์—ฌ ํ™”์ƒ์ฑ„ํŒ… ๋ฐ ๋“œ๋กœ์šฐ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ์ฑ„ํŒ…
    • ์˜จ,์˜คํ”„๋ผ์ธ ํšŒ์›์ด ํ‘œ์‹œ๋˜๋ฉฐ, ์ฑ„ํŒ…์‹œ๊ฐ„๊ณผ ๋‚ด์šฉ์ด ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
  4. ๊ฒŒ์‹œ๊ธ€ CRUD
    • ์ฃผ์š”๊ธฐ๋Šฅ์œผ๋กœ S3๋ฅผ ์ด์šฉํ•ด ์‚ฌ์ง„์—…๋กœ๋“œ๋ฅผ ํ•˜๊ณ , ๊ณผ๋ชฉ๊ณผ ๋‚ด์šฉ์„ ํฌํ•จํ•ด ํฌ์ŠคํŒ…ํ•ฉ๋‹ˆ๋‹ค.
    • ์ข‹์•„์š” ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  5. ๋Œ“๊ธ€
    • ํ•ด๋‹น ๊ฒŒ์‹œ๋ฌผ์— ๋Œ€ํ•ด์„œ ๋Œ“๊ธ€์„ ๋‚จ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  6. ํŠœํ„ฐ๋“ฑ๋ก, ์‹ ๊ณ ๊ธฐ๋Šฅ
    • ํŠœํ„ฐ ๋“ฑ๋ก ์‹œ ์ž๊ฒฉ์ด ์ฃผ์–ด์ง€๋ฉฐ, ํ™”์ƒ์ฑ„ํŒ…๊ถŒํ•œ์ด ์ƒ๊น๋‹ˆ๋‹ค.(๊ตฌํ˜„x)

4. ๋งก์•˜๋˜ ์—ญํ• ๊ณผ ๋ฌธ์ œํ•ด๊ฒฐ

๋งก์•˜๋˜ ์—ญํ• 

  • ์ฑ„ํŒ…๊ธฐ๋Šฅ
    • Socket.io
  • ๋ฐฐํฌ
    • AWS EC2, Nginx, Let's Encrypt

๊ฒช์€ ๋ฌธ์ œ์ 

4-1 database ๋ถ„๋ฆฌ

์ฑ„ํŒ…๋ฐ์ดํ„ฐ ์ €์žฅ ์‹œ NoSQL๊ณผ MySQL ์ค‘ ์–ด๋–ค DB๋ฅผ ์„ ํƒํ•ด์•ผ ํ•˜๋Š” ์ง€ ๊ณ ๋ฏผ์ด ๋งŽ์•˜๋‹ค. ํฌ๊ฒŒ ํ™•์žฅ์„ฑ๊ณผ ์•ˆ์ •์„ฑ์ด๋ผ๋Š” ํ‚ค์›Œ๋“œ๋กœ ๊ณ ๋ฏผ์„ ํ–ˆ๊ณ ,

๊ฒฝํ—˜์— ๋Œ€ํ•œ ์š•๊ตฌ์™€ ํ™•์žฅ์„ฑ์ด๋ผ๋Š” ์ด์œ ๋กœ MongoDB๋ฅผ ์‚ฌ์šฉํ–ˆ๊ณ ,
User์™€ Room ๋ฐ์ดํ„ฐ๋Š” Mysql, roomId์™€ ์ฑ„ํŒ…๋ฐ์ดํ„ฐ๋Š” MongoDB๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค.

์‚ฌ์‹ค ๋งŽ์€ ํ…Œ์ŠคํŠธ๋ฅผ ๊ฑฐ์น˜์น˜ ์•Š์€ ์„œ๋น„์Šค๊ธฐ์— ์•ˆ์ •์„ฑ์ด ๋–จ์–ด์ง€๊ณ ,
Mysql๊ณผ NoSQL์„ ํ˜ผํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ–ˆ๊ธฐ์— ์„œ๋ฒ„ํ™•์žฅ์‹œ MongoDB์˜ ์žฅ์ ์„ ์ „๋ถ€ ํ™œ์šฉํ•  ์ˆ˜ ์—†์„ ๊ฒƒ ๊ฐ™๋‹ค. ( Mysql์„ ์™„์ „ํžˆ ๋ถ„๋ฆฌํ•˜๋Š” ์ž‘์—…์ด ์ถ”๊ฐ€ )

๊ฒฐ๊ณผ์ ์œผ๋กœ ์„œ๋น„์Šค์˜ ํ’ˆ์งˆ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ณ , ์ฑ„ํŒ…์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์™„์ „ ๋ถ„๋ฆฌํ•˜์—ฌ MongoDB๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ–ˆ๋‹ค.

4-2 ์†Œ์ผ“์—ฐ๊ฒฐ ์‹œ ์ธ์ฆ

์†Œ์ผ“์€ ๋ธŒ๋ผ์šฐ์ €์˜ ์‹๋ณ„์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐ๋œ๋‹ค.
์ฆ‰ ์†Œ์ผ“์„œ๋ฒ„๋Š” ๋กœ๊ทธ์ธ ๋œ ์‚ฌ์šฉ์ž์ธ์ง€ ์•Œ ์ˆ˜ ์—†๋‹ค.

์†Œ์ผ“์„œ๋ฒ„์—์„œ๋Š” ๋ณด๋‹ค ๋งŽ์€ ํŠธ๋ž˜ํ”ฝ์ด ์˜ˆ์ƒ๋˜์–ด
์†Œ์ผ“์— ๋Œ€ํ•œ ์„œ๋น„์Šค๋งŒ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ํ•˜๊ณ ์‹ถ์—ˆ๊ณ ,
๊ทธ๋ž˜์„œ ์ฒ˜์Œ์—” UserName๊ณผ Id๋ฅผ ์†Œ์ผ“ ์—ฐ๊ฒฐ ์‹œ ๋ณด๋‚ด์ฃผ์—ˆ๋‹ค.

socket handshake๋Š” http์—์„œ ๋™์ž‘ํ•˜๊ณ , ๋ณด์•ˆ์ ์ธ ์ธก๋ฉด์„ ๊ณ ๋ คํ•ด์ฃผ์—ˆ๋‹ค.
์‚ฌ์‹ค ์ƒ๊ฐํ•ด๋ณด๋‹ˆ ์• ์ดˆ์— jwt์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋ฅผ ์Šค์Šค๋กœ ๋ถ•๊ดด์‹œ์ผฐ๋‹ค...

4-3 ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ๋•Œ ์˜จ๋ผ์ธ๊ณผ ์˜คํ”„๋ผ์ธ์„ ๊ตฌ๋ณ„ํ•˜๋Š” ๋ฒ•์— ๋Œ€ํ•œ ๊ณ ๋ฏผ

  1. ํ…Œ์ด๋ธ”์— ๋กœ๊ทธ์ธ/๋กœ๊ทธ์•„์›ƒ ์ปฌ๋Ÿผ์„ ์ถ”๊ฐ€ํ•˜๊ณ , ๋กœ์ง ์ถ”๊ฐ€ํ•˜๊ธฐ
  2. ์†Œ์ผ“์œผ๋กœ ์˜จ/์˜คํ”„๋ผ์ธ ๊ตฌ๋ณ„์—†์ด ์ฑ„ํŒ…์ฒ˜๋ฆฌ

1๋ฒˆ์œผ๋กœ ์ฒ˜๋ฆฌ ์‹œ ๋กœ๊ทธ์•„์›ƒ์— ๋Œ€ํ•œ ๋กœ์ง์ด ์ƒ๋‹นํžˆ ๋ณต์žกํ•ด์ง„๋‹ค.
2๋ฒˆ์œผ๋กœ ํ•  ์‹œ ์†Œ์ผ“์—ฐ๊ฒฐ์€ ์ƒ๋Œ€๋ฐฉ์˜ ์˜จ/์˜คํ”„๋ผ์ธ ๊ด€๊ณ„์—†์ด ํด๋ผ์ด์–ธํŠธ๋Š” ์ ‘์†ํ•˜๊ณ  ์ด๋ฒคํŠธ๋ฅผ ์š”์ฒญํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ํฐ ๋‹จ์ ์ด ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ด ์ฑ„ํŒ…๋ฐ์ดํ„ฐ๋ฅผ ์†Œ์ผ“์ด๋ฒคํŠธ๋กœ ์ฒ˜๋ฆฌํ–ˆ๋‹ค.

5. ํ›„๊ธฐ

์†Œ์ผ“, ๋ฐฐํฌ์— ๋Œ€ํ•˜์—ฌ ๋งŽ์ด ๋ฐฐ์šด ํ”„๋กœ์ ํŠธ..
ํ”„๋ก ํŠธ์™€ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ๊ธฐ๋Šฅ์„ ๊พธ๋ ค๊ฐ€์•ผํ•˜๋Š” ์ง€ ์ƒ๊ฐ์„ ๋งŽ์ด ํ–ˆ๊ณ ,
api๋ฌธ์„œ์˜ ํ•„์š”์„ฑ, ์ดˆ๊ธฐ ์„œ๋น„์Šค ๊ตฌ์ƒ ์‹œ ๊ณ ๋ คํ•ด์•ผ๋˜๋Š” ๋ถ€๋ถ„์— ๋Œ€ํ•œ ์˜์—ญ์ด ๋Š˜์–ด๋‚ฌ๋‹ค

0๊ฐœ์˜ ๋Œ“๊ธ€