시스템을 독립적으로 배포할 수 있는 서비스들로 구성하고, 각 서비스는 잘 정의된 API로 통신하는 것 으로 적용하는 목표와, 기준이 명확하지는 않다.
다음과 같은 특징을 가지면 MSA 라고 볼 수 있다.
서비스 단위로 장애를 차단하고 성능 확장(스케일 아웃) 을 할 수 있다.
서비스 간에 잘 정의된 API를 사용하여 서로 통신한다. 각 서비스의 내부 구현은 숨긴다.
정리하자면 마이크로서비스 아키텍처를 제대로 적용한 시스템은
서비스가 업무 단위로 분리되어 서로 정해진 인터페이스로만 통신하고,
독립적으로 실행하며 독립적으로 배포되어야 한다.
시스템이 마이크로 서비스 아키텍처에 적합한지 다음을 기준으로 판단 할 수 있다.
REST API는 기능을 재사용하기에 좋은 수단으로, 오픈 API로 새로운 비즈니스를 창줄하기도 하는데 이는 아키텍처 스타일을 결정할 만큼 구체적인 목표가 될 수 있다.
그래서 현재는 프론트(SPA), 백엔드(REST API)를 제공하는 것이 표준적인 구조가 되었는데 아직도 JSP와 같은 오래된 기술을 사용하는 경우가 많다.
이러한 오래된 기술을 사용하는 경우에 REST API를 MSA의 특징으로 보는 경우가 있다.
클라우드 인프라의 보급이 활발해지면서 이를 사용하지 않는 MSA가 드문데, MSA를 기반으로 하는 대부분의 시스템은 인프라를 잘 활용할 수 있는 구조를 갖춰야 하므로, 클라우드 네이티브 애플리케이션이라고 말해도 무방할 것 같지만, 작은 Monolithic 시스템도 클라우드 인프라를 사용한다면 이를 잘 활용할 수 있는 구조를 갖춰야 한다.
따라서, 클라우드 네이티브 어플리케이션은 모놀리식 아키텍처와 마이크로서비스 아키텍처를 포함하는 개념이라 할 수 있다.
참조한 책 및 사이트
마이크로서비스 아키텍처 구축 가이드
https://hahahoho5915.tistory.com/71
https://learn.microsoft.com/ko-kr/azure/architecture/guide/architecture-styles/microservices
https://medium.com/design-microservices-architecture-with-patterns/when-to-use-monolithic-architecture-57c0653e245e