KR_CS_MSA - somaz94/DevOps-Engineer GitHub Wiki

Q2: ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜ (MSA)

์งˆ๋ฌธ: MSA๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์„ค๋ช…ํ•˜๊ณ , ๋ชจ๋†€๋ฆฌ์‹ ์•„ํ‚คํ…์ฒ˜์™€ ๋น„๊ตํ•˜์—ฌ ์žฅ๋‹จ์ ์„ ์„ค๋ช…ํ•˜์„ธ์š”. ํŠนํžˆ ๋А์Šจํ•œ ๊ฒฐํ•ฉ, ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹ , ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ์ „๋žต์„ ์ค‘์‹ฌ์œผ๋กœ ์„ค๋ช…ํ•˜์„ธ์š”.


์ฃผ์š” ์šฉ์–ด

์šฉ์–ด ์„ค๋ช…
MSA ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋…๋ฆฝ์ ์œผ๋กœ ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ์ž‘์€ ์„œ๋น„์Šค ์ง‘ํ•ฉ์œผ๋กœ ๊ตฌ์„ฑํ•˜๋Š” ์•„ํ‚คํ…์ฒ˜
Loosely Coupled ์„œ๋น„์Šค ๊ฐ„ ์˜์กด์„ฑ์„ ์ตœ์†Œํ™”ํ•œ ๋А์Šจํ•œ ๊ฒฐํ•ฉ ๊ตฌ์กฐ
API Gateway ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์„ ๊ฐ ์„œ๋น„์Šค๋กœ ๋ผ์šฐํŒ…ํ•˜๋Š” ๋‹จ์ผ ์ง„์ž…์ 
Service Discovery ์„œ๋น„์Šค ์ธ์Šคํ„ด์Šค์˜ ์œ„์น˜๋ฅผ ๋™์ ์œผ๋กœ ์ฐพ๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜
Circuit Breaker ์žฅ์•  ์„œ๋น„์Šค๋กœ์˜ ์š”์ฒญ์„ ์ฐจ๋‹จํ•˜์—ฌ ์ „ํŒŒ๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ํŒจํ„ด
Saga Pattern ๋ถ„์‚ฐ ํŠธ๋žœ์žญ์…˜์„ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ํŒจํ„ด
Polyglot Persistence ์„œ๋น„์Šค๋ณ„๋กœ ์ตœ์ ์˜ DB ๊ธฐ์ˆ ์„ ์„ ํƒํ•˜๋Š” ์ „๋žต

Monolithic vs Microservices

Monolithic:                        Microservices:
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”         โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚   Single Application   โ”‚         โ”‚  User    โ”‚ โ”‚  Order   โ”‚ โ”‚  Payment โ”‚
โ”‚  - User Service        โ”‚         โ”‚  Service โ”‚ โ”‚  Service โ”‚ โ”‚  Service โ”‚
โ”‚  - Order Service       โ”‚   โ†’     โ”‚  (Node)  โ”‚ โ”‚  (Java)  โ”‚ โ”‚ (Python) โ”‚
โ”‚  - Payment Service     โ”‚         โ”‚  UserDB  โ”‚ โ”‚  OrderDB โ”‚ โ”‚  PayDB   โ”‚
โ”‚  - Single Database     โ”‚         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                   โ†‘ API Gateway โ†‘

Monolithic vs MSA ๋น„๊ต

ํ•ญ๋ชฉ Monolithic Microservices
๋ฐฐํฌ ์ „์ฒด ์žฌ๋ฐฐํฌ ์„œ๋น„์Šค๋ณ„ ๋…๋ฆฝ ๋ฐฐํฌ
ํ™•์žฅ ์ˆ˜์ง ํ™•์žฅ (Scale-Up) ์ˆ˜ํ‰ ํ™•์žฅ (Scale-Out)
๊ธฐ์ˆ  ์Šคํƒ ๋‹จ์ผ ์„œ๋น„์Šค๋ณ„ ์ตœ์  ์„ ํƒ ๊ฐ€๋Šฅ
์žฅ์•  ์˜ํ–ฅ ์ „์ฒด ์‹œ์Šคํ…œ ๋‹ค์šด ํŠน์ • ์„œ๋น„์Šค๋งŒ ์˜ํ–ฅ
๊ฐœ๋ฐœ ์ดˆ๊ธฐ ๋น ๋ฆ„ (๊ฐ„๋‹จ) ๋А๋ฆผ (์ธํ”„๋ผ ๊ตฌ์ถ• ํ•„์š”)
์šด์˜ ๋ณต์žก๋„ ๋‚ฎ์Œ ๋†’์Œ (๋ชจ๋‹ˆํ„ฐ๋ง, ๋กœ๊น…, ์ถ”์ )
๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ ๊ฐ•ํ•œ ์ผ๊ด€์„ฑ (ACID) ์ตœ์ข… ์ผ๊ด€์„ฑ (BASE)

์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹ 

๋™๊ธฐ ํ†ต์‹  (Synchronous)

  • REST API: ๊ฐ„๋‹จํ•˜๊ณ  ์ง๊ด€์ . ํƒ€์ž„์•„์›ƒ ๋ฐ Cascade Failure ์œ„ํ—˜
  • gRPC: Protocol Buffers ๊ธฐ๋ฐ˜์œผ๋กœ ๋น ๋ฆ„, Type-Safe. ๋””๋ฒ„๊น… ์–ด๋ ค์›€

๋น„๋™๊ธฐ ํ†ต์‹  (Asynchronous)

  • Message Queue (Kafka, RabbitMQ): ์„œ๋น„์Šค ๊ฐ„ ์™„์ „ํ•œ ๋””์ปคํ”Œ๋ง, ์žฅ์•  ๊ฒฉ๋ฆฌ
  • ๋‹จ์ : ๋ฉ”์‹œ์ง€ ์ˆœ์„œ/์ค‘๋ณต ์ฒ˜๋ฆฌ ๋ณต์žก, Eventual Consistency

๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ์ „๋žต

Database per Service

๊ฐ ์„œ๋น„์Šค๊ฐ€ ์ž์ฒด DB๋ฅผ ์†Œ์œ  (Polyglot Persistence).

  • ์žฅ์ : ์Šคํ‚ค๋งˆ ๋ณ€๊ฒฝ ๋…๋ฆฝ, ์žฅ์•  ๊ฒฉ๋ฆฌ, ์ตœ์  DB ์„ ํƒ ๊ฐ€๋Šฅ
  • ๋‹จ์ : JOIN ๋ถˆ๊ฐ€ โ†’ API ์กฐํ•ฉ ํ•„์š”, ๋ถ„์‚ฐ ํŠธ๋žœ์žญ์…˜ ๋ฌธ์ œ

Saga Pattern (๋ถ„์‚ฐ ํŠธ๋žœ์žญ์…˜)

๊ฐ ์„œ๋น„์Šค๊ฐ€ ๋กœ์ปฌ ํŠธ๋žœ์žญ์…˜์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์ด๋ฒคํŠธ๋กœ ๋‹ค์Œ ์„œ๋น„์Šค๋ฅผ ํŠธ๋ฆฌ๊ฑฐ. ์‹คํŒจ ์‹œ ๋ณด์ƒ ํŠธ๋žœ์žญ์…˜(Compensating Transaction)์œผ๋กœ ๋กค๋ฐฑ.

์ฃผ๋ฌธ ์ƒ์„ฑ โ†’ ์žฌ๊ณ  ๊ฐ์†Œ โ†’ ๊ฒฐ์ œ ์ฒ˜๋ฆฌ
์‹คํŒจ ์‹œ: ๊ฒฐ์ œ ์‹คํŒจ โ†’ ์žฌ๊ณ  ๋ณต๊ตฌ โ†’ ์ฃผ๋ฌธ ์ทจ์†Œ

MSA ํ•„์ˆ˜ ํŒจํ„ด

ํŒจํ„ด ์—ญํ• 
API Gateway ๋ผ์šฐํŒ…, ์ธ์ฆ/์ธ๊ฐ€, Rate Limiting, ๋กœ๊น… ๋‹จ์ผํ™”
Service Discovery ์„œ๋น„์Šค ์ธ์Šคํ„ด์Šค ์œ„์น˜ ๋™์  ํƒ์ƒ‰ (Eureka, Consul)
Circuit Breaker ์žฅ์•  ์„œ๋น„์Šค ์ฐจ๋‹จ โ†’ Fallback ์‘๋‹ต (Resilience4j)
Distributed Tracing ์š”์ฒญ ํ๋ฆ„ ์ถ”์  (Jaeger, Zipkin)

MSA ๋„์ž… ํŒ๋‹จ ๊ธฐ์ค€

์ ํ•ฉ ๋ถ€์ ํ•ฉ
ํŠธ๋ž˜ํ”ฝ์ด ๊ธ‰์ฆํ•˜๋Š” ํŠน์ • ๊ธฐ๋Šฅ ์กด์žฌ ์Šคํƒ€ํŠธ์—… ์ดˆ๊ธฐ (๋น ๋ฅธ ํ”„๋กœํ† ํƒ€์ž… ํ•„์š”)
ํŒ€ ๊ทœ๋ชจ 10๋ช… ์ด์ƒ ํŒ€ ๊ทœ๋ชจ 5๋ช… ์ดํ•˜
๋…๋ฆฝ์  ๋ฐฐํฌ ์ฃผ๊ธฐ ํ•„์š” (์ผ 1ํšŒ ์ด์ƒ) DevOps ์ธํ”„๋ผ ์—†์Œ

์ฐธ๊ณ 

โš ๏ธ **GitHub.com Fallback** โš ๏ธ