모놀리스 아키텍처는 단일 코드베이스와 개발 환경을 사용하여 모든 서비스 구성 요소를 하나의 애플리케이션으로 통합하므로 개발, 배포 및 관리 과정이 단순합니다. 또한, 새로운 개발자가 개발에 참여할 때 전체 시스템의 구조를 이해하기가 비교적 용이합니다. 그러나 시스템이 커질수록 '거대한 진흙 덩어리 Big ball of mud' 현상이 발생하며 유지보수가 어려워지고 비즈니스 환경 변화에 대한 대응력이 떨어집니다.
이러한 문제를 해결하기 위해 모듈을 이용하면 시스템의 구조를 이해하기 위해 한 번에 고려해야 하는 요소의 수를 줄일 수 있기 때문에 전체적인 복잡도를 낮출 수 있습니다. 각 모듈은 독립적으로 개발, 테스트 및 유지관리 하며 시스템은 여러 모듈의 상호작용을 통해 작동합니다. 모듈은 각자의 책임과 기능에 따라 분할하고 명확하게 정의된 인터페이스를 통해 다른 모듈과 최소한의 의존성을 유지하며 상호작용을 해야 합니다.
이처럼 모듈화를 통해 시스템 복잡성을 효과적으로 관리하고 변화에 유연하게 대응하며 지속 가능한 방식으로 시스템을 진화시킬 수 있습니다. 이러한 특징을 가진 구조를 모듈형 모놀리스(Modular Monolith)라고 합니다.
모듈형 모놀리스는 전통적인 모놀리스의 단순성과 모듈화의 이점을 결합한 실용적인 아키텍처 스타일입니다. 단일 코드베이스와 배포 단위를 유지하면서도 시스템을 명확한 책임과 경계를 가진 자율적인 모듈로 분할하여 개발, 테스트 및 유지관리를 쉽게 합니다. 모듈은 비즈니스 기능 단위로 구성되는 수직 슬라이스 방식으로 분할하고, 각 모듈 내부는 사용자 인터페이스부터 비즈니스, 데이터 등 필요한 만큼 계층화를 통해 복잡성을 관리합니다.
이처럼 모듈형 모놀리스는 시스템 복잡성을 효과적으로 관리하면서도 유지보수성과 유연성을 확보할 수 있습니다. 특히, 빠르게 변화하는 비즈니스 환경에 민첩하게 대응해야 하는 현대 소프트웨어 개발 환경에서 꽤 매력적인 선택지가 될 수 있습니다.
본 자료는 개인적인 경험과 견해를 바탕으로 모듈형 모놀리스 시스템의 설계부터 구현까지 과정을 공유하기 위해 작성되었습니다.