MSA

์žฅํ˜„์ง„ยท2022๋…„ 11์›” 28์ผ
0

๐Ÿ’กMSA?

MicroService Architecture์˜ ์ค„์ž„๋ง

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

๐Ÿ”บMonolithic Architecture ํ•œ๊ณ„

  • ๋ถ€๋ถ„ ์žฅ์• ๊ฐ€ ์ „์ฒด ์„œ๋น„์Šค์˜ ์žฅ์• ๋กœ ํ™•๋Œ€๋  ์ˆ˜ ์žˆ๋‹ค.

    • ๊ฐœ๋ฐœ์ž์˜ ์ž˜๋ชป๋œ ์ฝ”๋“œ ๋ฐฐํฌ ๋˜๋Š” ๊ฐ‘์ž‘์Šค๋Ÿฐ ํŠธ๋ž˜ํ”ฝ ์ฆ๊ฐ€๋กœ ์ธํ•ด ์„ฑ๋Šฅ์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ์„ ๋•Œ, ์„œ๋น„์Šค ์ „์ฒด์˜ ์žฅ์• ๋กœ ํ™•๋Œ€๋  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ถ€๋ถ„์ ์ธ *Scale-out(์—ฌ๋Ÿฌ server๋กœ ๋‚˜๋ˆ„์–ด ์ผ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹)์ด ์–ด๋ ต๋‹ค.

    • Monolithic Architecture์—์„œ๋Š” ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋‹ค๋ฅธ ๋ชจ๋“  ์„œ๋น„์Šค๊ฐ€ Scale-out๋˜์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ถ€๋ถ„ Scale-out์ด ์–ด๋ ต๋‹ค.
  • ์„œ๋น„์Šค์˜ ๋ณ€๊ฒฝ์ด ์–ด๋ ต๊ณ , ์ˆ˜์ • ์‹œ ์žฅ์• ์˜ ์˜ํ–ฅ๋„ ํŒŒ์•…์ด ํž˜๋“ค๋‹ค.

    • ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ•˜๋‚˜์˜ ์„œ๋น„์Šค์— ๊ฐ•ํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜์ •์— ๋Œ€ํ•œ ์˜ํ–ฅ๋„ ํŒŒ์•…์ด ํž˜๋“ค๋‹ค.
  • ๋ฐฐํฌ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค.

    • ์ตœ๊ทผ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ๋ฐฉ๋ฒ•์€ CI/CD๋ฅผ ํ†ตํ•œ ๊ฐœ๋ฐœ๋ถ€ํ„ฐ ๋ฐฐํฌ๊นŒ์ง€ ๋น ๋ฅด๊ฒŒ ๋ฐ˜์˜ํ•˜๋Š” ์ถ”์„ธ์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทœ๋ชจ๊ฐ€ ์ปค์ง์— ๋”ฐ๋ผ ์ž‘์€ ๋ณ€๊ฒฝ์—๋„ ๋†’์€ ์ˆ˜์ค€์˜ ํ…Œ์ŠคํŠธ ๋น„์šฉ์ด ๋ฐœ์ƒํ•˜๊ธฐ๋„ ํ•˜๋ฉฐ, ๋งŽ์€ ์‚ฌ๋žŒ์ด ํ•˜๋‚˜์˜ ์‹œ์Šคํ…œ์„ ๊ฐœ๋ฐœํ•˜์—ฌ ๋ฐฐํฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ๋ฐ–์— ์—†๋‹ค.
  • ํ•œ Framework์™€ ์–ธ์–ด์— ์ข…์†์ ์ด๋‹ค.

    • Spring framework๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, blockchain ์—ฐ๋™ ๋ชจ๋“ˆ์„ ์ถ”๊ฐ€ํ•  ๋•Œ node.js๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋ฉฐ ๊ฐ•์„ธ์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ java๋ฅผ ์ด์šฉํ•˜์—ฌ ํ•ด๋‹น ๋ชจ๋“ˆ์„ ์ž‘์„ฑํ•  ์ˆ˜ ๋ฐ–์— ์—†๋‹ค. ์„ ์ •ํ–ˆ๋˜ framework๊ฐ€ Spring์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๐Ÿ”นMSA์˜ ์žฅ์ 

  • ๊ฐ๊ฐ์˜ ์„œ๋น„์Šค๋Š” ๋ชจ๋“ˆํ™”๊ฐ€ ๋˜์–ด์žˆ์œผ๋ฉฐ ์ด๋Ÿฌํ•œ ๋ชจ๋“ˆ๊นŒ๋ฆฌ๋Š” RPC ๋˜๋Š” message-driven API๋“ฑ์„ ์ด์šฉํ•˜์—ฌ ํ†ต์‹ ํ•œ๋‹ค.
    ์ด๋Ÿฌํ•œ MSA๋Š” ๊ฐ๊ฐ ๊ฐœ๋ณ„์˜ ์„œ๋น„์Šค ๊ฐœ๋ฐœ์„ ๋น ๋ฅด๊ฒŒ ํ•˜๋ฉฐ, ์œ ์ง€๋ณด์ˆ˜๋„ ์‰ฝ๊ฒŒํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

  • ํŒ€ ๋‹จ์œ„๋กœ ์ ์ ˆํ•œ ์ˆ˜์ค€์—์„œ ๊ธฐ์ˆ  ์Šคํƒ์„ ๋‹ค๋ฅด๊ฒŒ ๊ฐ€์ ธ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.
    ํšŒ์‚ฌ๊ฐ€ java์˜ spring ๊ธฐ๋ฐ˜์ด๋ผ๋„ MSA๋ฅผ ์ ์šฉํ•˜๋ฉด node.js๋กœ ๋ธ”๋ก์ฒด์ธ ๊ฐœ๋ฐœ ๋ชจ๋“ˆ์„ ์—ฐ๋™ํ•จ์— ๋ฌด๋ฆฌ๊ฐ€ ์—†๋‹ค.

  • ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋Š” ์„œ๋น„์Šค๋ณ„๋กœ ๋…๋ฆฝ์  ๋ฐฐํฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
    ๋”ฐ๋ผ์„œ ์ง€์†์ ์ธ ๋ฐฐํฌ CD๋„ ๋ชจ๋†€๋กœ์‹์— ๋น„ํ•ด์„œ ๊ฐ€๋ณ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋Š” ๊ฐ๊ฐ ์„œ๋น„์Šค์˜ ๋ถ€ํ•˜์— ๋”ฐ๋ผ ๊ฐœ๋ณ„์ ์œผ๋กœ scale-out์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
    ๋ฉ”๋ชจ๋ฆฌ, CPU์ ์œผ๋กœ ์ƒ๋‹น๋ถ€๋ถ„ ์ด๋“์ด ๋œ๋‹ค.

๐Ÿ”ธMSA์˜ ๋‹จ์ 

  • MSA๋Š” ๋ชจ๋†€๋ฆฌ์‹์— ๋น„ํ•ด ์ƒ๋Œ€์ ์œผ๋กœ ๋งŽ์ด ๋ณต์žกํ•˜๋‹ค.
    ์„œ๋น„์Šค๊ฐ€ ๋ชจ๋‘ ๋ถ„์‚ฐ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์ž๋Š” ๋‚ด๋ถ€ ์‹œ์Šคํ…œ์˜ ํ†ต์‹ ์„ ์–ด๋–ป๊ฒŒ ๊ฐ€์ ธ๊ฐ€์•ผ ํ• ์ง€ ์ •ํ•ด์•ผํ•œ๋‹ค. ๋˜ํ•œ, ํ†ต์‹ ์˜ ์žฅ์• ์™€ ์„œ๋ฒ„์˜ ๋ถ€ํ•˜ ๋“ฑ์ด ์žˆ์„ ๊ฒฝ์šฐ ์–ด๋–ป๊ฒŒ transaction์„ ์œ ์ง€ํ• ์ง€ ๊ฒฐ์ •ํ•˜๊ณ  ๊ตฌํ˜„ํ•ด์•ผํ•œ๋‹ค.

  • ๋ชจ๋†€๋ฆฌ์‹์—์„œ๋Š” ๋‹จ์ผ ํŠธ๋žœ์žญ์…˜์„ ์œ ์ง€ํ•˜๋ฉด ๋์ง€๋งŒ MSA์—์„œ๋Š” ๋น„์ฆˆ๋‹ˆ์Šค์— ๋Œ€ํ•œ DB๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์„œ๋น„์Šค๋„ ๊ฐ๊ธฐ ๋‹ค๋ฅด๊ณ , ์„œ๋น„์Šค์˜ ์—ฐ๊ฒฐ์„ ์œ„ํ•ด์„œ๋Š” ํ†ต์‹ ์ด ํฌํ•จ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํŠธ๋žœ์žญ์…˜์„ ์œ ์ง€ํ•˜๋Š”๊ฒŒ ์–ด๋ ต๋‹ค.

  • ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๊ฐ€ ์–ด๋ ต๋‹ค.
    ๊ฐœ๋ฐœ ํ™˜๊ฒฝ๊ณผ ์‹ค์ œ ์šด์˜ํ™˜๊ฒฝ์„ ๋™์ผํ•˜๊ฒŒ ๊ฐ€์ ธ๊ฐ€๋Š” ๊ฒƒ์ด ์‰ฝ์ง€ ์•Š๋‹ค.

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