MSA 환경의 서비스를 구현 해 보지 않아서 자세히 모르지만, MSA의 기본 개념에 대해서 알아봅니다.
MSA(Microservices Architecture)는 분산 시스템 아키텍처의 하나로, 작고 독립적인 서비스들이 네트워크를 통해 상호작용하면서 하나의 큰 애플리케이션을 형성하는 방식입니다.
모놀리식 아키텍처에서는 모든 기능이 하나의 애플리케이션에서 구현되어 있기 때문에, 시스템이 복잡해질수록 유지보수와 개발이 어려워지고 확장성도 떨어집니다.
하지만 MSA에서는 각각의 서비스가 독립적으로 개발, 배포, 확장될 수 있기 때문에
전체 시스템의 유지보수와 개발이 용이해집니다. 또한, 각각의 서비스는 서로 다른 기술 스택을 사용할 수 있어 개발자들이 자신들이 선호하는 언어와 프레임워크로 개발할 수 있는 자유도가 높아지고, 적합한 서비스별 최적화가 가능해지기도 합니다.
하지만, MSA는 모놀리식 아키텍처보다 구축 및 운영에 대한 복잡성이 높습니다. 서비스 간의 통신과 데이터 공유, 로깅과 모니터링 등 다양한 부분에서 추가적인 노력이 필요합니다.
예시로, 전자상거래 애플리케이션을 MSA로 구현할 경우, 다음과 같은 서비스로 분리할 수 있습니다.
각각의 서비스는 독립적으로 개발, 배포, 확장이 가능하며, 서비스 간의 통신은 REST API 등을 사용하여 이루어집니다.
MSA에서 각각의 서비스는 독립적으로 개발, 배포, 확장될 수 있어야 합니다.
따라서, 각 서비스는 외부에 노출된 API를 통해 상호작용합니다. 대표적으로 RESTful API가 사용됩니다. 이때 API를 통해 통신하는 서비스들은 HTTP/HTTPS를 이용한 통신을 합니다.
각 서비스는 독립적으로 배포되어서, 서로 다른 환경에서 실행될 수 있습니다. 예를 들어, A 서비스는 AWS의 EC2에서 실행되고, B 서비스는 Google Cloud Platform의 Kubernetes에서 실행될 수 있습니다. 따라서, 이러한 서버들은 다른 환경에서 실행되기 때문에 서로 다른 인프라에 연결될 수 있어야 합니다.
MSA (Microservice Architecture)에서 API 게이트웨이는 클라이언트와 백엔드 마이크로서비스 간의 통신을 중개하는 중간 매개체 역할을 합니다.
API 게이트웨이는 다음과 같은 역할을 수행합니다.
MSA에서는 서로 독립적인 서비스들이 상호작용하면서 하나의 큰 애플리케이션을 구성합니다. 그러나, 이러한 상호작용에서 각 서비스는 독립적으로 실행될 수 있어야 합니다. 따라서, 각 서비스들은 비동기적으로 통신해야 합니다.
이때 사용되는 것이 메시지 큐(Message Queue)입니다.
메시지 큐는 각 서비스 간에 메시지를 주고받으면서 통신을 합니다. 메시지 큐는 중간에 위치한 큐(Queue)를 통해 메시지를 주고받는 것으로, 비동기적으로 통신을 가능하게 합니다.
예를 들어, 서비스 A에서 메시지를 큐에 넣고, 서비스 B는 해당 큐에서 메시지를 가져와 처리합니다. 이때 각 서비스는 독립적으로 실행될 수 있기 때문에, 서비스 B가 일시적으로 다운되어도 큐에 있는 메시지는 계속해서 처리됩니다.
메시지 큐를 사용하면, 서비스 간의 결합도를 낮출 수 있습니다.
예를 들어, 서비스 A에서 서비스 B로 요청을 보낼 때, 서비스 B가 바쁘다면 요청을 처리하기 위해 대기하는 시간이 발생합니다. 이때, 메시지 큐를 사용하면, 요청을 큐에 넣고, 서비스 B가 요청을 처리할 준비가 되었을 때 큐에서 요청을 가져와서 처리합니다.