AWS

Monolithic VS MSA

농담농담 2022. 9. 8. 16:25

Monolithic

프로젝트에 관한 모든 부분을 하나의 서버에 배치하는 방법

내부 요소간 의존성 강하기 떄문에 필연적으로 구조적인 결합이 강력하게 유지되는 결과를 초래, 각 비즈니스 컴포넌트들이

하나의 강한 결합 구조를 지니고 통일성이 있다. 비즈니스 로직이 서비스에 최적화된 코드를 만들어내는데 좀 더 집중할 수 있는

반면, 복합적인 예외를 만들 수 있는 위험성을 내포하게 된다.

장점

  • 개발 초기 단순한 아키텍쳐 구조와 개발에 용이
  • 어떤 서비스든 개발되어있는 환경이 같아서 단순하다.
  • 쉽게 고가용성 서버 환경 제작 가능
  • End-to-End 테스트에 용이

단점

  • 프로젝트 규모가 커짐에 따라 앱 구동시간 , 배포 시간 증가
  • 일부를 수정하더라도 전체를 다시 빌드하고 배포해야한다.
  • 유지보수가 어렵다.
  • 일부분의 오류가 전체에 영향
  • 기능별로 알맞는 기술, 언어, 프레임워크를 선택하기 어렵다.

MSA(Micro Service Architecture)

가장 간단하게는 프론트, 백엔드를 물리적으로 다른 서버에 배치하는 방법

독립적으로 배포 가능한 각각의 기능을 수행하는 서비스로 구성

일정 규모 이상의 서비스에서 Monolithic Architecture가 갖는 한계를 보완하고자 등장하였다.

장점

  • 유지보수가 쉽다
  • 기능별로 알맞는 기술, 언어, 프레임워크를 선택할 수 있다.
  • 서비스의 부하에 따라 개별적으로 scale-out이 가능하기 때문에 메모리, CPU적으로 상당부분 이득

단점

  • Monolithic에 비해 복잡
  • 서비스가 모두 분산되어 있으므로 내부 시스템의 통신을 어떻게 가져가야 할지 정해야한다. 또한, 통신의 장애와 서버의 부하 등이 있을 경우 어떻게 transaction을 유지할지 결정하고 구현해야한다.
  • 통합 테스트가 어렵다. 개발 환경과 실제 운영환경을 동일하게 가져가는 것이 쉽지 않다.