본문 바로가기

MSA (MicroServiceArchitecture)/MSA 개요 및 설계 관련

쿠버네티스를 활용한 MSA 아키텍처 구성

# MSA... MSA... MSA... 여기저기서 MSA에 혈안이 되어 있다.

Micro Service Architecture 즉 MSA는 아래의 그림으로 설명이 가능하다.

구글링을 통해 그나마 잘 설명된 그림을 골라서 가져왔다.

MSA를 구현하는데 있어서 쿠버네티스는 필수는 아니다. 하지만 쿠버네티스와 도커 환경없이 MSA를 구현하기 힘들기 때문에 MSA를 말하면 기본적으로 쿠버네티스와 도커 그리고 API Gateway를 통한 서비스 분기 정도 떠올리수 있을거 같다.

 

자, 그렇다면 나는 AWS를 사용하고 있으므로 AWS에서 제공하는 쿠버네티스 환경인 EKS를 기반으로 MSA를 구현하는 방법에 대해서 말해보자.

 

기본적인 아키텍처는 아래와 같다. (지극히 개인적인 구조이고, 추상화도 개인적으로 되어 있으니 각자의 생각과 다를수 있다.)

MSA.drawio
0.00MB

차근차근 하나하나씩 살펴보면, 일단 Docker 이미지가 빌드가 되어 어딘가에 저장 되어 있어야 할것이다. 보통 AWS는 ECR (Elastic Container Repository)에 저장을 한다.

이 ECR에 저장된 도커 이미지를 EKS에서는 pod라는 서비스단위로 실행을 시킨다. 1개의 파드가 1개의 docker 이미지를 실행한다고 볼 수 있다.

예를들어 서비스를 크게 프론트엔드와 백엔드로 나누었을때, 프론트엔드는 ECR에 저장된 도커 이미지를 기반으로 실행이 되고 실행 내용은 yaml 파일로 저장되어 실행,관리 및 업데이트 된다. 백엔드도 마찬가지이다.

 

그리고 다음은 Service이다. Service는 앞의 pod가 실행하는 네트워크 정보를 담고 있다고 보면 된다. 쿠버네티스는 총 3개의 서비스를 실행할 수있는데, 하나는 ClusterIP 이고 또하나는 Nodeport 그리고 마지막은 LoadBalancer 이다.

여기서 ClusterIP는 EKS 클러스터 내부에서 통신 가능한 서비스를 나타내고, Nodeport는 해당 노드를 통해서 서비스를 제공하는 방법을 나타내며 마지막으로 LoadBalancer는 AWS의 ELB 서비스를 통해 서비스를 제공하는 의미를 나타낸다.

 

다음은 Ingress 인데 Ingress는 EKS 내부에서 실행되는 수많은 서비스들의 경로와 서비스 이름 그리고 port를 지정한다.

Ingress가 중요한 이유는 MSA를 구현할때 서비스를 Domain 단위로 쪼개게 되면 업무 범위나 큰 사이트의 경우 수많은 컨테이너들이 생성이 될 것이다. 이 수많은 컨테이너들의 경로를 지정해주고, 서로다른 포트를 맵핑해 줌으로써 MSA 아키텍처를 구성하는데 있어서 혼란을 막아줄수 있다.

 

다음은 TargetGroup (대상그룹) 이다. 대상그룹은 Ingress에서 생성된 정보를 바탕으로 각각의 포트와 서비스 이름을 바탕으로 각각의 경로를 설정한다. Ingress에 생성된 정보가 많을수록 대상그룹의 갯수도 많아질 것이다.

 

다음은 ALB이다. ALB는 대상그룹에서 전달된 트래픽을 설정된 리스너 경로에 맞게 전달해 주는 역할을 한다.

MSA에서의 핵심 요소라고 볼수 있고, API Gateway 역할을 한다고 볼 수 있다.

 

내용을 추가하고, 조금만 더 다듬자...