MSA vs Monolithic architecture

YJSยท2023๋…„ 11์›” 28์ผ
0

๐Ÿค“์˜ค๋Š˜์˜ ๊ณต๋ถ€ ์ฃผ์ œ: MSA, Monolithic architecture๐Ÿค“

Q. ๋ชจ๋†€๋ฆฌ์‹ ๊ตฌ์กฐ์™€ MSA์˜ ์ฐจ์ด๋Š” ๋ฌด์—‡์ธ๊ฐ€?

A. ๋ชจ๋†€๋ฆฌ์‹(Monolithic) ์•„ํ‚คํ…์ฒ˜์™€ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค(Microservices) ์•„ํ‚คํ…์ฒ˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์‹œ์Šคํ…œ์„ ์„ค๊ณ„ํ•˜๊ณ  ๊ตฌ์ถ•ํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ์ฃผ์š” ์ ‘๊ทผ ๋ฐฉ์‹

1. ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์กฐ:

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

2. ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜๊ณผ ํ†ตํ•ฉ:

  • ๋ชจ๋†€๋ฆฌ์‹: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ชจ๋“  ๋ถ€๋ถ„์ด ๊ฐ™์€ ์ฝ”๋“œ๋ฒ ์ด์Šค์— ์žˆ์œผ๋ฏ€๋กœ, ์ปดํฌ๋„ŒํŠธ ๊ฐ„์˜ ํ†ตํ•ฉ์ด ๋น„๊ต์  ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํฐ ๊ทœ๋ชจ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” ๋ชจ๋“  ๋ถ€๋ถ„์„ ์ดํ•ดํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค: ๊ฐ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ๋ฐฐํฌ๋˜๊ณ  ์—…๋ฐ์ดํŠธ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์„œ๋น„์Šค ๊ฐ„์˜ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜๊ณผ ํ†ตํ•ฉ์ด ์ค‘์š”ํ•œ ๊ณผ์ œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. API๋ฅผ ํ†ตํ•œ ์™ธ๋ถ€ ํ†ต์‹ ์ด ์ผ๋ฐ˜์ ์ด๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ๊ฐ ์„œ๋น„์Šค๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ๊ฐœ๋ฐœ, ๋ฐฐํฌ, ํ™•์žฅ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3.๋ฐฐํฌ ๋ฐ ํ™•์žฅ์„ฑ:

  • ๋ชจ๋†€๋ฆฌ์‹: ์ „์ฒด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ•œ ๋ฒˆ์— ๋ฐฐํฌํ•ด์•ผ ํ•˜๋ฉฐ, ํŠน์ • ๋ถ€๋ถ„๋งŒ ํ™•์žฅํ•˜๊ธฐ๊ฐ€ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ™•์žฅ์„ฑ์ด ๋ถ€์กฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค: ๊ฐ ์„œ๋น„์Šค๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ๋ฐฐํฌ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ•„์š”ํ•œ ์„œ๋น„์Šค๋งŒ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ์ „์ฒด ์‹œ์Šคํ…œ์ด ๋” ํšจ์œจ์ ์œผ๋กœ ํ™•์žฅ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4. ์œ ์ง€๋ณด์ˆ˜ ๋ฐ ํ™•์žฅ์„ฑ:

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

์ด๋Ÿฌํ•œ ์ฐจ์ด๋กœ ์ธํ•ด ๋ชจ๋†€๋ฆฌ์‹ ์•„ํ‚คํ…์ฒ˜๋Š” ๊ฐ„๋‹จํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐ ์ดˆ๊ธฐ ๋‹จ๊ณ„์˜ ํ”„๋กœ์ ํŠธ์— ์ ํ•ฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜๋Š” ๋Œ€๊ทœ๋ชจ ๋ฐ ๋ณต์žกํ•œ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜ํ•˜๋Š” ๋ฐ ๋” ์ ํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„ ํƒ์€ ํ”„๋กœ์ ํŠธ์˜ ๊ทœ๋ชจ, ์š”๊ตฌ ์‚ฌํ•ญ, ํŒ€์˜ ๊ธฐ์ˆ ์  ์„ ํ˜ธ๋„ ๋“ฑ์— ๋”ฐ๋ผ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋†€๋ฆฌ์‹ ๊ตฌ์กฐ์˜ ์˜ˆ์‹œ

/my-monolith-app
|-- /src
|   |-- /components
|   |-- /services
|   |-- /utils
|   |-- /...
|-- /public
|-- package.json
|-- webpack.config.js
|-- ...

MSA ๊ตฌ์กฐ์˜ ์˜ˆ์‹œ

/msa-project
|-- /service1
|   |-- /src
|   |   |-- /components
|   |   |-- /models
|   |   |-- /routes
|   |   |-- /tests
|   |   |-- ...
|   |-- package.json
|   |-- Dockerfile
|   |-- ...
|-- /service2
|   |-- /src
|   |   |-- /components
|   |   |-- /models
|   |   |-- /routes
|   |   |-- /tests
|   |   |-- ...
|   |-- package.json
|   |-- Dockerfile
|   |-- ...
|-- /service3
|   |-- /src
|   |   |-- /components
|   |   |-- /models
|   |   |-- /routes
|   |   |-- /tests
|   |   |-- ...
|   |-- package.json
|   |-- Dockerfile
|   |-- ...
|-- /common
|   |-- /src
|   |   |-- /constants
|   |   |-- /helpers
|   |   |-- /utils
|   |   |-- ...
|   |-- package.json
|   |-- ...
|-- /gateway
|   |-- /src
|   |   |-- /routes
|   |   |-- /middlewares
|   |   |-- ...
|   |-- package.json
|   |-- Dockerfile
|   |-- ...
|-- docker-compose.yml
|-- ...
profile
์šฐ๋‹นํƒ•ํƒ• ๊ฐœ๋ฐœ ์ผ๊ธฐ

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