모듈러 모놀리스(modular monolith) 아키텍처가 뭘까?

2026. 6. 19. 22:06·Back-end/Architecture

탄생 배경

MSA의 장점을 가지고 다른 기업에서 적용시키다 보니 아래와 같은 문제들이 나타나게 되었다.

MSA의 부작용

  • 네트워크 통신/ 장애 포인트 증가
  • 분산 트랜잭션으로 묶기가 힘들어짐
  • 모니터링, 배포 운영의 복잡도 증가

특히, 팀이 작을 수록 아래와 같은 문제점이 발생함

팀이 작을 때

  • 쓸데 없이 나눈 서비스 수가 오히려 불편함만 가져옴
    • 즉, 서비스 수 > 감당 가능한 팀 수
  • 조직이 도메인 경계를 구분하지 않는 소규모 팀이라고 할 때 서비스는 나뉘어지는 이상한 구조가 나올 수 있다
    • Conway’s Law - 조직이 아키텍쳐를 결정
  • 복잡성이 증가할 수 록 소규모 팀에서는 발목이 잡히는 경우 발생

모듈러 모놀리스

모놀리식과 모듈식 설계 패러다임의 측면을 결합한 아키텍처 접근

  • 단일 배포 단위를 유지하면서 내부를 도메인 경계로 명확히 분리한 구조
  • 모듈은 일반적으로 비즈니스 역량 또는 도메인 주도 설계 (DDD) 원칙을 중심으로 조직된다.

특징

  • 모듈성:
    • 모듈러 모놀리식은 더 작고 독립적인 모듈로 구조화되며, 각 모듈은 특정 기능이나 비즈니스 도메인을 담당
    • 모듈은 명확한 경계와 책임을 기준으로 조직되어 관심사의 분리와 유지보수성을 촉진한다
  • 긴밀한 통합
    • 모듈 구조를 가지지만 모든 모듈은 하나의 코드베이스와 런타임 환경 안에서 긴밀히 통합된다.
    • 모듈 간 별도의 배포나 통신 메커니즘이 필요 xx
  • 공유 코드베이스와 데이터:
    • 모든 모듈이 동일한 코드베이스, 라이브러리, 데이터 저장소를 공유
    • 이는 분산 시스템에 비해 개발과 배포를 단순화하면서도, 코드 조직과 관심사 분리 같은 모듈성의 이점을 유지하게 된다.
  • 확장성 및 유지보수성:
    • 전통적 모놀리식 대비 확장성과 유지보수성에서 이점을 제공
    • 애플리케이션을 모듈로 분해함으로써 복잡성을 더 효과적으로 관리하고, 개별 컴포넌트를 독립적으로 확장할 수 있다
  • 유연성
    • 단일 코드베이스임에도 개발과 배포 측면에서 유연
    • 전체 시스템에 영향을 주지 않고도 요구 사항 변경에 맞춰 모듈을 쉽게 추가, 제거, 수정 가능
  • 배포 용이성:
    • 배포 아티팩트가 하나뿐이므로 분산 시스템에 비해 배포가 더 간단하다.
    • 배포와 운영의 복잡성이 줄어들어 애플리케이션 라이프사이클 관리가 쉬워짐

⇒ 모듈성과 모놀리식 아키텍처의 단순함을 결합함으로써, 모듈러 모놀리식은 유연성, 확장성, 유지보수성 간 균형을 이루어 중간 정도의 복잡성과 확장성 요구를 가진 애플리케이션에 적합

원칙

  • 모듈성
    • 애플리케이션을 더 작고 독립적인 모듈로 분해하고, 각 모듈은 특정 기능이나 비즈니스 도메인을 책임져야한다.
    • 모듈은 명확한 경계와 잘 정의된 인터페이스를 가져야 하며, 이는 관심사의 분리와 유지보수의 용이성을 높임
  • 높은 응집도, 낮은 결합도
    • 각 모듈은 정확하고 집중된 목적을 가져야 하며 애플리케이션의 특정 측면을 책임져야 한다.(높은 응집도)
    • 동시에 모듈 간 의존은 느슨해야 하며 서로에 과도하게 의존해서는 안된다.(낮은 결합도)
  • 명확한 경계
    • 모듈 간 경계를 명확히 정의하여 의존성을 최소화하고, 독립적인 개발과 테스트를 용이하게 한다.
    • 모듈을 뒤섞거나 강한 결합을 도입하면 복잡성이 증가하고 변경이 어려워진다.
  • 단일 책임 원칙(SRP)
    • 각 모듈은 변경의 이유가 하나만 있어야 한다는 단일 책임 원칙을 따른다
    • 이는 모듈 내부의 명확성과 단순성을 유지하고, 한 모듈의 변경이 시스템의 관련 없는 부분에 영향을 주지 않도록 한다.

패턴

  • 레이어드 아키텍처
    • 애플리케이션을 여러 레이어로 나누어 각 레이어가 특정 기능을 담당한다.
    • 일반적으로 표현/UI 레이어, 비즈니스 로직 레이저, 데이터 접근 레이어가 포함된다.
    • 관심사의 분리를 촉진하고 확장성과 유지보수성을 높임
  • 모듈러 모놀로식
    • 애플리케이션을 더 작고 독립적인 모듈로 분해하며, 각 모듈은 특정 기능이나 비즈니스 도메인을 담당한다
    • 단일 코드베이스이지만 모듈 간 결합은 느슨하며, 모듈을 독립적으로 개발, 배포, 유지관리할 수 있다.
    • 모놀리식의 단순함과 모듈식의 모듈성을 결합함
  • 컴포넌트 기반 아키텍처
    • 애플리케이션을 재사용 가능한 독립 컴포넌트로 조직하며, 각 컴포넌트는 관련 집합을 캡슐화한다.
    • 컴포넌트를 조립, 구성하여 더 큰 애플리케이션을 구축함으로써 코드 재사용과 유지 보수성을 높인다

단점

  • 복잡성 관리: 애플리케이션의 규모와 복잡성이 커질수록 모듈 간 상호작용을 관리하고 코드베이스 전반의 일관성을 보장하는 일이 어려워질 수 있다.
    • 때문에 불필요한 복잡성을 피하려면 모듈 경계와 의존성을 신중히 설계해야함!
  • 의존성 관리: 모듈 간 상호 의존성이 있거나 한 모듈의 변경이 다른 모듈에 영향을 줄 수 있을 때, 의존성 관리가 어려울 수 있다.
    • 충돌이나 브레이킹 체인지를 피하려면 의존성과 버전 관리를 신중히 해야 합니다.
  • 배포 복잡성: 전통적 모놀리식보다 모듈러 모놀리식은 여러 모듈을 함께 배포해야 하므로 더 복잡할 수 있다.
    • 특히 분산 환경에서 배포를 조율하고 모듈 간 일관성을 확보하는 일이 도전적
  • 테스트 오버헤드: 모듈 간 상호작용과 개별 모듈 자체를 모두 테스트해야 하므로, 전통적 모놀리식보다 테스트가 더 어렵고 시간이 소요될 수 있다.
    • 포괄적인 테스트 스위트를 마련하고 모듈 전반의 충분한 커버리지를 확보해야 한다.

3가지 아키텍처 비교

모놀리스 방식

경계 x

  • 단일 배포
  • 모든 구성 요소가 강한 결합
    • 애플리케이션 전체가 하나의 분리 불가능한 유닛으로 구축됨
  • 유지보수 어려움

모듈러 모놀리스

도메인 경계 강제

  • 단일 배포
  • 모듈 간 결합을 느슨하게 설계하여 개발, 테스트, 유지보수를 쉽다.
    • 애플리케이션을 더 작고 관리 가능한 모듈 또는 컴포넌트로 분해하며, 각 모듈은 특정 기능 집합을 담당한다.
  • 도메인 분리 유지
    • 내부적으로 도메인 경계를 강제함으로써 팀이 분리되고 서비스가 커지면 MSA로 자연스럽게 분리 및 확장이 가능하게 한다

MSA

독립 배포 단위

  • 서비스별 독립 배포
  • 높은 운영 복잡도
  • 개별 확장 가능

전환 전략

모놀리스 → 모듈러 → MSA

모놀리스를 처음으로 하는 이유는 도메인 경계를 정확히 식별하기 위함이다. 댓글을 찾아보던 중 정확하게 식별을 하지 않는다면 모듈러 모놀리스의 구조는 이상하게 간다고 한다…

모듈러 모놀리스는 MSA의 예행연습이라고 한다. 경계를 코드로 강제해두면, 필요할 때 쪼개기가 훨씬 수월하여 MSA 전환이 가능하다는 점이다


참고자료

https://www.youtube.com/watch?v=3UJhhMultL4

https://rosettalens.com/s/ko/what-is-a-modular-monolith

'Back-end > Architecture' 카테고리의 다른 글

모듈식 모놀리스와 헥사고날 아키텍처로 구성된 Nearby 서버 구조 분석하기  (0) 2026.07.17
'Back-end/Architecture' 카테고리의 다른 글
  • 모듈식 모놀리스와 헥사고날 아키텍처로 구성된 Nearby 서버 구조 분석하기
dev_Hyeonjoon
dev_Hyeonjoon
스프링이랑 자바 공부 중 입니다!!
  • dev_Hyeonjoon
    Hyeonjoon's code
    dev_Hyeonjoon
  • 전체
    오늘
    어제
    • 분류 전체보기 (61)
      • CS (6)
        • Architecture (4)
        • Algorithm (2)
      • Front-end (10)
        • JavaScript (0)
        • React-project (5)
        • Vanilla[JS]-project (5)
        • study (0)
      • Tools (1)
        • GitHub (1)
        • AI (0)
      • Back-end (35)
        • Java (27)
        • Architecture (2)
        • JPA (0)
        • Trouble Shooting (1)
        • Spring (2)
        • DevOps (2)
      • Trouble Shooting (2)
        • Python (1)
      • 자격증 (1)
      • 알고리즘 (0)
      • 회고 (6)
        • 기타 (6)
        • 독서록 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    사지방코딩
    자바공부
    backend
    자바기초
    군대에서코딩
    백엔드
    vanillajs
    형변환
    Spring
    자바
    OOP
    Java
    코딩
    토이프로젝트
    리액트
    Til
    아키텍처
    파이썬
    바닐라js
    객체지향
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
dev_Hyeonjoon
모듈러 모놀리스(modular monolith) 아키텍처가 뭘까?
상단으로

티스토리툴바