확장 큐브로 보는 마이크로서비스
확장 큐브의 개념으로 마이크로 서비스를 살펴보자.
확장 큐브는 애플리케이션을 확장하는 세 가지 방법을 정의한다.
- X축 확장은 동일한 다중 인스턴스에 들어온 요청을 부하분산
- Z축 확장은 요청의 속성에 따라 요청을 라우팅
- Y축 확장은 애플리케이션을 기능에 따라 서비스로 분해한다.
X축 확장: 다중 인스턴스에 고루 요청 분산 #
X축 확장은 일반적인 모놀리식 애플리케이션의 확장 수단이다.
부하 분산기 뒷면에 애플리케이션 인스턴스를 N개 띄워놓고 부하 분산기는 들어온 요청을 이들 인스턴스에 고루 분배한다.
애플리케이션 능력과 가용성을 개선하기 위해 사용한다.

Z축 확장: 요청 속성별 라우팅 #
모놀리식 애플리케이션의 다중 인스턴스를 실행하는 것은 X축 확장과 같지만, 인스턴스별로 주어진 데이터 하위집합만 처리하도록 하는 방법이다.
라우터는 요청의 속성에 알맞는 인스턴스로 요청을 라우팅한다.
각 애플리케이션 인스턴스는 자신에게 배정된 사용자 하위집단만 처리한다.
라우터는 요청헤더 Authorization에 포함된 userId를 보고 N개의 동일한 애플리케이션 인스턴스 중 하나를 선택한다.
Z축 확장은 애플리케이션을 확장해서 증가하는 트랜잭션 및 데이터 볼륨을 처리하기좋은 수단이다.

Y축 확장: 기능에 따라 애플리케이션을 서비스로 분해 #
X축/Z축 확장을 하면 애플리케이션 능력과 가용성은 개선되지만, 애플리케이션이 점점 더 복잡해진다. 따라서 여러 서비스로 쪼개기로 한다.
서비스는 주문 관리, 고객 관리 등 지엽적 기능이 구현된 미니 애플리케이션이며, 서비스에 따라 X축/Y축 확장도 가능하다.
예를 들어, 주문 서비스는 여러 서비스 인스턴스를 부하 분산하는 형태로 구성할 수 있다.
