MSA는 하나의 큰 어플리케이션을 여러 개의 작은 어플리케이션으로 쪼개어 변경과 조합이 가능하도록 만든 아키텍처이다.
레고처럼, 작은 레고블록(MicroService) 하나하나를 붙여서 어떠한 큰 결과물을 만드는 형태를 MSA라고 할 수 있다.
Monolithic Architecture란 소프트웨어의 모든 구성요소가 한 프로젝트에 통합되어 있는 형태를 말한다. (예를 들어, Auth 모듈, Post 모듈, Chatting 모듈 등을 개발하고 개발 완료된 Application을 하나의 결과물로 패키징하여 배포되는 형태)
간단한 아키텍처고 유지보수가 용이하기 때문에 아직까지 많은 소프트웨어가 Monolithic 형태로 구현되어 있고, 소규모 프로젝트에서는 이게 합리적이다.
하지만 일정 규모 이상의 서비스 or 수백명의 개발자가 투입되는 프로젝트에서 이는 다음과 같은 한계를 보인다.
네이버와 같은 서비스의 경우 뉴스, 메일, 지식인, 카페, 검색엔진 등의 기능이 한 백엔드 애플리케이션에 합쳐져있다면...😨
개발과 유지보수가 어려울 것이고, 많은 개발자들이 한 애플리케이션에서 작업하면 conflict가 많이 발생할 것이고, 서비스가 한계에 다다를 것이다.
이와 같은 문제를 해결하기 위해 뉴스 API, 카페 API, 쇼핑 API 등으로 다른 서버를 사용할 수 있게 하는 MSA라는 개념이 나왔다.
MSA는 API를 통해서만 상호작용 할 수 있다. 즉 마이크로 서비스는 서비스의 end-point를 API의 형태로 노출하고, 실질적인 세부사항은 모두 추상화한다. 내부의 구현 로직, 아키텍처, 프로그래밍 언어 같은 기술적인 사항들은 서비스 API에 의해 철저히 가려진다.
각각의 서비스는 모듈화되어 있으며, 모듈끼리는 RCP
또는 message-driven API
등을 이용해 통신한다.
MSA는 서비스가 커지면서 생겼던 모놀리틱 아키텍처의 문제점들을 어느정도 보완해줄 수 있다.
모놀리틱 아키텍처는 단순한 아키텍처인데 비해 MSA는 보다 복잡하기에, 전체 서비스가 커짐에 따라 그 복잡도가 기하급수적으로 늘어날 수 있다.