MSA란

(출처 : 1. Micro Services Architecture 란 :: 개발하며 놀자 (tistory.com) )

Monolithic

소프트웨어의 모든 구성요소들이 하나의 Application에 통합되어 개발,빌드,배포하는 설계

MSA1

각각의 서비스들은 하나의 어플리케이션 안에 기능들이 강하게 결합

한계점

  1. 부분적 장애가 전체 시스템의 장애로 이어질 수 있음
    1. 만약 주문 서비스의 트래픽 증가로 모든 자원이 고갈되어 버린다면 전체 시스템의 장애로 이어질 수도 있음.
    2. 통합 DB에 문제점이 발생하면 모든 서비스의 문제로 확대
  2. 결합도가 강하다
    1. 오랜 기간 프로젝트가 운영되면 공통기능이 거대해 질수 있는데 이를 수정하면 연계된 부분도 함께 수정하고 테스트 해야하는 불필요한 노력 오버헤드
  3. 클라우드 환경에 적합하지 않음.
    1. 서비스가 잘되어 인스턴스를 늘려야 할 경우 Scale-out이 필요한데, 잘 사용되지 않는 기능까지 다같이 늘려버리니까 효율이 떨어지지
  4. 배포가 용이하지 않음
    1. 전체 프로젝트를 배포해야 하기 때문에 부담이 따름. 작은 단위 기능만 배포가 어려우며 이에 따라 데브옵스 환경 혹은 지속적인 배포에 어려움이 따름.

MSA 도입

MSA2

통합되어 있던 Application과 Database를 ”상품”, “배송”, “회원관리”, “주문”의 각각의 서비스별로 작은 단위로 분산하여 구성하며 상호간에 약속된 규격으로 통신합니다. 이로서 만약 하나의 서비스 혹은 DB에서 장애가 발생하더라도 다른 서비스로의 영향은 아주 제한적이게 됩니다.

  • 대표적인 통신 방식으로는 REST기반의 API 통신이 있으며, 그외에도 Message Queue 등 다양한 통신 프로토콜을  이용 합니다.
  • API Gateway는 외부에서의 유일한 진입로 입니다. 자세한 사항은 다음장에서 다룰 예정입니다.

또한 개발과 운영 관점에서도 다양한 장점이 존재 합니다.

각 서비스들은 Rest API 등으로 상호간에 규칙만 정의하면 서로의 서비스에 영향을 끼치지 않습니다.

하여, 개인 혹은 팀 단위의 서비스들은 오로지 자신의 서비스 개발&운영에 집중할 수 있습니다.

만약 프로젝트에 신규 인력이 투입된다면 모놀리식 프로젝트에서는 해당 신규 인력의 당담업무를 분석하는데 있어 다른 업무와의 연관관계가 높아 파악이 어렵지만, MSA 프로젝트에서는 외부와의 Interface만 알면 자신의 업무 파악에 집중할 수 있기에 효율성이 증가됩니다.

또한 운영중에도 신규 기능 등의 개발 요구사항이 계속 반영되어야 하기 때문에 작은 서비스 단위의 개발, 테스트, 운영 배포가 용이해집니다.

또 다른 장점으로는 모놀리식 아키텍처와 달리 MSA 기반에서는 새로운 언어나 기술의 도입이 쉽습니다.

기존의 운영 서비스들과 Interface만 약속하면 새로 만들어질 서비스에서 원하는 언어와 기술로 개발하면 되니까요.


MSA의 단점

  1. 일단 아키텍처 측면에서 단조로운 모놀리식보다 복잡하다.
    1. 다양하게 분산된 서비스들을 관리하고 통신하여 하하며, 장애가 발생하였을 경우 대처하는 방법도 까다롭다 보니 모놀리식 아키텍처에서 신경 쓰지 않아도 될 다양한 이슈들이 발생합니다
  2. Database의 트랜잭션을 유지하기가 어렵다는 것이 큰 이슈중의 하나
    1. 예를 들어 모놀리식 아키텍처에서는 단 한번의 서비스 요청이 하나의 트랜젝션으로 묶일수가 있어(DB가 하나이기에)

      행여 처리중에 오류가 발생하더라도 전체 Rollback이 쉽습니다.

      하지만, MSA에서는 각 서비스마다 DB가 분리되어 있기 때문에 여러 서비스를 거치다 특정 서비스에서

      오류가 발생했을 경우 이미 완료처리된 서비스를 Rollback 하는 것이 쉽지 않습니다.

  3. 최초 프로젝트 시작할 경우 많은 시간과 비용이 발생합니다.
    1. 일반적으로MSA로 프로젝트를 진행할 경우 설계 부터 시작하여 다양한 기술들의 결정, 구현, 테스트 등 전반의 과정에서 모놀리식과 비교하여 더 많은 시간과 비용이 발생합니다.

      하여 스타트업과 같은 제한된 비용으로 빠르게 출시하는 것이 중요한 프로젝트에서는 처음부터 MSA를 시작하는 것보다 모놀로식으로 빠르게 오픈하고 이후 프로젝트가 더욱 활성화 되는 시점에 MSA를 도입하는 것도 좋은 방안이 될 수 있습니다.