MSA?

Kim Dong Kyun·2023년 3월 29일
1
post-custom-banner

개요

MSA 환경의 서비스를 구현 해 보지 않아서 자세히 모르지만, MSA의 기본 개념에 대해서 알아봅니다.


MSA?

MSA(Microservices Architecture)는 분산 시스템 아키텍처의 하나로, 작고 독립적인 서비스들이 네트워크를 통해 상호작용하면서 하나의 큰 애플리케이션을 형성하는 방식입니다.

1. 등장 이유, 장점

  • MSA는 기존의 모놀리식(monolithic) 아키텍처에서 발생하는 문제를 해결하기 위해 등장했습니다.

모놀리식 아키텍처에서는 모든 기능이 하나의 애플리케이션에서 구현되어 있기 때문에, 시스템이 복잡해질수록 유지보수와 개발이 어려워지고 확장성도 떨어집니다.

하지만 MSA에서는 각각의 서비스가 독립적으로 개발, 배포, 확장될 수 있기 때문에
전체 시스템의 유지보수와 개발이 용이해집니다. 또한, 각각의 서비스는 서로 다른 기술 스택을 사용할 수 있어 개발자들이 자신들이 선호하는 언어와 프레임워크로 개발할 수 있는 자유도가 높아지고, 적합한 서비스별 최적화가 가능해지기도 합니다.

하지만, MSA는 모놀리식 아키텍처보다 구축 및 운영에 대한 복잡성이 높습니다. 서비스 간의 통신과 데이터 공유, 로깅과 모니터링 등 다양한 부분에서 추가적인 노력이 필요합니다.

예시로, 전자상거래 애플리케이션을 MSA로 구현할 경우, 다음과 같은 서비스로 분리할 수 있습니다.

  • 인증 서비스(Authentication Service)
  • 상품 서비스(Product Service)
  • 주문 서비스(Order Service)
  • 결제 서비스(Payment Service)
  • 배송 서비스(Shipping Service)

각각의 서비스는 독립적으로 개발, 배포, 확장이 가능하며, 서비스 간의 통신은 REST API 등을 사용하여 이루어집니다.


2. MSA 수행 시 각각 서버의 통신 방식

MSA에서 각각의 서비스는 독립적으로 개발, 배포, 확장될 수 있어야 합니다.

따라서, 각 서비스는 외부에 노출된 API를 통해 상호작용합니다. 대표적으로 RESTful API가 사용됩니다. 이때 API를 통해 통신하는 서비스들은 HTTP/HTTPS를 이용한 통신을 합니다.

각 서비스는 독립적으로 배포되어서, 서로 다른 환경에서 실행될 수 있습니다. 예를 들어, A 서비스는 AWS의 EC2에서 실행되고, B 서비스는 Google Cloud Platform의 Kubernetes에서 실행될 수 있습니다. 따라서, 이러한 서버들은 다른 환경에서 실행되기 때문에 서로 다른 인프라에 연결될 수 있어야 합니다.


3. API Gateway

MSA (Microservice Architecture)에서 API 게이트웨이는 클라이언트와 백엔드 마이크로서비스 간의 통신을 중개하는 중간 매개체 역할을 합니다.

  • API 게이트웨이는 일반적으로 네트워크 경계 영역에 위치하며, 인터넷과 같은 공개 네트워크에서 마이크로서비스 애플리케이션에 대한 액세스를 허용하거나 거부하는 라우터 역할도 합니다.

API 게이트웨이는 다음과 같은 역할을 수행합니다.

  1. 라우팅(Routing)
  • API 게이트웨이는 요청된 URL 경로를 분석하여 해당 요청을 처리할 마이크로서비스 인스턴스를 식별합니다.
  1. 프로토콜 변환(Protocol translation)
  • API 게이트웨이는 클라이언트의 요청 프로토콜(HTTP, WebSocket 등)을 마이크로서비스가 지원하는 프로토콜로 변환합니다.
  1. 인증과 인가(Authentication and Authorization)
  • API 게이트웨이는 사용자 인증 및 권한 부여를 처리합니다. 사용자가 인증되지 않았거나 권한이 없는 경우, API 게이트웨이는 요청을 거부합니다.
  1. 로드 밸런싱(Load balancing)
  • API 게이트웨이는 여러 개의 인스턴스를 가진 마이크로서비스에 요청을 분산시키기 위해 로드 밸런서를 사용합니다.
  1. 서비스 모니터링(Service monitoring)
  • API 게이트웨이는 마이크로서비스의 상태를 모니터링하고 서비스 다운이나 응답 지연 등의 이슈를 탐지할 수 있습니다.

4. MSA에서의 메시지 큐

MSA에서는 서로 독립적인 서비스들이 상호작용하면서 하나의 큰 애플리케이션을 구성합니다. 그러나, 이러한 상호작용에서 각 서비스는 독립적으로 실행될 수 있어야 합니다. 따라서, 각 서비스들은 비동기적으로 통신해야 합니다.

이때 사용되는 것이 메시지 큐(Message Queue)입니다.

메시지 큐는 각 서비스 간에 메시지를 주고받으면서 통신을 합니다. 메시지 큐는 중간에 위치한 큐(Queue)를 통해 메시지를 주고받는 것으로, 비동기적으로 통신을 가능하게 합니다.

예를 들어, 서비스 A에서 메시지를 큐에 넣고, 서비스 B는 해당 큐에서 메시지를 가져와 처리합니다. 이때 각 서비스는 독립적으로 실행될 수 있기 때문에, 서비스 B가 일시적으로 다운되어도 큐에 있는 메시지는 계속해서 처리됩니다.

배달의 민족 김영한님의 MSA 설명

메시지 큐를 사용하면, 서비스 간의 결합도를 낮출 수 있습니다.

예를 들어, 서비스 A에서 서비스 B로 요청을 보낼 때, 서비스 B가 바쁘다면 요청을 처리하기 위해 대기하는 시간이 발생합니다. 이때, 메시지 큐를 사용하면, 요청을 큐에 넣고, 서비스 B가 요청을 처리할 준비가 되었을 때 큐에서 요청을 가져와서 처리합니다.

post-custom-banner

0개의 댓글