개발괴발/기술노트

MSA 마이크로 서비스 아키텍쳐

YUUUN! 2022. 1. 11. 18:28
MSA, Micro Service Architecture 란?

 

마이크로 서비스 아키텍쳐란 애플리케이션의 서비스들을 각각 독립적으로 배포할 수 있도록 구성된 구조, 형태이다

- 기존의(?) 프로젝트에서는 Monolithic Architecture 라고 해서 여러 Service들을 단일 프로젝트에 통합된 형태로 구성되어 왔다.
   Monolithic를 웹 개발을 예로 들면 모듈별로 개발하고, 하나의 결과물로 패키징하여 배포된다.
   작은 규모의 서비스인 경우에 적합하지만, 일정 규모 이상의 서비스일 경우 한계가 나타난다.

  • 일부 서비스 장애로 인해 전체 서비스 장애로 확대 될 수 있다.
    - Exception 발생이나 트래픽 증가로 교착상태에 빠지게 될 경우 전혀 관련없는 다른 서비스도 실행이 불가해 질 수 있다.
  • 서비스 일부만 Scale-out 이 어렵다.
    - 단순한 로직의 서비스이거나, 유저가 몰리지 않아 부하가 적은 서비스까지도 전부 Scale-out 되어야 햐므로 불필요한 비용이 발생한다.
  • 배포하는데 시간과 비용이 증가한다.
    - 간단한 수정사항에도 프로젝트 전체를 다시 패키징하여 배포해야하므로, 규모가 커질수록 점점 더 많은 비용이 발생하게 될 수도 있다.

 


MSA의 특징
  • MSA는 단순 서비스만 분리할 뿐 아니라 데이터베이스 까지도 분리하여 완전하게 독립적으로 실행이 가능하다.
  • 서비스끼리는 API를 통해서만 접근이 가능하다. 내부의 로직, 아키텍처, 프로그래밍 언어, 데이터베이스 등은 철저하게 가려진다.
  • 독립적인 배포가 가능하여 지속적인 배포도 Monolithic에 비해 가볍다.
  • 부하가 많은 서비스만 개별적으로 Scale-out이 가능하다. 
  • 팀(서비스) 단위로 기술 스택을 다르게 정할 수 있어서 적절한 어떠한 언어나 프레임워크를 사용해도 상관없다.

MSA의 단점
  • 복잡성 증가
    - Monolithic에 비해 상대적으로 구조가 복잡하다.
  • 트랜잭션의 일관성
    - 서비스 별로 가지고 있는 데이터베이스도 다르고, 서비스간의 연결을 위한 통신이 포함되어 있어 트랜잭션을 유지하기가 어렵다.
  • 통합테스트의 어려움
    - 개발환경과 운영환경을 동일하게 가져가는 것이 쉽지 않다.