본문 바로가기
🔬아키텍처/- Microservice Architecture

[마이크로서비스] MSA의 핵심 구성 요소 - Service Mesh

by Wonit 2021. 4. 14.

마이크로서비스를 구성하기 위해서는 기술적으로 많은 어려움이 수반된다.

아래의 사진만 보더라도 하나의 서비스를 구축하기 위해서 알야아 할 기술들이 굉장히 많다.

오늘은 여기에 나온 기술들의 특징과 어떤 역할을 수행하는지에 대해서 알아보려 한다.

CNCF가 제시한 표준 MSA 구성 요소

CNCF는 지난 Cloud Native Architecture 에서도 잠깐 언급한 Cloud Native Computing Foundation 단체이다.

CNCF 에서 마이크로서비스를 지원하고 관리하기 위한 구성 요소들을 다음과 같이 나눈다.

Service Mesh

Service Mesh는 마이크로서비스 간의 인프라 사이에서 원활하게 통신을 수행할 수 있도록 하는 인프라 계층이다.

 

아키텍처 내부에서 요청이 어떤 지점으로 갈지 전달되는 방식을 추상화 한다.

 

이 말은 실질적인 서버로서 존재하는 것이 아니라 하나의 추상적인 개념을 뜻하게 된다.

 

결국 서비스 메시를 통해서 우리는 서비스 간의 통신을 추상화하여 안전하고 효율적이며 빠르게 구성할 수 있게 되는 것이다.

즉, 애플리케이션이 서로 데이터를 공유하는 방식을 제어하는 방법인 셈이다.

Service Mesh는 서비스와 클라이언트 사이에서 Aggregate 서버의 역할 즉, 일종의 미들웨어의 특성을 갖는다.

 

이러한 서비스 메쉬는 다음과 같은 역할을 수행한다.

 

  1. 서비스 등록 : Service Registery
  2. 서비스 검색 : Service Discovery
  3. 각 서비스의 고유한 설정 정보를 하나의 프로젝트에서 관리 : Configuration Server
  4. 프록시, 인증, 로드 밸런싱과 같은 기능 수행
  5. 암호화

이러한 정보드를 Dashboard로 제공하는 경우도 있다.

주요 특징, Service Register & Discovery

서비스를 새롭게 생성한다면 해당 서버에 대한 정보를 Service Mesh 에 존재하는 Discovery 서버에 등록한다.


그럼 각각의 마이크로서비스들의 IP 정보는 일일이 등록하지 않더라고 Discovery 서버가 관리하게 된다.

API Gateway VS Service Mesh

API Gateway와 Service Mesh와 하는 일은 동일하다.


하지만 외부에 노출되는 것과 작동 위치에 따라 다른데, 이를 간단하게 표로 만들어보자.

 

이름 수행하는 일 적용 위치 외부 노출 여부
API Gateway 라우팅, 인증, 모니터링, 서비스 검색, 서비스 등록 Client-to-Server Yes
Service Mesh 라우팅, 인증, 모니터링, 서비스 검색, 서비스 등록 Server-to-Server No

그럼 API Gateway냐 Service Mesh냐 사이에서 어떤 것을 써야 할까?
정답은 없다. 사용되는 위치는 조금 다르지만 API Gateway와 Service Mesh나 서로 동일한 목적, 로드밸런싱, 프록시, 인증을 수행한다. 그에 따라서 점점 API 게이트웨이와 Service Mesh가 통합되는 움직임이 보인다. 적절히 둘의 장점을 이용하는 것이 바람직하다고 생각한다.

Service Mesh 의 구성도

이는 Spring Cloud의 Eureka와 Gateway를 사용하여 구성한 서비스 메쉬 큰 그림이다.

 

서비스 메쉬에는 Sidecar 패턴 라는 개념이 등장하는데, 이는 아주 중요한 개념이다.

 

Sidecar Pattern

 

위의 구성도를 보면 각각의 서비스들은 어떻게 서비스 정보를 등록하고 서비스 정보를 확인할 수 있을까?

만약 다른 언어와 다른 프레임워크로 동작한다면?

 

이럴 때 사이드카 패턴을 사용할 수있다.

 

사이드카 패턴은 격리 및 캡슐화를 제공하는 별도의 프로세스 또는 컨테이너를 실질적인 애플리케이션 컨테이너 옆에 붙이는 것을 뜻하는데, 오토바이에 있는 사이드 카와 비슷하다고 해서 이름이 사이드 카 패턴이라고 한다.

 

즉, API Gateway나 Service Discovery 가 Java로 구성되어있다고 가정해보자.

 

그럼 다른 플랫폼 언어로 작성된 서버에 Sidecar를 붙여 동작하게 하는게 가능해진다.

이를 지원하는 도구 및 기술

현재 많은 Service Mesh를 지원하는 기술들이 존재한다.

이는 CNCF 에 CNCF Cloud Native Interactive Landscape 에서 더 자세히 확인할 수 있다.

  • Netflix Eureka
  • Netflix Ribbon
  • Istio
  • Hydra

댓글6