03. Monolithic vs MSA

woo·2024년 2월 14일
0

모놀리식(Monolithic)이란?

  • 모든 애플리케이션의 필요 요소들을 하나의 소프트웨어 안에 전부 포함시킴
  • 서비스 내 모든 내용이 하나의 어플리케이션에서 유기적으로 연결되어 작동
  • 배포되기 위하여 서로 의존성을 가진 채 패키징되고, 운영 서버에 배포됨


이미지와 같이, 모든 업무 로직이 하나의 어플리케이션으로 패키지되어 서비스된다
또한 어플리케이션의 데이터 또한 한 곳에 모여 참조되어 서비스된다.

마이크로서비스(MicroService)란?

  • 모놀리식과 상반된 방식으로, 어플리케이션 각각의 구성 요소 및 서비스를 분리하여 개발하고 운영
  • 개별 서비스가 다른 서비스에 영향을 주지 않거나, 주는 영향이 최소화됨
  • 용도에 맞는 컨테이너를 모아서 사용하게 됨

모놀리식과 마이크로서비스

1. 모놀리식의 아키텍처의 단점

  • 단일 저장소를 사용하는 등 모든 서비스와 요소들이 패키징되어 서비스되어야 하기 때문에 시스템의 일부만 수정한다 하더라도 전체 어플리케이션을 다시 빌드, 테스트, 패키징해야 한다.

Sam Newman의 마이크로서비스 정의, 특징

통신할 수 있는 작은 규모의 여러 서비스들의 묶음이 모여서 하나의 어플리케이션을 구성

  • 비즈니스 기능을 중심으로 구축되어야 함
  • 완전하게 자동화된 배포 시스템을 사용해야 한다
  • 최소한의 중앙 집중식 관리를 지향하고, 서로 다른 프로그래밍 언어와 데이터 저장 기술을 사용할 수 있다
    -> 개별 서비스에 최적화된 언어와 데이터베이스를 사용할 수 있다!

즉, 마이크로서비스의 핵심은 어플리케이션을 구성하는 다양한 서비스들의 경계를 잘 분리하고, 각 서비스의 특성에 알맞은 기술을 사용하여 개발한 뒤 Restful API와 같은 매커니즘을 통해서 서로 데이터를 제공하여 사용할 수 있도록 하는 것이다

중간 단계

모놀리식과 마이크로서비스의 중간 단계로 프론트엔드-백엔드를 구분하는 식으로 구분할 수 있다


모놀리식과 중간 단계, 마이크로서비스의 아키텍처 구상도이다


더욱 차이가 크게 드러나는 아키텍처 이미지이다

마이크로서비스의 특징 9가지

꼭 마이크로서비스인가?

모든 서비스는 마이크로서비스일 필요 없다

  1. 마이크로서비스는 기존 개발 대비하여 비용과 시간이 더 투자되어야 한다. 투자할 수 있고 정확히 비용 산출했는가?
  2. 또한 독립 라이프 사이클을 통해 각각 서비스가 독립적으로 운영되도록 경계가 잘 나누어져 있는지?
  3. 각가의 서비스 운영에 있어서 서비스 유지보수 및 확장, 스케일링이 용이한지?
  4. 오류가 발생하더라도 그 오류가 다른 서비스에 영향을 미치지 않도록 영향 범위가 최소화되었는가?
  5. 외부 종속성과 상호작용이 단순화되어 있는가?
  6. 다양한 프로그래밍 언어와 저장소 기술 등을 쓸 수 있도록 지원하는가?
profile
BE, DE(지망생)

0개의 댓글