MSA와 Monolithic는 어떤게 다른가?
MSA와 Monolithic의 차이를 알기 위해서는 각 설계의 개념과 구조를 알아야 합니다. 아래 사진은 각 어플리케이션 설계 방식의 차이를 나타냅니다.
Monolithic vs Front & Back vs MSA
Monolithic이란 무엇인가?
Monolithic은 MSA와는 정반대되는 개념을 가지며, 모든 리소스를 하나의 어플리케이션으로 제공하고 배포하는 설계 구조입니다. Monolithic 설계 방식은 하나의 어플리케이션에서 프론트,데이터베이스,백엔드 모든 것을 관리합니다. MSA와의 가장 큰 차이점은 셋 중 하나의 리소스가 변경되었을때마다 하나의 어플리케이션을 배포해주어야 하는 특징을 가집니다.
Front & Back 구조란?
Front & Back 설계 방식은 기존 Monolithic 방식과는 다르게 프론트와 백엔드를 나누는 방식입니다. 프론트와 백엔드를 나눔으로써 별도의 독립된 API 서버를 가지게 되어 기존에는 생각할 수 없었던 오픈 API를 제공할 수 있는 구조가 되었습니다. 이러한 API 서버를 독립된 비즈니스 서비스별로 쪼개어 관리하는것이 MSA의 유래가 되었습니다.
MSA란?
MSA는 Micro Service Architecture의 약자로 작은 규모의 여러 비즈니스 서비스를 묶어 하나의 어플리케이션을 제공하고 배포하는 설계 구조입니다. MSA는 각각의 서비스별로 다른 개발언어와 데이터베이스를 사용할 수 있으며 컨테이너 기반으로 관리됩니다. 위 그림에서는 Product Service, RecoService를 각각 다른 개발언어와 데이터베이스를 사용하여 개발한 뒤 추후에 하나의 어플리케이션으로 배포됩니다. 이러한 작업을 하기 위하여 MSA는 Cloud Native 기반의 환경으로 구축하게 되며 Docker 컨테이너(Container)를 생성하여 각각의 서비스를 운영하게 됩니다.
MSA를 왜 사용하여야 하는가?
하나의 어플리케이션으로 모든 것을 관리하는 Monolithic 방식이 훨씬 간편하고 관리하기 쉬울텐데 구현이 어려워 보이는 MSA 방식을 왜 사용하여야 하는지 의문이 들게 될 것입니다. 그러한 이유 중 하나로 MSA는 클라우드 기반 어플리케이션(Cloud Nature Application)에 가장 적합하기 때문입니다.
Cloud Nature Application 특징
1. 확장 가능한 아키텍처
2. 탄력적 아키텍처
3. 장애 격리
클라우드 기반 어플리케이션은 수평적인 확장이 가능한 어플리케이션을 가져야 하며 확장된 서버로 시스템의 부하를 분산시키고 가용성을 보장해야 하기 때문에 이러한 특징을 Docker의 컨테이너(Container) 패키지를 사용하여 관리합니다.
탄력적 아키텍처란 분할 된 서비스 구조를 하나의 어플리케이션으로 생성-통합-배포해야 하기 때문에 이러한 어플리케이션의 변경을 유연하게 해야 합니다. MSA에서는 이런 아키텍처 구조를 가지기 위하여 External Gateway, CI/CD Automation, Service Mesh 구성 환경을 가지게 됩니다. 전체적인 MSA 구조는 아래와 같습니다.
마지막으로 장애 격리란 하나의 서비스에서 오류가 날시, 전체 서비스에 지장이 없어야 하는 특징입니다. 예를 들어 회원가입에 대한 서비스에 장애가 났을시, 주문에 대한 서비스나 조회에 대한 서비스는 지장 없이 운영이 되어야 합니다. 이러한 특징을 모두 가지는 것이 Cloud Nature Application의 MSA 구조입니다.
MSA 동작 방식
MSA는 독립된 서비스를 제공하기 위하여 REST API를 사용하는데 각각의 독립된 서비스를 REST API 인터페이스로 제공함으로써 클라이언트 단말 화면에서 접근할 수 있도록 합니다. 동작 순서는 다음과 같습니다.
1. 단말(APP)에서 요청하여 단말 요청 정보를 통합 관리해주는 API 게이트웨이를 호출합니다.
2. API 게이트웨이는 Service Router로 전달하고 Service Router는 Service Discovery에 해당 서비스 요청에 매칭되는 컨테이너 인스턴스가 있는지 확인합니다.
3. 요청에 맞는 서비스 정보가 있을 경우 로드 밸런싱을 통해 실제로 호출되는 각 컨테이너 서비스를 호출합니다.
정상적인 동작을 위해서는 위와 같은 과정이 필요하며 많은 기술이 요구 됩니다.
이러한 구조를 독립적으로 제공하는 프레임워크로는 스프링 클라우드가 있습니다.
추후에 스프링 클라우드를 사용한 MSA 서비스를 소개하도록 하겠습니다.
정리
MSA와 Monolithic 설계 구조가 생기게 된 결정적인 이유는 과거에 중앙집중적으로 관리하던 물리적 서버를 가상화하는 클라우드 기술이 나옴으로써 서버를 가상화하여 효율적인 관리를 하기 위하여 생기게 된 구조라고 생각합니다. 이러한 급진적인 변화에 맞춰 나또한 클라우드 기반의 어플리케이션을 개발할 수 있겠다는 생각을 하게 되었고, 그러한 개념과 구조를 이해해야 추후에 뒤쳐지지 않는 개발자가 될 수 있겠다는 생각이 들었습니다. 그렇기 때문에 클라우드 기반의 MSA 어플리케이션을 이해하고 개발하는 연습을 누구나 해야할 것입니다.
사진 출처 : 인프런 Dowon Lee 저자의 Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA) 강의 화면
'MSA' 카테고리의 다른 글
[MSA] API Gateway Service - Spring Cloud Routing Gateway (2) | 2023.12.28 |
---|---|
[MSA]Service Discovery와 Spring Cloud Netflix Eureka (0) | 2023.08.27 |