MSA(Micro Software Architecture)
MSA(Micro Software Architecture)
하나의 큰 Application을 여러 개의 작은 Application으로 쪼개어 변경과 조합이 가능하도록 만든 Architecture
독립적으로 배포 가능한 각각의 기능을 수행하는 서비스로 구성된 프레임워크
Monolithic Architecture
소프트웨어의 모든 구성 요소가 한 프로젝트에 통합되어 있는 형태
소규모 프로젝트에는 Monolithic Architecture가 합리적
하지만 일정 규모 이상의 서비스 또는 많은 개발자가 투입되는 프로젝트에는 Monolithic Architecture로는 한계가 있음.
빌드 시간 및 테스트 시간, 배포 시간이 기하급수적으로 증가
부분의 장애가 전체 서비스의 장애로 이어지는 경우 발생
서비스를 변경하기 어렵고, 수정 시 장애의 영향도 파악하기 힘듦
부분적인 Scale-out(여러 서버로 나누어 일을 처리하는 방식)이 어려움
한 프레임워크와 언어에 종속적
이러한 단점들을 극복하기 위해 MSA 등장
MSA의 특징
각각의 서비스 자체는 하나의 Monolithic Architecture와 유사한 구조를 가짐
각각의 서비스는 독립적으로 배포 가능
각 서비스의 다른 서비스에 대한 의존성은 최소화
각각의 서비스는 개별 프로세스로 구동되며 API를 통해 상호작용
MSA의 장점
팀 단위로 적절한 수준에서 기술 스택을 다르게 가져갈 수 있음
각 서비스별로 독립적으로 배포 가능
각 서비스의 부하에 따라 개별적 scale-out 가능
신기술 적용 유연
장애가 전체 서비스로 확장될 위험 적음
MSA의 단점
서비스 간 호출시 API를 사용하기 때문에 통신 비용, 지연 시간 증가
서비스가 분리되어 있기 때문에 테스트와 트랜잭션의 복잡도, 비용 증가
데이터가 여러 서비스에 걸쳐 분산되기 때문에 한번에 조회하기 어렵고 데이터의 정합성 관리 또한 쉽지 않음
실제 운영 환경에 대해서 배포하는 것이 쉽지 않음