본문 바로가기
개발 공부/소프트웨어

Moduler Monolithic 아키텍처

by 개발인생 2024. 12. 2.
반응형

이번 포스팅에서는 모듈러 모놀리스 아키텍처에 대해 알아보겠습니다.

모듈러 모놀리스를 알아보기 전에 먼저 MSA부터 간단히 살펴보는게 좋을 것 같습니다.

MSA

MSA란 Microservice Architecture의 약자로 독립적으로 배포가 가능한 서비스들로 구성된 아키텍처입니다.

쉽게 말해 기존의 거대한 하나의 프로젝트로 되어있는 서비스가 아닌 각 도메인 별로 잘게 나누어진 프로젝트들이 모여 서비스를 제공하는 것입니다.

MSA의 장점은 대략 적으로 정리하면 다음과 같습니다.

  • 단일 서비스의 장애가 전체 시스템에 영향을 미치지 않도록 합니다.
  • 필요에 따라 유연하게 서비스를 추가하거나 제거하는 등 확장에 용이합니다.
  • 독립적인 배포가 가능하기 때문에 빠르게 변화하는 시장에 대응할 수 있습니다.

반면에 단점은 다음과 같습니다.

  • 서비스가 분리되어 있기 때문에 관리하기가 어렵고 인프라 비용이 많이 듭니다.
  • 여러 개의 서비스가 느슨하게 결합되어 있기 때문에 트랜잭션 관리가 까다롭습니다.

사정이 이렇다보니 보통은 처음부터 MSA로 아키텍처를 구성하기보다는 어느정도 서비스가 커졌을 때 MSA로 마이그레이션하는 사례가 많습니다.

세간에는 MSA가 마치 만능처럼 여겨지고 새로운 프로젝트에서도 MSA를 채택하여 개발하기도 합니다.

최근에는 MSA에 많은 비용과 복잡성 때문에 MSA 아키텍처를 걷어내는 기업도 있다고 들었습니다.

모듈형 모노리스

많은 기업에서 MSA에 대한 많은 시도가 있었고, 실패와 성공 사례가 늘어가는 와중에 와중에 시몬 브라운이 모듈화로 훌륭한 모노리틱 스타일 시스템을 만들 수 있다고 소개했습니다.

모듈형 모노리스란 우리가 흔히 알고있는 모노리스와 마이크로서비스의 장점을 결합한 아키텍처입니다.

모노리스는 다음과 같은 장점이 있습니다.

  • 단일 프로젝트에 모든 코드가 모여있다.
  • 시스템 구조가 간결하고 빠르게 구축할 수 있다.
  • 테스트 및 배포 파이프라인 구성이 간단하다.
  • 인프라 구축과 운용이 간결하다.

마이크로서비스는 다음과 같은 장점이 있습니다.

  • 콘웨이 법칙: 시스템을 조직 구조에 맞게 더 적절히 정렬할 수 있다.
  • 서비스를 독립적으로 배포 또는 확장할 수 있다.
  • 높은 장애 격리성
  • 문제 해결에 특화된 다양한 기술을 도입할 수 있다.

결국은 MSA를 모노리스 환경 내에서 구현해놓은 것입니다.

이렇게만보면 감이 잡히지 않을텐데요, 이해하기 위해서는 먼저 멀티 모듈에 대해서 짚고 넘어가야합니다.


멀티모듈

멀티 모듈이란 말 그대로 여러개의 모듈로 이루어진 프로젝트입니다.

기존의 하나의 모듈에서 모든 것을 처리하는 게 아닌, 여러개의 모듈로 나눠서 프로젝트를 구성하는 것입니다.

여기에서 모듈이란 패키지의 집합체이며 독립적으로 배포될 수 있는 코드의 단위입니다.

멀티 모듈로 구성된 프로젝트도 어떻게 멀티 모듈을 나누었느냐에 따라서 종류가 다양하지만 기본적으로는 레이어드형으로 모듈을 분리합니다.

위의 그림처럼 각 레이어별로 모듈을 나눠 프로젝트를 구성하게 됩니다.

각각의 모듈들은 정해진 레이어에 맞는 일들만 하게 됩니다. common에는 각 모듈들이 사용할 공통 코드들이 존재합니다.

이때 이름은 정해져 있는 것이 아니니 참고만 해주시기 바랍니다.

레이어드형 멀티 모둘은 각 레이어별로 모듈을 나누었고, 각 레이어별로 역할과 책임을 나누었기 때문에 유지보수가 용이합니다.

이러한 레이어드형 멀티모듈에서 모듈을 나누는 단위는 레이어가 됩니다.

이런 시선을 바꿔서 도메인 관점으로 모듈을 나눈 것을 모듈형 모놀리스 아키텍처라고 합니다.

출처: https://techblog.woowahan.com/2637/

모듈형 모놀리스 아키텍쳐에서는 각 도메인 별로 모듈이 나뉘게 됩니다.

이를 패키지 구조에서 보면 다음과 같습니다.

이렇게 모듈을 나눔으로써 도메인간의 경계가 명확해지고 추후 마이크로 서비스로 전환하기가 더 용이해집니다.

장점

모듈형 모노리스의 장점으로는 다음과 같습니다.

  • MSA로 전환시 용이한 구조이다.
    • 도메인 별로 모듈을 나누었기 때문에 MSA로 전환하기가 용이힙니다.
    • 굳이 MSA로 가지 않더라고 트래픽이 많은 도메인을 분리해 확장시키기 용이합니다.
  • 의존성을 강제해 프로젝트를 깔끔하게 유지할 수 있다.
    • 멀티 모듈 프로젝트들이 다 그렇듯 의존성을 강제하기 때문에 깔끔하게 의존 관계를 유지할 수 있습니다.

단점

모든 아키텍처에는 장단점이 있듯이 단점 역시 존재하는데요,

  • 제약 상황이 많다.
    • 도메인 간의 참조에 대한 제약상황이 존재하기 때문에 소규모 프로젝트나 빠르게 개발해야하는 상황에서는 어울리지 않습니다.
  • 러닝 커브가 존재한다.
    • 당연한 얘기지만 초기 설정시 러닝 커브가 존재합니다.

지금까지 모듈형 모노리스에 대해 알아봤습니다. 기회가 된다면 예제코드와 함께 다시 알아볼 수 있도록 하겠습니다!

참고자료

 

마이크로서비스의 실패 사례와 모듈형 모놀리스 제안! 우아한 모놀리스 세미나

마이크로서비스 → 모놀리스 ?! 😱 본질은 “얼마나 빨리 변경을 수용해 고객에게 비즈니스적 영향을 전달할 수 있는가?” 충분한 도메인 분석과 관리 인력이 뒷받침해주지 않으면 마이크로서

minforbackup.tistory.com

 

멀티모듈 설계 이야기 with Spring, Gradle | 우아한형제들 기술블로그

멀티 모듈 설계 이야기 안녕하세요. 배달의민족 프론트 서버를 개발하고 있는 권용근입니다. 멀티 모듈의 개념을 처음알게 되었을 때부터 현재까지 겪었던 문제점들과 그것을 어떻게 해결해나

techblog.woowahan.com

 

MODULAR MONOLITH - A PRIMER (모듈러 모놀로스 - 입문서)

들어가며

ijung.github.io

 

반응형

댓글