YERIEL 2022. 2. 8. 13:00

 

https://medium.com/koderlabs/introduction-to-monolithic-architecture-and-microservices-architecture-b211a5955c63

Monolithic Architecture (모놀리식 아키텍쳐)

  • 전통적인 아키텍처 방식을 지칭
  • 하나의 서비스 또는 하나의 어플리케이션이 하나의 거대한 아키텍처를 가질 때 '모놀리식' 하다고 한다.
  • 내부 요소들간의 의존성이 높다.
  • 각 비즈니스 컴포넌트들이 하나의 강한 결합 구조를 가지고 통잃성을 갖는다.

장점

  • 개발이 용이하다. 
  • 어떤 서비스든지 개발되어 있는 환경이 같아서 복잡하지 않다. - 개발 툴이 단일 어플리케이션 구축에 초점이 맞춰저 있기 때문
  • End-to-End 테스트가 용이하다. - MSA의 경우 테스트에 필요한 서비스들을 모두 동작시켜야 한다.
  • 쉽게 고가용성 서버 환경을 만들 수 있다. - 같은 어플리케이션으로 하나 더 만들면 된다.
  • 배포하기 용이하다. - 서버에 접속하여 WAR 파일을 복사하면 된다.
  • 확장하기 쉽다 - 로드 밸런서 (load balancer) 등을 이용하여 확장하기 쉽다.

단점

  • 서비스가 커질수록 단점이 커진다.
  • 서비스가 커지면 어플리케이션 구동시간이 늘어나고, 빌드 및 배포 시간도 길어진다.
  • 특정 부분만을 수정하여도 전체를 다시 빌드하고 배포 해야한다.
  • 일부분의 오류가 전체에 영향을 미친다.
  • 기능별로 알맞는 기술, 언어, 프레임워크를 선택하기 어렵다.

 

MicroService Architecture (마이크로서비스 아키텍처)

  • 하나의 큰 어플리케이션을 여러 개의 작은 어플리케이션으로 쪼개어 변경과 조합이 가능하도록 만든 아키텍처
  • 소프트웨어가 잘 정의된 API를 통해 통신하는 소규모의 독립적인 서비스로 구성되어 있는 경우의 소프트웨어 개발을 위한 아키텍처 및 조직적 접근 방식.
  • 서비스를 모듈 단위로 사용하고, 각 서비스는 다른 서비스가 함부로 넘어오지 못하게 각각의 API를 제공하며 우회하여 접근할 수 없게 한다.
  • 결합력이 낮고, 오직 API를 통해서만 통신한다.
  • 서비스는 각각 자체 DB를 가진다.

장점

  • 크고 복잡한 어플리케이션이어도 지속적인 배포(CD)가 가능하다.
  • 기능 별로 마이크로서비스를 개발하고, 작업 할당을 서비스 단위로 하면 개발자가 이를 이해하기 쉽다.
  • 단일 서비스의 규모가 작아지기 때문에 각 서비스 별 관리가 용이하다.
  • 추가 또는 수정사항이 있을 경우 마이크로서비스만 빠르게 빌드, 배포 가능하다.
  • 해당 기술에 맞는 기술, 언어 등을 선택하여 사용할 수 있다. 새로운 기술을 서비스 별로 실험하고 도입하기 편하다.
  • 결함 격리가 잘 된다. 일부분의 오류가 있으면 해당 기능에만 오류가 발생한다. 그 부분만 수정하면 된다.

단점

  • 작은 여러 서비스들이 분산되어 있기 때문에 모니터링이 힘들다.
  • 적절한 서비스로 분해하는 것이 어렵다. 잘못 분해하면 분산 모놀리스를 구현하게 될 수 있다.
  • 다른 서비스를 호출하는 코드가 추가되기 때문에, 개발이 조금 까다롭다.
  • 통신관련 오류가 발생할 수 있다. - 다른 서비스를 호출하기 때문이다.
  • 성능이 떨어질 수 있다. 서비스 간 호출 시 API를 사용하기 때문에, 통신 비용이나, Latency가 그만큼 늘어나게 된다.