System Engineering/Cloud

Cloud #2. MSA(Microservices Architecture)와 Monolithic

ZunoXI 2020. 4. 7.

이미지 출처 : https://www.openlegacy.com/api-software/microservices

 

 

 

MSA : Micro Service Architecture, '사전적으로는 애플리케이션을 느슨히 결합된 서비스의 모임으로 구조화하는 서비스 지향 아키텍처 스타일의 일종인 소프트웨어 개발 기법' 이라고한다.

 

 

 

간단하게 정리하자면 기존에 거대한 하나의 소프트웨어 덩어리로 개발했던 것(Monolithic)에 비해 큰 레고 블록을 쌓기 위해 여러 개의 레고 블록을 결합하여 만든 개발 방법이라고 할 수 있을 것 같다.

 


 

우선 기존 Monolithic Architecture 같은 경우는 거대한 애플리케이션의 모든 구성요소가 한 개의 프로젝트에 포함이 되어 있는 형태이다. 소규모뿐만 아니라 현재 대부분의 프로젝트들이 해당 방법으로 프로그램을 개발되고 있다.

 

 

이번 포스팅에서는 간략하게나마 MSA의 특징과 장단점을 살펴보며 기존의 방식과 어떤 점이 다른지 확인해보려 한다. MSA는 일반적으로 작은 파트들이 하나의 애플리케이션 혹은 모듈로서의 기능을 하며 이러한 서비스들이 결합되어 거대한 서비스를 이룬다.

 

 

 

MSA의 장점

 

  • 각각의 서비스들이 독립적으로 배포(Deploy)할 수 있다.
    (배포 시 서비스의 중단이 없으며 빠른 배포가 가능함)
    - 기존의 방식은 일부 모듈의 변경사항에 따라 전체 애플리케이션의 패키징에 영향을 줬다.
  • 서비스의 틀 안에서 각기 다른 프로그래밍 언어, 데이터베이스, 하드웨어, 소프트웨어 환경을 사용하여 구현 가능
    - 기존 방식은 통일화된 환경에서 프로그램을 개발하고 사용했어야 한다.
  • 특정 서비스에 대한 확장성이 용이하다.
    - 기존 방식은 하나의 완성된 프로젝트로 모듈의 확장이 어려웠다.
  • 장애 발생 시 부분적으로 해결이 수월하다.
    - 기존 방식은 서로 의존성이 높기 때문에 장애 발생 시 전체적으로 인과관계를 확인해야 했다.

 

이러한 MSA 방식으로 제작한 각각의 모듈들은 최근 Docker와 쿠버 네티스를 활용하여 마치 하나의 애플리케이션처럼 보이게 할 수 있다. 우리는 이를 통상적으로 '클러스터(Cluster)'라고 부른다.

 

 

일반적으로 Clustering은 인프라 엔지니어링에서 여러 대의 서버 컴퓨터들을 연결하여 하나의 시스템처럼 동작하게 하는 컴퓨터의 집합을 말하지만, 이러한 예시에서도 동일한 용어를 사용할 수 있겠다.

 

 

 

 

MSA의 단점

 

항상 장점만 있는 것은 없듯이 MSA도 일부 단점이 존재한다.

 

  • MSA는 기존 Monolithic 방식보다 복잡한 아키텍처로 큰 서비스를 제공할 때 그 복잡도가 커질 수 있다.
  • 데이터가 여러 서비스에 걸쳐 분산되어 있기 때문에 한 번에 조회가 어렵다. 
  • 클라이언트의 호출이 내부적으로 여러 마이크로 서비스를 거쳐 일어나기 때문에 트랜잭션에 대한 로그 추적이 어렵다. (이를 추적하기 위해 사용하는 것이 Spring Cloud Sleuth 같은 방법이 있다.)

 

이미지 출처 : https://www.pinterest.co.kr/pin/604467581216385264/

장단점에서 알 수 있듯이 MSA가 항상 좋은 것은 아니다. 분명 기존에 운영하던 거대 시스템들은 시스템의 안정성을 위해서라도 기존의 모놀리틱 방식을 사용할 수밖에 없는 경우가 있을 것이다.

 

 

이에 위와 같은 유의 사항을 충분히 인지하고 프로그램 개발 방법을 선택하는 것은 실 운영자의 몫이다.

반응형

댓글