2014년 유명한 아키텍트 구루인 마틴 파울러는 그동안의 마이크로서비스 발전 흐름을 정리해 마이크로서비스의 등장 배경과 개념. 특징을 설명한바 있다.
모노리스는 하나의 단위로 개발되는 일체식 애플리케이션이다. 보통 3티어라 불리는 사용자 인터페이스와 데이터베이스, 서버 쪽 애플리케이션의 3개 부분으로 구성된다.
.jpg)
서버 측 애플리케이션이 일체, 즉 논리적인 단일체로서 아무리 작은 변화에도 새로운 버전으로 전체를 빌드해서 배포해야 했다. 그리고 일체식 애플리케이션은 단일 프로세스에서 실행된다. 따라서 확장이 필요한 경우 마이크로서비스 기반 시스템을 나타낸 아래 그림처럼 특정 기능만 확장할 수 없고 반드시 전체 애플리케이션을 동시에 확장해야 한다. 보통 로드 밸런서를 앞에 두고 여러 인스턴스 위에 큰 덩어리를 복제해 수평으로 확장한다.

이런 상황에서 변경이 발생하면 모노리스 시스템의 단점이 극대화한다. 즉, 여러 개의 모노리스가 수평으로 확장된 상태이므로 여러 개의 모노리스 시스템 모두를 전부 다시 빌드하고 배포해야 한다. 또한 확장 시 애플리케이션이 병렬로 확장되어 사용량 증가에 대응할 수 있지만 데이터베이스는 통합되어 하나이므로 탄력적으로 대응할 수 없다. 따라서 사전에 성능을 감당하기 위해 스케일 업을 통해 용량을 증설해야 한다.
반면 마이크로서비스는 서버 측이 여러 개의 조각으로 구성돼 각 서비스가 별개의 인스턴스로 로딩된다. 즉, 여러 서비스 인스턴스가 모여 하나의 비즈니스 애플리케이션을 구성한다. 또한 각기 저장소가 다르므로 업무 단위로 모듈 경계가 명확하게 구분된다. 따라서 확장 시에는 특정 기능별로 독립적으로 확장할 수 있고, 특정 서비스를 변경할 필요가 있다면 해당 서비스만 빌드해서 배포하면 된다.
또 각 서비스가 독립적이어서 서로 다른 언어로 개발하는 것도 가능하므로 각 서비스의 소유권을 분리해 서로 다른팀이 개발 및 운영할 수도 있다.
윗 그림을 보면 각기 서비스가 분리되어 별도의 저장소를 가지고 있고, 서비스의 하나의 확장이 필요하면 그 서비스만 스케일 아웃하면 된다.
소프트웨어 공학에서 말하는 모듈화 개념의 발전 흐름을 보면 단순히 기능을 하향식 분해해서 설계해 나가는 구조적 방법론부터 시작해 객체 단위로 모듈화하기 위한 객체지향 방법론, 모듈화의 단위가 기능별로 재사용할 수 있는 좀 더 큰 컴포넌트가 되는 컴포넌트 베이스 방법론, 그리고 컴포넌트를 모아 비지니스적으로 의미 있고 완결적인 서비스 단위로 모듈화하는 SOA로 이어지는 발전 과정을 거쳤다.
보통 마이크로서비스 기반으로 시스템을 개발하는 아키텍처 및 개발 방식을 마이크로서비스 아키텍처(이하 MSA)그렇다면 서비스 기반 아키텍처를 칭하는 SOA와는 어떤 개념적 차이가 있을까?
넓게 보면 여러 개의 응집된 비지니스 서비스의 집한으로 시스템을 개발한다는 점에서 SOA와 MSA는 개념적으로 큰 차이는 없다. 그러나 SOA는 구체적이지 않고 이론적이며, 실제 비지니스 성공 사례가 많지 않았다. 반면 MSA는 클라우드 인프라 기술의 발전과 접목되어 아마존과 넷플릭스에 의해 구체화되고 비지니스 성공 사례로 널리 공유된 바 있다.
즉, 이상적이었지만 성공을 증명하지 못했던 SOA가 클라우드 인프라의 등장으로 하드웨어를 유연하게 다룰 수 있게 되면서 비로소 실현되어 성공적으로 증명된 시스템 구조가 MSA라 할 수 있다.
마틴 파울러는 2014년에 이러한 여러 성공 사례의 특징을 뽑아 마이크로서비스를 다음과 같이 정의 했다.