모놀리스 시스템 분할과 정복
Speaker Deck
나는, 아니 우리(함께 일하는 팀)는 모놀리스 시스템을 구축해서 운영하고 있다. 꽤 많은 활성 사용자 수와 데이터를 다루지만 문제없이 작동하고 있으며, 몇 년이 지난 지금도 필요한 만큼의 속도로 비즈니스 환경에 따라 시스템을 변경하고 있다.
소프트웨어를 개발하면서 적용하는 다양한 원칙과 패턴, 방법론 등은 "변경 요건이 있을 때 지속 가능한 방식으로 비즈니스 가치를 전달하기 위함이고, 시스템의 규모가 커지고 복잡해지더라도 지속적으로 기민하게, 반복적이고 안전하게 요구사항을 반영하는 것"이라고 볼 수 있다.
모놀리스 아키텍처는 단일 코드베이스와 개발 환경을 사용하여 모든 서비스 구성 요소를 하나의 애플리케이션으로 통합하므로 개발, 배포 및 관리 과정이 단순하다. 또한, 새로운 동료의 온보딩이 비교적 쉽다. 그러나 시스템이 커질수록 '거대한 진흙 덩어리 Big ball of mud' 현상이 발생하며 유지보수가 어려워지고 비즈니스 환경 변화에 대한 대응력이 떨어진다.
이러한 문제를 해결하려는 방법의 하나로 모듈을 이용하면 시스템의 구조를 이해하기 위해 한 번에 고려해야 하는 요소의 수를 줄일 수 있기 때문에 전체적인 복잡도를 낮출 수 있다. 각 모듈은 독립적으로 개발, 테스트 및 유지관리될 수 있으며 시스템은 여러 모듈의 상호작용을 통해 작동한다. 모듈은 각자의 책임과 기능에 따라 분할하고 명확하게 정의된 인터페이스를 통해 다른 모듈과 최소한의 의존성을 유지하며 상호작용을 해야 한다.
이러한 모듈화(Modularization)를 통해 시스템 복잡성을 효과적으로 관리하고 변화에 유연하게 대응하며 지속 가능한 방식으로 시스템을 진화시킬 수 있다. 이러한 특징을 가진 구조를 모듈형 모놀리스(Modular Monolith)라고 한다.
모듈형 모놀리스는 전통적인 모놀리스의 단순성과 모듈화의 이점을 결합한 실용적인 아키텍처 스타일이다. 단일 코드베이스와 배포 단위를 유지하면서도 시스템을 명확한 책임과 경계를 가진 자율적인 모듈로 분할하여 개발, 테스트 및 유지관리를 쉽게 한다. 모듈은 비즈니스 기능 단위로 수직적으로 분할하고, 각 모듈 내부는 필요에 따라 사용자 인터페이스, 비즈니스, 데이터 등을 계층화하여 복잡성을 관리할 수 있다.
따라서 모듈형 모놀리스는 시스템 복잡성을 효과적으로 관리하면서도 유지보수성과 유연성을 확보할 수 있다. 특히, 빠르게 변화하는 비즈니스 환경에 민첩하게 대응해야 하는 현대 소프트웨어 개발 환경에서 꽤 매력적인 선택지가 될 수 있다.
https://speakerdeck.com/arawn/monolrisig-siseutem-bunhalgwa-jeongbog
다음 내용이 궁금하다면?
이미 회원이신가요?
2024년 8월 12일 오후 11:35