MSA(Micro Software Architecture)


MSA(Micro Software Architecture)

  • 하나의 큰 Application을 여러 개의 작은 Application으로 쪼개어 변경과 조합이 가능하도록 만든 Architecture

  • 독립적으로 배포 가능한 각각의 기능을 수행하는 서비스로 구성된 프레임워크


Monolithic Architecture

  • 소프트웨어의 모든 구성 요소가 한 프로젝트에 통합되어 있는 형태

  • 소규모 프로젝트에는 Monolithic Architecture가 합리적

  • 하지만 일정 규모 이상의 서비스 또는 많은 개발자가 투입되는 프로젝트에는 Monolithic Architecture로는 한계가 있음.

    1. 빌드 시간 및 테스트 시간, 배포 시간이 기하급수적으로 증가

    2. 부분의 장애가 전체 서비스의 장애로 이어지는 경우 발생

    3. 서비스를 변경하기 어렵고, 수정 시 장애의 영향도 파악하기 힘듦

    4. 부분적인 Scale-out(여러 서버로 나누어 일을 처리하는 방식)이 어려움

    5. 한 프레임워크와 언어에 종속적

  • 이러한 단점들을 극복하기 위해 MSA 등장


MSA의 특징

  • 각각의 서비스 자체는 하나의 Monolithic Architecture와 유사한 구조를 가짐

  • 각각의 서비스는 독립적으로 배포 가능

  • 각 서비스의 다른 서비스에 대한 의존성은 최소화

  • 각각의 서비스는 개별 프로세스로 구동되며 API를 통해 상호작용


MSA의 장점

  • 팀 단위로 적절한 수준에서 기술 스택을 다르게 가져갈 수 있음

  • 각 서비스별로 독립적으로 배포 가능

  • 각 서비스의 부하에 따라 개별적 scale-out 가능

  • 신기술 적용 유연

  • 장애가 전체 서비스로 확장될 위험 적음

MSA의 단점

  • 서비스 간 호출시 API를 사용하기 때문에 통신 비용, 지연 시간 증가

  • 서비스가 분리되어 있기 때문에 테스트와 트랜잭션의 복잡도, 비용 증가

  • 데이터가 여러 서비스에 걸쳐 분산되기 때문에 한번에 조회하기 어렵고 데이터의 정합성 관리 또한 쉽지 않음

  • 실제 운영 환경에 대해서 배포하는 것이 쉽지 않음