공부/서버

[공부/서버] MSA (MicroService Architecture)

오잎 클로버 2022. 5. 9. 14:22
728x90

MSA란?

작고, 독립적으로 배포가 가능한 각각의 기능을 수행하는 서비스로 구성된 아키텍처라고 할 수 있다.
마이크로 서비스는 온전히 독립적으로 배포가 가능하며, 다른 기술 스택(개발 언어, 데이터베이스 등)이 사용 가능한 단일 비즈니스 영역에 초점이 있다.

 

MSA의 등장 배경


출처: 스토리T (TmaxSoft)

Monolithic Architecture는 소프트웨어의 모든 구성 요소가 한 프로젝트에 통합되어 있는 형태이다. 

아키텍처가 단순하며, 유지보수가 용이하다. 하지만 일정 규모 이상의 서비스, 혹은 수백명의 개발자가 투입되는 프로젝트에서는 한계가 보인다. Monolithic Architecture의 한계는 다음과 같습니다.

  • 서비스/프로젝트가 커질 수록 영향도 파악 및 전체 시스템 구조의 파악을 하는 데 어려움이 생긴다.
  • 빌드 시간 및 테스트 시간, 그리고 배포시간이 기하급수적으로 늘어나게 된다.
  • 서비스를 부분적으로 scale-out하기 어려워진다.
  • 부분의 장애가 전체 서비스의 장애로 이어지는 경우가 발생한다.

 

MSA는 비즈니스 민첩성과 관련이 큽니다. 경영자는 좋아하지만, 개발자는 싫어한다.

서비스나 프로젝트가 크고, 복잡하고, 정기적으로 운영될 수록, MSA의 장점이 더욱 드러나게 된다.

 

MS란? MicroService


독립적인 배포가 가능한 스스로 작동할 수 있는 작은 서비스
  • 각각의 서비스는 크기만 작을 뿐, 서비스 자체는 하나의 모놀리틱 아키텍처와 유사한 구조를 가짐
  • 각각의 서비스는 독립적인 배포가 가능해야함
  • 각각의 서비스는 다른 서비스에 대한 의존성을 최소화해야함
  • 각 서비스는 개별 프로세스로 구동되며, REST와 같은 가벼운 방식으로 통신되어야함

일반적으로 하나의 서비스는 하나의 기능이며, 하나의 프로젝트라고 볼 수 있지만, 비즈니스와 시스템의 설정에 맞게

서비스의 범위(크기)를 설정하는 것이 중요하다.

 

MSA의 장점


  • 각각의 서비스는 모듈화가 되어있으며, 이러한 모듈끼리는 RPC 또는 message-driven API 등을 이용하여 통신한다. 이러한 MSA는 각각 개별의 서비스 개발을 빠르게 하며, 유지보수도 쉽게 할 수 있도록 한다.
  • 팀 단위로 적절한 수준에서 기술 스택을 다르게 가져갈 수 있다. 회사가 java의 spring 프레임워크 기반으로 MSA를 적용하면, node.js로 다른 모듈을 개발하여 연동함에 무리가 없다.
  • MS(마이크로 서비스)는 서비스 별로 독립적인 배포가 가능하다. 따라서 지속적인 배포 CD도 모놀로식에 비해서 가볍게 할 수 있다.
  • MS(마이크로 서비스)는 각각 서비스의 부하에 따라 개별적으로 scale-out이 가능하다. 메모리, CPU적으로 상당부분이 이득이 된다.

 

MSA의 단점


  • MSA는 모놀리식에 비해 상대적으로 많이 복잡하다. 서비스가 모두 분산되어 있기 때문에 개발자는 내부 시스템의 통신을 어떻게 가져가야 할지 정해야 한다. 또한, 통신의 장애가 서버의 부하 등이 있을 경우, 어떻게 transaction을 유지할 지 결정하고 구현해야한다.
  • 모놀리식에서는 단일 트랜잭션을 유지하면 됐지만, MSA에서는 비즈니스에 대한 DB를 가지고 있는 서비스도 각기 다르고, 서비스의 연결을 위해서는 통신이 포함되기 때문에 트랜잭션을 유지하는 것이 어렵다.
  • 통합 테스트가 어렵다. 개발 환경과 실제 운영 환경을 동일하게 가져가는 것이 쉽지 않다.
  • 실제 운영환경에 대해서 배포하는 것이 쉽지 않다. MS(마이크로 서비스)의 경우, 서비스 1개를 재배포한다고 하면, 다른 서비스들과의 연계가 정상적으로 이루어지고 있는 지도 확인해야한다.

 

출처


 

 

MSA 제대로 이해하기 -(1) MSA의 기본 개념

lego-708086_1920.jpg 마이크로 서비스 아키텍쳐를 한마디로 다음과 같이 표현할 수 있습니다. "하나의 큰 어플리케이션을 여러개의 작은 어플리케이션으로 쪼개어 변경과 조합이 가능하도록 만든 아

velog.io

 

 

이상입니다.