๐Ÿš€ ๊ธฐํš๋‹จ๊ณ„

๐Ÿ“Œ ์œ ๋‹ˆํ‹ฐ์—๋„ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์žˆ๋‹ค. ๋ณดํ†ต ํฌํ†ค ํด๋ผ์šฐ๋“œ๋ฅผ ์„œ๋ฒ„๋กœ ๋‘๋Š”๋ฐ ๋ฌด๋ฃŒ ๊ณ„์ •์€ 20 CCU(Concurrent connected User, ๋™์‹œ์ ‘์†์ž)๋ฐ–์— ์ง€์›์•ˆํ•ด์ค€๋‹ค.

  • 20๋ช…์”ฉ ์—ฌ๋Ÿฌ ๋ฐฉ์„ ๋งŒ๋“œ๋Š”๊ฒŒ ๊ฐ€๋Šฅํ•œ๊ฐ€?

๐Ÿ‘‰ ๋ฌด๋ฃŒ ๊ณ„์ •์€ ๋ถˆ๊ฐ€๋Šฅ / ๋‹ค๋งŒ, 20๋ช…์ด ์žˆ๋Š” ๋ฐฉ์„ ๋˜ ๋‚˜๋ˆŒ ์ˆ˜๋Š” ์žˆ์Œ


๐Ÿ“Œ ํฌํ†ค ํด๋ผ์šฐ๋“œ๋Š” DB์™€ ์—ฐ๊ฒฐ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. Unity๋Š” DB์™€ ์—ฐ๊ฒฐ์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ local์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ณด์•ˆ์ƒ์˜ ์ด์Šˆ๊ฐ€ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์„œ๋ฒ„์— ์ €์žฅ์„ ํ•ด์ค˜์•ผ ํ•˜๋Š”๋ฐ ์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ๋Š” ๋ชจ๋ฐ”์ผ์ด ์œ ๋‹ˆํ‹ฐ๊ฐ€ ์•„๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ์œ ๋‹ˆํ‹ฐ์—์„œ ๋งŒ๋“  3D ์บ๋ฆญํ„ฐ ๋ชจ๋ธ๊ณผ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋ชจ๋ฐ”์ผ์—์„œ๋„ ๋ณด์—ฌ์ฃผ๋ ค๊ณ  ํ•˜๋Š”๋ฐ 3D ๋ชจ๋ธ์€ OBJํŒŒ์ผ๋กœ ์ €์žฅํ•˜์—ฌ JSON์œผ๋กœ ์ „ํ™˜๊ฐ€๋Šฅํ•˜๋‚˜ ์• ๋‹ˆ๋ฉ”์ด์…˜๊นŒ์ง€ ํฌํ•จํ•˜๋ฉด FBXํŒŒ์ผ๋กœ ์ €์žฅ๋˜๋ฉฐ ์ด๋ฅผ Android(์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ)์—์„œ ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ๋ฐฉ๋ฒ•์ด ์—†๋‹ค.

โœ… 3D ์บ๋ฆญํ„ฐ ๋ชจ๋ธ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  ์•ˆ๋“œ๋กœ์ด๋“œ ๋ชจ์…˜์„ ์ถ”๊ฐ€ํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. => ์บ๋ฆญํ„ฐ์˜ ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ๋“ค์–ด๊ฐ€ ์žˆ๋Š”๊ฒƒ ์ฒ˜๋Ÿผ ๋ณด์ด๊ธฐ

  • ์ €์žฅ์€ ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ? Unity์—์„œ ๋งŒ๋“  ํŒŒ์ผ์„ ec2์˜ s3์— ์ €์žฅํ•ด๋‘๊ณ  ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ๋งž๋‚˜? ํŒŒ์ผ์˜ ๋ณ€๋™์‚ฌํ•ญ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ๋Š” ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ?

  • ์œ ์ €์˜ ์ž์œจ์„ฑ์„ ์ฃผ๋Š”๊ฒŒ ๊ฐ€๋Šฅํ•œ๊ฐ€?

๐Ÿ‘‰ ๋ชจ๋ฐ”์ผ์—์„œ OBJํŒŒ์ผ์„ JSON์œผ๋กœ ์ˆ˜์ •ํ•  ๋ฐฉํ–ฅ์œผ๋กœ ์žก๊ณ  ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๋˜๋ฉด ์ €์žฅ๊ณต๊ฐ„์— ์ €์žฅ๋œ OBJํŒŒ์ผ์˜ ์ฃผ์†Œ๊ฐ’์„ DB์— ์ €์žฅํ•ด ๋‘๊ณ  ์žˆ๋‹ค๊ฐ€ API๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ, ํŒŒ์ผ์ „ํ™˜์„ ํ†ตํ•ด ๋ชจ๋ฐ”์ผ ํ™”๋ฉด์— 3D ์ผ€๋ฆญํ„ฐ๋ฅผ ๋„์šธ ์ˆ˜ ์žˆ๋‹ค.


๐Ÿ“Œ DB์˜ ๋ถ€ํ•˜๋ฅผ ์ค„์ผ๋ฐฉ๋ฒ•

๐Ÿ‘‰ ๋กœ๊ทธ์•„์›ƒ ๊ด€๋ จ JWT refreshtoken์€ Redis๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

๐Ÿ‘‰ MSA (MircroService Architecture), spring cloud, eureka ์‚ฌ์šฉ

[ ๋ฐฐ๋ฏผ API GATEWAY โ€“ spring cloud zuul ]

[ MSA ์™€ DDD ]

๐Ÿ‘‰ Master, Slave DB

[ DB : Master & Slave ๊ฐœ๋…์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž ]


๐Ÿ“Œ ๋ฐฐํฌ ์‹œ ์œ ๋‹ˆํ‹ฐ, ๋ชจ๋ฐ”์ผ, ์›Œ์น˜๊ฐ€ ํ•œ๊บผ๋ฒˆ์— ์ค‘๋‹จ์ด ๋˜์ง€ ์•Š์•˜์œผ๋ฉด ํ•œ๋‹ค. ์œ ์ง€๋ณด์ˆ˜ ๋ฐ ํ˜‘์—…, ํŠนํžˆ ์•„์ฃผ ์ž‘์€ ์ˆ˜์ •์ด ์ผ์–ด๋‚˜๋„ ์ „์ฒด ์„œ๋น„์Šค๋ฅผ ์žฌ๊ธฐ๋™ ํ•ด์•ผ ํ•˜๋Š” ๋‹จ์ 

๐Ÿ‘‰ MSA (MircroService Architecture) ์‚ฌ์šฉ


๐Ÿ“Œ MSA ์‚ฌ์šฉ์‹œ swagger๊ฐ€ ๋‹ค ๋‹ค๋ฅธ ์ฃผ์†Œ๊ฐ€ ๋˜๋‚˜?

๐Ÿ‘‰ Spring restDocs์™€ Swagger UI ์กฐํ•ฉ


๐Ÿ“Œ์•ฑ๊ณผ ์œ ๋‹ˆํ‹ฐ์—์„œ accesstoken์„ reissueํ–ˆ์„ ๋•Œ์˜ ๋ฌธ์ œ์  (๋‹ค์ค‘ ๋””๋ฐ”์ด์Šค ๋กœ๊ทธ์ธ)

  • ๋งŒ์•ฝ, ์•ฑ๊ณผ ์œ ๋‹ˆํ‹ฐ๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์•ฑ์—์„œ ํ† ํฐ์ด ๋งŒ๋ฃŒ๋˜์–ด์„œ ์ƒˆ๋กœ ๋ฐœ๊ธ‰๋ฐ›๋Š”๋‹ค๋ฉด ์œ ๋‹ˆํ‹ฐ์—์„œ๋Š” ์˜ˆ์ „ ํ† ํฐ์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฏ€๋กœ authorization ๊ด€๋ จ ์—๋Ÿฌ๊ฐ€ ๋œฐํ…๋ฐ

๐Ÿ‘‰ํด๋ผ์ด์–ธํŠธ ํƒ€์ž…์„ HTTP ํ—ค๋”์— ์š”์ฒญํ•˜๊ธฐ

JWT ํ† ํฐ์„ ์—ฌ๋Ÿฌ ๋””๋ฐ”์ด์Šค์—์„œ ๋™์‹œ์— ๋กœ๊ทธ์ธํ•˜๋ ค๋ฉด, ํด๋ผ์ด์–ธํŠธ ํƒ€์ž…(์›น, ๋ชจ๋ฐ”์ผ, ์œ ๋‹ˆํ‹ฐ ๋“ฑ)์— ๋”ฐ๋ผ ํ† ํฐ์„ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋‹ค์Œ์€ ์ด๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค:

  • ๋””๋ฐ”์ด์Šค ์ •๋ณด๋ฅผ ์š”์ฒญ์— ํฌํ•จ์‹œํ‚ค๊ธฐ: ๋กœ๊ทธ์ธ ์š”์ฒญ ์‹œ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์–ด๋–ค ํƒ€์ž…์˜ ๋””๋ฐ”์ด์Šค์—์„œ ์˜ค๋Š”์ง€ ์ •๋ณด๋ฅผ ํ•จ๊ป˜ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, HTTP ํ—ค๋”๋‚˜ ๋ณ„๋„์˜ ํ•„๋“œ๋กœ ์ด ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ† ํฐ ์ƒ์„ฑ ์‹œ ๋””๋ฐ”์ด์Šค ์ •๋ณด ํฌํ•จํ•˜๊ธฐ: JWT ํ† ํฐ์€ ์ผ์ข…์˜ JSON ๊ฐ์ฒด๋กœ์„œ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ •๋ณด(payload)๋ฅผ ๋‹ด์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์„œ๋ฒ„์—์„œ๋Š” ๋กœ๊ทธ์ธ ์š”์ฒญ ์‹œ ๋ฐ›์€ ๋””๋ฐ”์ด์Šค ์ •๋ณด๋ฅผ ์ด payload์— ํฌํ•จํ•˜์—ฌ ํ† ํฐ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • ๋””๋ฐ”์ด์Šค๋ณ„๋กœ ํ† ํฐ ์ €์žฅ ๋ฐ ๊ด€๋ฆฌํ•˜๊ธฐ: ์„œ๋ฒ„๋Š” ๊ฐ๊ฐ์˜ ๋””๋ฐ”์ด์Šค ํƒ€์ž…๋ณ„๋กœ ์ƒ์„ฑ๋œ JWT ํ† ํฐ๋“ค์„ ๊ด€๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์‚ฌ์šฉ์ž ID์™€ ํ•จ๊ป˜ ํ•ด๋‹น ID๊ฐ€ ๋ฐœ๊ธ‰ํ•œ ๊ฐ๊ฐ์˜ ์žฅ์น˜๋ณ„ JWT ํ† ํฐ๋“ค์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์š”์ฒญ ๊ฒ€์ฆ ์‹œ ๋””๋ฐ”์ด์Šค ํ™•์ธํ•˜๊ธฐ: ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์„ ๋ฐ›์•˜์„ ๋•Œ ํ•ด๋‹น ์š”์ฒญ์˜ JWT ํ† ํฐ๊ณผ HTTP Header ํ˜น์€ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ์ „๋‹ฌ๋œ ์žฅ์น˜์ •๋ณด๊ฐ€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
    ์œ„์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•œ๋‹ค๋ฉด, ๋™์ผํ•œ ์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค๋ฅธ ์žฅ์น˜์—์„œ ๋กœ๊ทธ์ธ ํ•  ๊ฒฝ์šฐ ๊ฐ๊ฐ ๋‹ค๋ฅธ JWTํ† ํฐ๋“ค์„ ๋ฐœ๊ธ‰ ๋ฐ›๊ฒŒ ๋˜๋ฉฐ ์„œ๋ฒ„๋Š” ์ด๋“ค ๊ฐฑ์‹  ํ˜น์€ ๋งŒ๋ฃŒ ๋“ฑ ์ƒํƒœ๊ด€๋ฆฌ๋„ ๊ฐœ๋ณ„์ ์œผ๋กœ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ‘‰ ์ž์„ธํ•œ ์‚ฌํ•ญ์€ [ ๋‹ค์ค‘ ๋””๋ฐ”์ด์Šค ๋™์‹œ ๋กœ๊ทธ์ธ๊ณผ JWT TOKEN (1) ] ์—์„œ ํ™•์ธํ•œ๋‹ค.

โœ… ์ตœ์ข… ๊ฒฐ์ •: Sec-Ch-Ua-Platform

๐Ÿ“Œ ์œ ๋‹ˆํ‹ฐ์™€ ์›Œ์น˜๋Š” ์„œ๋ฒ„ ๊ฐ„์˜ ํ†ต์‹  ์‹œ์—๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์‚ฌ์šฉ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— Sec-Ch-UA-Platform๊ณผ ๊ฐ™์€ ๋ธŒ๋ผ์šฐ์ € ๊ด€๋ จ HTTP ํ—ค๋”๋Š” ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์›น, ์œ ๋‹ˆํ‹ฐ, ๋ชจ๋ฐ”์ผ, ์›Œ์น˜์ธ์ง€ ์„œ๋ฒ„์—์„œ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์€?

โœ… ๋จผ์ €, http ํ—ค๋”์˜ Sec-Ch-Ua-Platform์„ ์ฝ๋Š”๋‹ค. Linux, Windows, mac OS, Chrome OS ์ด๋ฉด ์›น์ด๋ผ ํŒ๋‹จํ•˜๊ณ  accesstoken๊ฐ’๊ณผ refreshtoken์Œ์„ ๋ฐœ๊ธ‰ํ•œ๋‹ค. Android์˜ ๊ฒฝ์šฐ ๋ชจ๋ฐ”์ผ์ด๋ผ๊ณ  ํŒ๋‹จํ•˜๊ณ  accesstoken๊ฐ’๊ณผ refreshtoken์Œ์„ ๋ฐœ๊ธ‰ํ•œ๋‹ค. null ๊ฐ’์ด๋ฉด unity๋ผ๊ณ  ํŒ๋‹จํ•˜๊ณ  accesstoken๊ฐ’๊ณผ refreshtoken์Œ์„ ๋ฐœ๊ธ‰ํ•œ๋‹ค. token์ด ํ•„์š”์—†๋Š” ์›Œ์น˜์˜ ๊ฒฝ์šฐ api๋ฅผ ๋”ฐ๋กœ ์ง€์ •ํ•˜์—ฌ apigate์—์„œ filter๋ฅผ ๋ฏธ์ ์šฉํ•˜๋„๋ก ํ•œ๋‹ค.

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