Modular Monolithic Architecture

겔로그·2023년 9월 10일
1
post-thumbnail

Modular Monolithic Architecture를 알아보기 이전에 먼제 Monolith와 Microservice Architecture를 알아보는 시간을 가져보겠습니다.

Monolithic Archtecture

Monolithic Architecture란 소프트웨어의 모든 구성 요소가 한 프로젝트에 통합되어 있는 전통적인 아키텍쳐 모델입니다.

시스템의 모든 요구사항이 단일 서비스로 실행되기 때문에 각각의 프로세스가 긴밀하게 연결되어 있다는 특징이 존재합니다.

Monolithic Architecture의 장단점

장점

  • 소규모 프로젝트에 사용하기 좋은 모델입니다.
  • 하나의 서비스만 처리하면 되기 때문에 개발,빌드,테스트가 용이합니다.

단점

  • 요구사항이 있어 기능 개선이 필요한 경우, 사소한 것이더라도 전체를 다시 빌드하고 배포해야 합니다.
  • 시스템이 커질수록 빌드,테스트 시간이 증가합니다.
  • 코드간 결합도가 높아져 코드 수정간 받는 영향도가 커집니다.

MicroService Architecture

현대 사회에서는 요구사항이 빠르게 변화했고 서비스들은 이러한 변화를 빠르게 적용해야만 했습니다. 기존의 Monolithic Architecture로는 이러한 변화에 긴밀하게 대응할수가 없었죠.

그래서 고안된 아키텍쳐가 바로 MicroService Architecture입니다. 여러개의 작은 서비스가 모여 하나의 시스템이 되는 모델이죠. MicroService는 작고 독립적이며, 느슨하게 결합되어 있어 빠르게 요구사항을 반영할 수 있다는 특징이 있습니다.

Monolithic Architecture의 장단점

장점

  • 코드간 결합도가 낮아져 서비스 요구사항 반영이 빨라졌습니다.
  • 시스템 크기에 상관없이 기능별로 분리해 구성하기 때문에 서비스별로 적합한 기술을 선택할 수 있으며, 규모가 작습니다.
  • 장애가 발생하더라도 전체 시스템의 장애로 전파되지 않습니다.

단점

  • 서비스간 연동이 잘 되는지 확인이 필요합니다.
  • 서비스간 통신이 필요하기 때문에 latency 및 통신으로 인한 고려사항이 추가로 필요합니다.
  • 분리된 서비스로 인해 장애 추적이 어렵습니다.
  • 하나의 시스템을 운영하기 위해 분리된 여러 서비스를 분리된 서버로 관리한다면 서버 비용이 더 발생할 수 있습니다.

Monolithic vs MicroService 승자는?

MicroService Architecture에도 여러 단점이 존재하지만, 변화하는 요구사항에 빠르게 대응할 수 있다는 장점을 바탕으로 최근 많은 기업들이 MicroService Archtecture를 소프트웨어 아키텍처로 선택하고 있습니다. 또한, 기존의 Monolithic Architecture를 MicroService Architecture로 마이그레이션 하는 기업들도 늘어나고 있지요.

하지만 운영 복잡성과 서버 비용의 부담으로 MicroService에서 Monolithic으로 다시 전환하는 사례 또한 발생하고 있습니다. 이러한 현실로 인해 우리는 개발간 어떤 아키텍처를 선택해야 할지 큰 고민을 해야만 합니다.

Modular Monolithic Architecture란?

최근 Monolithic과 MicroService Architecture 각각의 단점들이 부상되고 있는 가운데, Modular Monolithic Architecture가 새로운 대안으로 제안되고 있습니다. 그렇다면 Modular Monolithc은 과연 무엇일까요?

Modular Monolithic Architecture는 하나의 서비스에서 각 로직을 모듈로 나누는 방식이며, 각 모듈은 독립적이고 격리된다는 특징이 있습니다. 각각의 로직을 모듈화 하여 필요한 모듈끼리만 서로 의존하는 관계로 만드는 것입니다.

Modular Monolithic Architecture의 장단점

장점

  • 모듈은 완전히 독립적이지 않다. 다른 모듈과의 종속성이 있지만 이를 최소화하여 관리합니다.
  • 기존의 Monolithic 방식보다 유지 관리가 용이합니다.
  • 기존의 Monolithic 방식보다 변경에 있어 확장성이 뛰어납니다.
  • MicroService보다 덜 복잡한 구성을 가집니다.

단점

  • 모듈별 의존 관계를 개발자가 관리해야 합니다. 이로 인해 개발자의 능력에 따라 Modular Monolithic 방식의 장점이 사라질 수도 있습니다.

왜 Modular Monolithic인가?

Modular Monolithic 방식이 떠오르게 된 이유는 바로 Migration의 용이성에 있습니다.

이전에 만들어진 대부분의 legacy 프로젝트는 Monolithic Architecture를 기반으로 시스템을 개발하였습니다.
이러한 시스템들은 최근 빠르게 변화하는 요구사항을 반영하기 위해 MicroService Archtecture로 전환하고 싶지만 legacy 코드의 강한 결합성을 끊어 MicroService로 전환하는 것은 굉장히 어려운 일입니다.

이러한 문제상황에서 완벽하게 독립적이진 않지만 결합성을 분리해 독립적으로 관리할 수 있는 Modular Monolithic Architecture는 MicroService Architecture로 가는 중간 과정이 될 수 있습니다.

하지만...

하지만 Modular Monolithic Architecture에는 한가지 단점이 존재했습니다. 바로 약간의 의존성인데요. 각 모듈은 서로 의존관계를 가질 수 있다는 점으로 인해 개발자의 실력에 따라 아키텍처의 구성이 올바를수도, 올바르지 않을수도 있었다는 점입니다.

Modular Monolithic Architecture를 기반으로 시스템을 구성했다고 하더라도, 이는 덜 결합한 Monolithic Architecture가 될 확률이 높았다는 것이죠.

하지만의 하지만..? Framework의 개입

이러한 부분을 개선하기 위해 최근 여러 프레임워크에서 Modular Monolithic Architecture을 지원하는 기술들을 개발중에 있다고 합니다.

대표적으로는 Spring Modulith와 Across Framework가 있는데요. 다음 글에서는 Spring Modulith에 대한 개념을 설명해보도록 하겠습니다.

읽어주셔서 감사합니다.

Reference

우아한 모노리스
Moduler Monolithic 아키텍처
Microservices Killer: Modular Monolithic Architecture

profile
Gelog 나쁜 것만 드려요~

2개의 댓글

comment-user-thumbnail
2024년 2월 25일

좋은 내용 잘봤습니다. 오타 있어서 얘기드립니다. Monolithic Architecture의 장단점이 두번나옵니다 ㅎㅎ

1개의 답글