[CS] MSA

박원쀀·2025λ…„ 5μ›” 20일

MSA

λͺ©λ‘ 보기
1/9

πŸ“˜ 1.MSA (Microservices Architecture) κ°œλ… 정리

  • MSA(λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜)λŠ” ν•˜λ‚˜μ˜ κ±°λŒ€ν•œ μ‹œμŠ€ν…œμ„ μ—¬λŸ¬ 개의 독립적인 μ„œλΉ„μŠ€ λ‹¨μœ„λ‘œ λ‚˜λˆ„μ–΄ κ΅¬μ„±ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€.
  • 각 μ„œλΉ„μŠ€λŠ” νŠΉμ • λΉ„μ¦ˆλ‹ˆμŠ€ κΈ°λŠ₯을 μˆ˜ν–‰ν•˜λ©°, λ…λ¦½μ μœΌλ‘œ 배포되며, κ°œλ³„ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό κ°–λŠ” κ²½μš°κ°€ λ§ŽμŠ΅λ‹ˆλ‹€.
  • μ„œλΉ„μŠ€ κ°„μ˜ 톡신은 주둜 HTTP/HTTPS, λ©”μ‹œμ§€ 큐 등을 톡해 μ΄λ£¨μ–΄μ§‘λ‹ˆλ‹€.

βœ… MSA의 μž₯점

  • μœ μ—°μ„± : μ„œλΉ„μŠ€λ³„λ‘œ λ‹€λ₯Έ 기술 μŠ€νƒ 적용 κ°€λŠ₯
  • ν™•μž₯μ„± : νŠΉμ • μ„œλΉ„μŠ€λ§Œ μˆ˜μ •ν•˜κ±°λ‚˜ ν™•μž₯ κ°€λŠ₯ β†’ 배포 속도 ν–₯상
  • 독립적 배포 : κ°œλ³„ μ„œλΉ„μŠ€μ˜ λ³€κ²½ 사항을 λ…λ¦½μ μœΌλ‘œ 배포 κ°€λŠ₯
  • μž₯μ•  λŒ€μ‘ : μž₯μ•  λ°œμƒ μ‹œ 전체 μ‹œμŠ€ν…œμ΄ μ•„λ‹ˆλΌ ν•΄λ‹Ή μ„œλΉ„μŠ€μ—λ§Œ 영ν–₯을 쀌

❌ MSA의 단점

  • λ³΅μž‘μ„± 증가 : μ„œλΉ„μŠ€ κ°„ 톡신, 데이터 일관성 μœ μ§€, νŠΈλžœμž­μ…˜ 관리 λ“±μ˜ λ³΅μž‘μ„±μ΄ 증가
  • μš΄μš©λΉ„μš© 증가 : 각 μ„œλΉ„μŠ€μ˜ λͺ¨λ‹ˆν„°λ§, λ‘œκΉ…, μž₯μ•  λŒ€μ‘ 등을 κ°œλ³„μ μœΌλ‘œ 관리해야 ν•˜λ―€λ‘œ 운영 λΉ„μš©μ΄ 증가
  • 데이터 관리 : λΆ„μ‚°λœ λ°μ΄ν„°λ² μ΄μŠ€λ‘œ 인해 데이터 일관성 μœ μ§€κ°€ μ–΄λ €μšΈ 수 있음
  • λ„€νŠΈμ›Œν¬ μ§€μ—° : μ„œλΉ„μŠ€ κ°„μ˜ 톡신이 λ„€νŠΈμ›Œν¬λ₯Ό 톡해 μ΄λ£¨μ–΄μ§€λ―€λ‘œ μ§€μ—° μ‹œκ°„μ΄ λ°œμƒν•  수 있음
  • 데이터 일관성 μœ μ§€ 어렀움 β†’ ν•˜λ‚˜μ˜ νŠΈλžœμž­μ…˜μ΄ μ—¬λŸ¬ μ„œλΉ„μŠ€λ₯Ό κ±°μΉ  λ•Œ 문제 λ°œμƒ

πŸ”Ή MSA의 λ³΅μž‘μ„±

μœ„ 사진은 Netflex의 MSA μ• ν”Œλ¦¬μΌ€μ΄μ…˜μž…λ‹ˆλ‹€. λ”± 봐도 μ—„μ²­ λ³΅μž‘ν•©λ‹ˆλ‹€.
이처럼 ν™•μž₯μ„±, μœ μ—°μ„±, 독립적 배포 λ“±μ˜ μž₯점이 μžˆμ§€λ§Œ 그에 λ”°λ₯Έ 단점이 λΆ„λͺ…ν•˜κ²Œ μžˆμŠ΅λ‹ˆλ‹€.

볡수의 μ„œλΉ„μŠ€κ°€ λ‹€λ₯Έ μ„œλΉ„μŠ€λ₯Ό ν˜ΈμΆœν•΄μ•Ό ν•˜λ―€λ‘œ 호좜 관계가 λ³΅μž‘ν•΄μ§€κ³ , 각 μ„œλΉ„μŠ€λ₯Ό 찾아봐야 ν•˜λŠ” 운영 λ³΅μž‘μ„±μ΄ μ¦κ°€ν•©λ‹ˆλ‹€.

λ§Œμ•½ 각 μ„œλΉ„μŠ€κ°€ νšŒμ› 정보λ₯Ό 별도 DB에 보관할 경우, νšŒμ› μ •λ³΄μ˜ λ³€κ²½(예: νƒˆν‡΄, 휴면) μ‹œ 데이터 뢈일치 λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ˜ν•œ μ„œλΉ„μŠ€ κ°„ 톡신 μ‹œ 아무리 λΉ λ₯΄λ‹€κ³  해도 μ˜†μ— μžˆλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ HTTP/HTTPS, λ©”μ‹œμ§€ 큐λ₯Ό ν†΅ν•΄μ„œ ν†΅μ‹ ν•˜κΈ° λ•Œλ¬Έμ— μ§€μ—°μ‹œκ°„μ΄ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ‹ κ·œ ν”„λ‘œμ νŠΈ μ΄ˆκΈ°μ— λͺ¨λ“  μš”μ†Œλ₯Ό λΆ„λ¦¬λœ MSA둜 섀계 및 κ°œλ°œν•˜λ©΄ λ¦¬μ†ŒμŠ€μ™€ 섀계 μ‹œκ°„μ΄ 많이 μ†Œλͺ¨λ˜λ―€λ‘œ, 초기 λ‹¨κ³„λ³΄λ‹€λŠ” 규λͺ¨κ°€ μ»€μ§€κ±°λ‚˜ κΈ°λŠ₯이 λ³΅μž‘ν•œ μ‹œμŠ€ν…œμ— μ ν•©ν•œ μ•„ν‚€ν…μ²˜μž…λ‹ˆλ‹€.


πŸ“˜ MSA vs λͺ¨λ†€λ¦¬μ‹ μ•„ν‚€ν…μ²˜ 비ꡐ

πŸ”Ή λͺ¨λ†€λ¦¬μ‹ μ•„ν‚€ν…μ²˜λž€?

λͺ¨λ†€λ¦¬μ‹ μ•„ν‚€ν…μ²˜λŠ” μ‹œμŠ€ν…œμ˜ λͺ¨λ“  κΈ°λŠ₯이 ν•˜λ‚˜μ˜ μ½”λ“œλ² μ΄μŠ€μ— ν¬ν•¨λœ κ΅¬μ‘°μž…λ‹ˆλ‹€.
즉, ν•˜λ‚˜μ˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ λͺ¨λ“  κΈ°λŠ₯을 λ‹΄λ‹Ήν•˜λ©°, ν•œ λ²ˆμ— λ°°ν¬λ©λ‹ˆλ‹€.

  • μž₯점
    • κ°„λ‹¨ν•œ 배포: λͺ¨λ“  μ½”λ“œκ°€ ν•˜λ‚˜μ˜ μ½”λ“œλ² μ΄μŠ€μ— ν¬ν•¨λ˜μ–΄ μžˆμ–΄ 배포가 λ‹¨μˆœ
    • 단일 λ°μ΄ν„°λ² μ΄μŠ€: ν•˜λ‚˜μ˜ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ‚¬μš©ν•˜μ—¬ 데이터 일관성을 μ‰½κ²Œ μœ μ§€ν•  수 있음
  • 단점
    • ν™•μž₯μ„± λΆ€μ‘± : νŠΉμ • κΈ°λŠ₯을 ν™•μž₯ν•˜λ €λ©΄ 전체 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ ν™•μž₯해야함
    • κΈ΄ 개발 μ£ΌκΈ° : μž‘μ€ λ³€κ²½ 사항도 전체 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λ‹€μ‹œ 배포해야함
    • μœ μ—°μ„± λΆ€μ‘± : μƒˆλ‘œμš΄ 기술 λ„μž…μ΄ μ–΄λ ΅κ³  νŠΉμ • λͺ¨λ“ˆμ— μ’…μ†μ μž„

이렇듯 λͺ¨λ†€λ¦¬ν‹± μ•„ν‚€ν…μ²˜μ—μ„œλŠ” μƒˆλ‘œμš΄ κΈ°λŠ₯(예: λ°˜ν’ˆ κΈ°λŠ₯)을 μΆ”κ°€ν•˜λ©΄, λͺ¨λ“  μ„œλΉ„μŠ€(νšŒμ›, μƒν’ˆ, μ£Όλ¬Έ)λ₯Ό ν†΅ν•©μ μœΌλ‘œ 배포해야 ν•©λ‹ˆλ‹€.

λ§Œμ•½μ— λŒ€κ·œλͺ¨ μ‚¬μš©μž(100만 λͺ…)κ°€ μ„œλΉ„μŠ€λ₯Ό μ‚¬μš© 쀑이라면 1μ΄ˆμ— μ—„μ²­ λ‚˜κ²Œ λ§Žμ€ μš”μ²­μ΄ μΌμ–΄λ‚˜κ²Œ λ©λ‹ˆλ‹€.

μ΄λŸ΄λ•Œ 배포 μ‹œ μ½”λ“œ λ˜λŠ” 인프라 λ ˆλ²¨μ—μ„œ 예기치 μ•Šμ€ λ¬Έμ œκ°€ 전체 μ„œλΉ„μŠ€μ— μ „νŒŒλ  μœ„ν—˜μ΄ μ‘΄μž¬ν•©λ‹ˆλ‹€.

βš–οΈ λͺ¨λ†€λ¦¬μ‹ vs MSA 비ꡐ

λͺ¨λ†€λ¦¬μ‹MSA
κ΅¬μ‘°ν•˜λ‚˜μ˜ 큰 μ• ν”Œλ¦¬μΌ€μ΄μ…˜λ…λ¦½μ μΈ λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ λͺ¨μŒ
배포전체 μ½”λ“œ μˆ˜μ • ν›„ λ°°ν¬κ°œλ³„ μ„œλΉ„μŠ€λ§Œ μˆ˜μ • ν›„ 배포 κ°€λŠ₯
μœ μ—°μ„±νŠΉμ • κΈ°λŠ₯ μˆ˜μ • μ–΄λ €μ›€μ„œλΉ„μŠ€ λ‹¨μœ„λ‘œ κΈ°λŠ₯ ν™•μž₯ κ°€λŠ₯
μ•ˆμ •μ„±μΌλΆ€ 였λ₯˜κ°€ 전체 영ν–₯을 μ€Œκ°œλ³„ μ„œλΉ„μŠ€μ—λ§Œ 영ν–₯

πŸ” MSA 운영 μ‹œ κ³ λ €ν•΄μ•Ό ν•  사항

MSA κ΅¬μ‘°μ—μ„œλŠ” μ„œλΉ„μŠ€ κ°„ 톡신이 λ§Žμ•„μ§€λ―€λ‘œ, μš΄μ˜μ„ μœ„ν•΄ λ‹€μŒ μš”μ†Œλ“€μ„ μ‹ κ²½ 써야 ν•©λ‹ˆλ‹€.

1️⃣ API Gateway β†’ 각 μ„œλΉ„μŠ€μ˜ μš”μ²­μ„ μ€‘μ•™μ—μ„œ 처리
2️⃣ μ„œλΉ„μŠ€ κ°„ 인증 (OAuth, JWT λ“±) β†’ λ³΄μ•ˆ κ°•ν™”
3️⃣ λΆ„μ‚° λ‘œκΉ… 및 λͺ¨λ‹ˆν„°λ§ (ELK μŠ€νƒ λ“±) β†’ 문제 좔적 κ°€λŠ₯
4️⃣ 데이터 μ •ν•©μ„± μœ μ§€ (Saga νŒ¨ν„΄ λ“±) β†’ νŠΈλžœμž­μ…˜ 일관성 보μž₯


πŸš€ CS κ°œλ… μΆ”κ°€: MSA와 κ΄€λ ¨λœ ν•„μˆ˜ 기술

MSAλ₯Ό 잘 μ΄ν•΄ν•˜λ €λ©΄ μ•„λž˜ κ°œλ…λ„ ν•¨κ»˜ κ³΅λΆ€ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

🌐 1️⃣ RESTful API

  • λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ κ°„ 데이터 κ΅ν™˜μ„ μœ„ν•΄ HTTP 기반 API ν™œμš©
  • GET, POST, PUT, DELETE λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ 톡신

🐳 2️⃣ Docker & Kubernetes

  • 각 λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€λ₯Ό μ»¨ν…Œμ΄λ„ˆλ‘œ 배포할 λ•Œ μ‚¬μš©
  • Kubernetesλ₯Ό ν™œμš©ν•˜λ©΄ μ—¬λŸ¬ μ»¨ν…Œμ΄λ„ˆλ₯Ό μžλ™ μ‘°μ • 및 관리 κ°€λŠ₯

πŸ”„ 3️⃣ λ©”μ‹œμ§€ 큐 (Kafka, RabbitMQ)

  • μ„œλΉ„μŠ€ κ°„ 비동기 데이터 전달을 μœ„ν•΄ μ‚¬μš©
  • νŠΉμ • μ„œλΉ„μŠ€κ°€ λ‹€μš΄λ˜μ–΄λ„ 데이터 손싀 없이 볡ꡬ κ°€λŠ₯

βš™οΈ 4️⃣ CI/CD (Jenkins, GitHub Actions λ“±)

  • μ½”λ“œ μˆ˜μ • ν›„ μžλ™ ν…ŒμŠ€νŠΈ 및 배포 κ°€λŠ₯ β†’ 운영 λΆ€λ‹΄ κ°μ†Œ

πŸ“Œ 마무리

MSAλŠ” ν˜„λŒ€μ μΈ λŒ€κ·œλͺ¨ μ‹œμŠ€ν…œμ— μ ν•©ν•œ μ•„ν‚€ν…μ²˜λ‘œ, ν™•μž₯μ„±κ³Ό μ•ˆμ •μ„±μ΄ λ›°μ–΄λ‚©λ‹ˆλ‹€.
ν•˜μ§€λ§Œ 운영과 개발이 λ³΅μž‘ν•΄μ§€λ―€λ‘œ 톡신 방식, 인증 처리, 데이터 μ •ν•©μ„± μœ μ§€ 등을 κ³ λ €ν•΄μ•Ό ν•©λ‹ˆλ‹€.
λ˜ν•œ MSAλ₯Ό μ‚¬μš©ν•˜λ €λ©΄ REST API, Docker, λ©”μ‹œμ§€ 큐, CI/CD 같은 ν•„μˆ˜ κ°œλ…μ„ μ΄ν•΄ν•˜λŠ” 것이 μ€‘μš”ν•©λ‹ˆλ‹€.

0개의 λŒ“κΈ€