마이크로서비스란? SOA와 차이점

Updated:

마이크로서비스란? SOA와 차이점

2014년 유명한 아키텍트(Architect) 구루인 마틴 파울러(Martin Fowler)는 그동안의 마이크로 서비스 발전 흐름을 정리해 마이크로 서비스 등장 배경과 개념 그리고 특징으로 설명했다. 마틴 파울러의 설명을 참조하여 마이크로 서비스 개념과 이를 가능케 하는 조건들을 살펴보자.

모놀리스(Monolith)와 마이크로서비스 비교

먼저 전통적인 시스템 구조인 모놀리스 구조부터 살펴보면 모놀리스는 하나의 단위로 개발되는 일체 식 애플리케이션이다. 아래 그림과 같이 보통 3티어 라 불리우는 사용자 인터페이스와 데이터베이스 그리고 서버 쪽 애플리케이션 3개 부분으로 구성된다.

서버 쪽 애플리케이션이 일체, 즉 논리적인 단일체로 아무리 작은 변화라도 새로운 버전으로 전체 빌드(build)해서 배포해야 한다. 그리고 이 일체 식 애플리케이션은 단일 프로세스 위에서 실행된다.

따라서 아래 그림과 같이 확장이 필요하면 일체 식 프로그램이므로 특정 기능만 확장할 수 없고 반드시 전체 애플리케이션을 동시에 확장해야 한다. 보통 로드 밸런스를 앞에 두고 여러 인스턴스 위에 큰 덩어리를 복제해 수평으로 확장한다

모노리스 시스템 개념도

이런 상황에서 변경이 발생하면 단점이 극대화 되는데 즉 여러 개의 모놀리스가 수평으로 확장된 상태이므로 이 여러 개의 모놀리스 모두를 전체 다시 빌드 배포해야 한다. 또한 확장 시 애플리케이션은 병렬로 확장되어 사용량 증가에 대응할 수 있지만 데이터베이스는 통합되어 하나이므로 탄력적으로 대응할 수 없다. 따라서 사전에 그 성능을 감당하기 위해 스케일업을 통한 용량 증설을 해야 한다.

반면에 마이크로서비스는 서버 쪽이 여러 개로 조각으로 구성돼 각기 서비스가 프로세스 위에 별도로 올라간다. 즉 여러 개의 서비스 프로세스가 모여 하나의 비지니스 어플리케이션을 구성한다. 또한 각기 저장소가 다르므로 업무 단위로 확고한 모듈 경계를 가진다.

따라서 확장 시에는 특정 기능별로 독립적으로 확장할 수 있고 특정 서비스의 변경이 필요하면 그 서비스만 빌드, 배포하면 된다. 또 각 서비스가 독립적이어서 서로 다른 언어로 개발되는 것도 가능하며 그래서 각 서비스는 서로 다른 팀이 소유권을 분리해 개발·운영할 수가 있다.

아래 그림을 보면 각기 서비스가 분리되어 별도의 저장소를 가지고 있고 서비스C의 경우 확장이 필요하면 서비스C만 스케일 아웃 된다.

마이크로서비스 기반 시스템 개념도

SOA와 마이크로서비스

소프트웨어공학 모듈화 과정의 발전 흐름을 보면 객체지향부터 시작해 CBD, SOA의 과정들을 거쳤다. CBD, SOA도 넓게 보면 단위 컴포넌트나 서비스를 구성하여 시스템을 만드는 개념이다.

그렇다면 기존SOA와 MSA(microservice Architecture)는 어떤 차이가 있을까? 이런 여러 개의 응집된 비즈니스 서비스 집합으로 시스템을 개발한다는 점에서 SOA와 MSA는 개념적으로 큰 차이가 없다.

그러나 SOA는 구체적이지 않고 비지니스 실 성공사례가 많지 않았다. 반면에 MSA는 아마존과 넷플릭스에 의해 구체화되고 비지니스 성공사례로 널리 공유되었다. 아마존과 넷플릭스의 성공 과정을 계속 지켜본 마틴 파울러는 2014년에 이런 여러 성공사례의 특징을 뽑아 다음과 같이 마이크로 서비스를 정의했다.

“마이크로 서비스는 여러 개의 작은 서비스 집합으로 개발하는 접근 방법이다. 각 서비스는 개별 프로세스에서 실행되고, HTTP 자원 API 같은 가벼운 수단을 사용하여 통신을 한다. 또한 서비스는 Biz 기능 단위로 구성이 되고, 자동화된 배포 방식을 이용하여 독립적으로 배포된다. 또한 서비스들에 대한 중앙 집중적인 관리는 최소화하고, 각 서비스는 서로 다른 언어와 데이터, 저장 기술을 사용할 수가 있다.”

다음은 마틴파울러가 정의한 마이크로서비스 개념을 표현한 개념도이다. 각 서비스와 저장소는 타 서비스와 저장소들과 격리되어 있으며 API를 통해서만 느슨하게 연계된다. 따라서 독립적으로 확장가능하고 하나의 서비스만 독립적으로 배포가능하다.

또한 타 서비스와 연계된 API 만 변경되지 않는 다면 내부의 언어나 저장소는 자율적으로 선택할 수 있다. 그림을 보면 하나의 서비스는 자바와 오라클을 다른 서비스는 Node.JS와 MariaDB를 선택한 것을 볼 수 있다

마이크로서비스 개념도

CBD, SOA가 추구한 모듈화의 제1원칙은 강한 비즈니스 응집성과 서비스 간 낮은 결합도이다. 이제까지의 접근방법은 애플리케이션은 모듈 별로 분리하였으나 데이터저장소는 분리하지 못했다.

따라서 데이터의 강한 결합으로 인해 애플리케이션도 독립적인 사용이 힘들었다. 그러나 MSA에서는 SOA엔 없었던 다음 2가지 개념으로 모듈화의 제1원칙을 구체화했고 이를 실현했다.

이것이 마이크로서비스 가 SOA와의 큰 차이점 이자 장점이다.

  1. 서비스 별 저장소를 분리하여 다른 서비스가 저장소를 직접 호출하게 하지 못하게 캡슐화 한다.
  2. 그리고 REST API 같은 가벼운 개방형 표준을 사용하여 서비스 간 느슨하게 연계하고 쉽게 사용 한다