대부분의 웹 기반 애플리케이션은 모놀리식 아키텍쳐 형태로 개발되었다.
애플리케이션은 단일 작업 단위로도 배포할 수 있지만, 실제로는 여러 개발 팀이 한 애플리케이션에서 작업할 때가 더 많다. 일반적으로 각 개발 팀은 특정 고객에게 제공하는 애플리케이션의 개별 기능을 담당한다. 그리고 이러한 애플리케이션이 모놀리식 아키텍처로 개발된다면 모놀리식 애플리케이션이 크고 복잡해짐에 따라 각 팀의 의사소통과 조정 비용이 증가하는데 이를 관리하기 어려워진다. 또한 각 팀에서 변경이 있을 때마다 애플리케이션 전체를 다시 빌드하고 테스트해서 배포해야 한다.
그림을 보면 각 팀이 서비스 코드와 서비스 인프라스트럭처를 완전히 소유하고 있음을 알 수 있다. 코드와 형상관리 레포지터리, 인프라스트럭처 (앱 서버 및 데이터베이스)가 애플리케이션의 다른 부분과 완전히 독립적이기 때문에 각 팀은 독립적으로 빌드와 테스트, 배포를 할 수 있다.
마이크로서비스 아키텍처의 특징
- 애플리케이션 로직을 각자 책임이 명확한 작은 컴포넌트들로 분해하고 이들을 조합해서 솔루션을 제공한다
- 각 컴포넌트는 작은 책임 영역을 담당하고 완전히 상호 독립적으로 배포된다. 마이크로서비스는 비즈니스 영역의 한 부분에서만 책임을 담당한다. 그리고 여러 애플리케이션에서 재사용 가능하여야 한다.
- 마이크로서비스는 몇 가지 기본 원칙에 기반을 두며, 서비스 소비자와 서비스 제공자 사이의 데이터 교환을 위해 HTTP와 JSON (JavaScript Object Notation) 같은 경량 통신 프로토콜을 사용한다.
- 애플리케이션은 항상 기술 중립적 프로토콜 (JSON 이 가장 보편적)을 사용해 통신하므로 서비스 구현 기술과는 무관한다. 따라서 마이크로서비스 기반의 애플리케이션을 다양한 언어와 기술로 구축할 수 있다.
- 작고 독립적이며 분산된 마이크로서비스를 사용해 조직은 명확히 정의된 책임 영역을 담당하는 소규모 팀을 보유할 수 있다. 이 팀들은 애플리케이션 출시처럼 하나의 목표를 향해 일하지만, 자기가 개발하는 서비스만 책임진다.
- 결과적으로 마이크로서비스는 개발 팀에 높은 유연성과 자율성을 제공한다. 또한 애플리케이션 확장성을 높일 수 있고 회복성도 향상시킬 수 있다.