1. MSA 란?
기존의 모놀리식 아키텍쳐의 한계점을 개선하기 위해 SOA( Service Oriented Architecture )의 방법을 발전 시켜, 서비스간 결합도를 느슨하게 함으로써 확장성 및 유지보수을 개선한 아키텍쳐 패턴 입니다.
MSA의 구성 요소는 아래 이미지와 같이
* Api Gateway
MicroService 에 대해서 라우팅을 해주는 역할을 하며 외부 사용자가 최종적으로 접근하는 endPoint 역할을 하며 추가적으로 인증,인가, 로드 밸런싱 역할을 제공 할 수 있는 서비스 입니다.
* Config Server
각 서비스에 대한 설정을 중앙집중식 구성으로 관리하고 공통 설정을 사용 할 수 있도록 해주며 각 서비스의 런타임 시 설정을 변경 할 수 있도록 도와주는 서비스 입니다.
* Service Registry
각 서비스를 등록하고 검색하는 역할을 하며, API Gateway나 클라이언트 측 로드 밸런서가 로드 밸런싱을 수행할 수 있도록 서비스들의 위치 정보를 제공합니다.
* Distributed Tracing
분산되어 있는 시스템 에서 요청이 처리되는 과정을 추적하고 모니터링 하는 역할을 하는 서비스 입니다. ex) sleuth , zipkin
* MicroService
MSA 구조 내에서 비즈니스 로직을 처리하는 서비스를 의미 합니다. ex) 상품 관리 서비스 , 인증 서비스 등
로 구성 되어 있으며 필요에 따라 Metrics Store, Message Brocker 가 추가도 구성 될 수 있습니다.

- 모놀리식 아키텍처의 문제점
1. 서비스를 확장 하려면 전체 애플리케이션을 확장해야 함.
2. 배포 시 전체 애플리케이션을 배포 해야 함.
3. 특정 기능에서의 버그나 영향이 다른부분에 영향을 줌.
4. 기술 스택이 제한되어 있어 확장성 측면에서 불리함.
5. 애플리케이션 크기가 커질수록 복잡해짐 .
개인적인 생각을 정리 해보자면 모놀리식 애플리케이션의 문제점은
하나의 서비스에 모든 기능이 통합되어 있기에 생기는 문제들 이고
이를 해결 하기 위해서 나온 새로운 애플리케이션 아키텍쳐가 SOA이고 이를 기반으로 발전시켜 조금 더 세분화 된 아키텍쳐가 MSA라고 볼 수 있겠습니다.