하나의 큰 서비스를 작은 단위로 쪼개서 원하는 서비스를 조합하는 아키텍처
MSA는 여러개의 작고, 독립적인 서비스들을 조합하여 복잡한 application을 만드는 Architecture이다.
각각의 독립적인 서비스는 MSA에 유연성을 부여하고 이 유연성은 개발 및 운영 과정에 많은 이점을 가져다 준다.
Monolithic이란, 소프트웨어의 모든 구성요소가 한 프로젝트에 통합되어있는 형태를 말한다.
모든 서비스가 하나의 파일로 묶인 뒤 배포되어 동작하게 된다.
서비스들의 경계가 모호하고 하나의 DB를 공유하고 있는 구조로 서로 의존성이 높아질 수 밖에 없다. 따라서 서비스가 변경되거나 DB가 변경되면 연관된 서비스들도 변경해야하는 문제가 발생하게 된다.
하나의 파일로 묶여서 배포가 되기 때문에 서비스의 한 부분을 수정한다면 전체 프로젝트를 다시 패키징해서 배포해야되는 상황이 발생하기 때문에 일반적으로는 소규모 프로젝트에 더 적합하다.
소규모 프로젝트에 적용한다면 통합되어 있기때문에 간단한 형태를 갖고있어 유지보수에 용이하게된다.
MicroService Architecture는 대규모 프로젝트에 더 적합하다.
microservice는 완전히 독립적으로 배포가 가능하고, 서로 다른 기술 스택을 사용하여 단일 비즈니스 로직을 구현한 것으로 각각의 작은 단위의 서비스를 나누어 개발하기 때문에 전체 서비스가 커지는 경우 시스템 구조 파악에 유리한 점이 있다.
각 서비스는 논리적으로 DB를 나누어(꼭 물리적으로 나눠져있을 필요는 없다) 사용하기 때문에 상호간의 결합이 약해 유연한 운영이 가능해진다.
MSA의 특징
API를 통해서만 상호작용할 수 있다. 각 서비스의 end-point를 API형태로 외부에 노출하고, 실질적인 세부 사항은 모두 추상화한다. 내부의 구현 로직, 아키텍처와 프로그래밍언어, 데이터베이스, 품질 유지 체계와 같은 기술적인 사항들은 서비스 API에 의해 철저하게 가려진다.
따라서 SOA(Service Oriented Architecutre)의 특징을 다수 공통으로 가진다.
각 서비스에 접근하기 위해 사용되는 gateway
loadbalancing