본문 바로가기
BackEnd

모노리틱 아키텍처(Monolithic Architecture) vs 마이크로 서비스 아키텍처(Micro Service Architecture)

by 푸고배 2022. 2. 7.

모노리틱 아키텍처(Monolithic Architecture)

기존의 전통적인 웹 시스템 개발 스타일로, 하나의 애플리케이션 내에 모든 로직들이 들어가있는 "통짜 구조"이다.

예를 들어, 온라인 쇼핑몰 애플리케이션이 있을 때, 톰캣 서버에서 도는 WAR 파일(웹 애플리케이션 패키징 파일)내에, 사용자 관리, 상품 관리, 주문 관리 등 모든 컴포넌트들이 들어있고 이를 처리하는 UX로직까지 하나로 포장되어 들어가있는 구조이다. 

장점

  • call-by-reference : 각 컴포넌트들은 상호 호출을 함수를 이용한 call-by-reference 구조를 취한다.
  • 간편한 개발 : 전체 애플리케이션을 하나로 처리하기 때문에, 개발툴 등에서 하나의 애플리케이션만 개발하면 된다.
  • 간편한 배포 : 배포 역시 간편하며 테스트도 하나의 애플리케이션만 수행하면 된다.
  • 규모가 작은 애플리케이션에서는 배포 및 운영 관리가 용이하다.

단점

  • 긴 빌드 및 배포 시간, 서버 기동 시간 : 규모가 큰 애플리케이션에서는 크기가 크기 때문이다.
  • 개발 협업의 어려움 : 프로젝트를 진행하는 관점에서도 한 두 사람의 실수가 전체 시스템에 영향을 미친다.
  • 구조 및 특성 이해의 어려움 : 시스템의 구조가 커질수록, 개인이 전체 시스템의 구조와 특성을 이해하는 것이 어려워진다.
  • 잦은 배포가 있는 시스템에서의 불편함 : 특정 컴포넌트 수정 후 재배포 시 전체 애플리케이션을 재컴파일한다.
  • 기술 도입의 비유연성 : 컴포넌트 별로, 기능/비기능적 특성에 맞춰서 다른 기술을 도입하고자 할때 유연하지 않다.

 

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

대용량 웹 서비스가 많아짐에 따라 정의된 아키텍처로, SOA(Service Oriented Architecture:서비스 지향 아키텍처)에 근간을 두고 있다. SOA엔터프라이즈 시스템을 중심으로 고안된 아키텍처라면, 마이크로 서비스 아키텍처대용량 웹 서비스 개발에 맞는 구조로 사상이 경량화 되고, 대규모 개발팀의 조직 구조에 맞도록 변형된 아키텍처이다.

 

아키텍쳐 구조

서비스

데이터에서부터 비지니스 로직까지 독립적으로 상호 컴포넌트간의 의존성 없이 개발된 컴포넌트(vertical slicing)로 REST API와 같은 표준 인터페이스로 외부에 제공한다. 서비스의 경계는 구문 또는 도메인(업무)의 경계를 따른다.

 

마이크로 서비스 아키텍쳐의 구조

 

각 컴포넌트는 서비스라는 형태로 구현되고 API를 이용하여 타 서비스와 통신한다. 배포 구조관점에서도 각 서비스는 독립된 서버로 타 컴포넌트와의 의존성 없이 독립적으로 배포된다.

 

데이터 분리

보통 모노리틱 서비스의 경우에는 하나의 통 데이터베이스(보통 RDBMS를 사용) 하는 경우가 일반적이지만, 마이크로 서비스 아키텍쳐의 경우, 서비스가 API에서부터 데이터베이스까지 분리되는 수직 분할 원칙 (Vertical Slicing)에 따라서 독립된 데이타 베이스를 갖는다.

 

장점

  • 공통 기능 처리(Cross cutting function handling) : 중복되는 서비스 기능 개발 방지, 서비스 재사용이 가능하다.
  • 유연한 배포 모델 : 변경이 있는 서비스 부분만 재배포하면 되기 때문에, 빠르고 전체 시스템에 미치는 영향도를 최소화하는 수준에서 배포 진행이 가능하다.
  • 유연한 확장성 : 부하가 많은 특정 서비스 컴포넌트에 대해서만 확장이 가능하다.
  • Conway`s Law(컨웨이의 법칙) : 소프트웨어의 구조는 그 소프트웨어를 만드는 조직의 구조와 일치한다.

단점

  • 성능 문제 : 서비스간의 호출로 API 통신을 이용하기 때문에 marsharing 오버헤드가 발생하고, 호출을 위한 네트워크 전송 시간이 추가로 소요된다.
  • 메모리 문제 : 각 서비스를 독립된 서버에 분할 배치하기 때문에, 중복되는 모듈에 대해서 그만큼 메모리 사용량이 늘어난다.
  • 테스팅의 어려움 : 서비스들이 각각 분리가 되어있고, 다른 서비스에 대한 종속성을 가지고 있기 때문에 테스팅의 복잡도가 올라간다.
  • 운영 관점의 문제 : 서비스 별로 다른 기술을 사용할 수 있으므로 운영을 해야할 대상 시스템의 수가 늘어나고, 그에 따른 기술의 수도 늘어난다.

 


Reference

 

대용량 웹서비스를 위한 마이크로 서비스 아키텍쳐의 이해

마이크로 서비스 아키텍쳐 (MSA의 이해) 조대협(http://bcho.tistory.com) 배경 마이크로 서비스 아키텍쳐(이하 MSA)는 근래의 웹기반의 분산 시스템의 디자인에 많이 반영되고 있는 아키텍쳐 스타일로,

bcho.tistory.com

반응형

'BackEnd' 카테고리의 다른 글

REST API 설계 가이드  (0) 2022.01.13
브라우저 동작 원리  (0) 2022.01.10
Data Warehouse Vs Data Lake  (2) 2021.10.12

댓글