멀티 모듈 구조란 하나의 안드로이드 앱 프로젝트를 여러 개의 모듈로 나누어 개발하는 구조에요. 각 모듈은 독립적으로 기능을 수행하며, 필요에 따라 서로 간에 데이터나 기능을 공유할 수 있어요.
일반적으로 멀티 모듈 구조는 도메인 모듈, 데이터 모듈, 프레젠테이션 모듈 등으로 나누어 개발해요. 도메인 모듈은 앱의 비즈니스 로직을 담당하며, 데이터 모듈은 데이터 관리와 네트워크 통신을 담당해요. 프레젠테이션 모듈은 사용자 인터페이스(UI)와 사용자 경험(UX)을 담당해요.

멀티 모듈 아키텍처에서 각 모듈은 독립적인 기능 단위로 구성돼요. 이러한 분리는 코드의 가독성을 향상시키고, 유지 보수를 용이하게 해요. 예를 들어, 도메인 모듈, 데이터 모듈, 프레젠테이션 모듈 등등 각각의 기능을 별도의 모듈로 분리함으로써, 개발자는 특정 기능에 집중할 수 있고, 모듈 간의 상호 의존성을 최소화할 수 있어요.
멀티 모듈 구조에서는 변경이 발생한 모듈만 재빌드 하면 되기 때문에, 전체 프로젝트의 빌드 시간이 크게 줄어들어요. 이는 큰 규모의 프로젝트나, 빠른 이터레이션을 필요로 하는 개발 환경에서 특히 유용해요.
각 모듈이 고유의 기능만을 담당하므로, 모듈 간 결합도는 낮아지고, 모듈 내 응집력은 높아져요. 이는 소프트웨어 GRASP 원칙 중 낮은 결합도(Low Coupling)와 높은 응집력(High Cohesion)의 원칙에 부합해요. 결과적으로, 각 모듈은 독립적으로 기능을 수행할 수 있으며, 시스템 전체의 안정성과 확장성이 향상돼요.
멀티 모듈 구조에서는 여러 개발자가 동시에 다른 모듈에서 작업할 수 있어요. 이는 코드 베이스의 충돌을 최소화하고, 팀 간의 협업을 용이하게 만들어요. 각 팀은 자신의 모듈에만 집중할 수 있으므로, 전체 프로젝트의 진행에 있어 효율성이 증가해요.
Dynamic Feature 모듈을 사용하면, 사용자가 실제로 필요로 할 때만 특정 기능을 다운로드할 수 있어요. 이는 앱의 초기 다운로드 크기를 줄이는 데 큰 도움이 되며, 필요에 따라 기능을 추가하거나 제거할 수 있는 유연성을 제공해요. 직접 사용해보진 않았지만 이러한 기능이 있다고 하네요..!
멀티 모듈 아키텍처를 처음 설정할 때는 각 모듈의 역할과 경계를 정의하고, 모듈 간의 의존성을 관리하는 구조를 설계하는 데 상당한 시간과 비용이 들어갈 수 있어요.
특히, 대규모 프로젝트나 복잡한 시스템에서는 이 과정이 더욱 복잡하고 시간이 많이 걸릴 수 있어요.
멀티 모듈 아키텍처의 또 다른 주요 단점은 모듈을 너무 많이 또는 무분별하게 생성할 경우 시스템이 오히려 더 복잡해질 수 있다는 점이에요.
모듈을 너무 세분화하면, 각 모듈 간의 인터페이스 관리와 조정이 복잡해지며(유지보수성이 오히려 안좋아짐), 전체 시스템의 통합과 테스트 과정이 더 어려워져요.
https://developer.android.com/guide/navigation/integrations/multi-module?hl=ko
https://velog.io/@paulus0617/Android-Refactoring-Multi-Modularizing