멀티모듈은 하나의 프로젝트를 여러개의 모듈로 구성하는 것을 말한다. 모듈은 독립적으로 운영될 수 있는 의미를 가지는 구성요소 단위이며, 다른 모듈과의 상호작용으로 애플리케이션을 구성한다.
intelij에서는 가장 상위 프로젝트에서 마우스 오른쪽 클릭을 하고, New > Module 을 선택 후, 모듈 이름을 입력하면 프로젝트 내부에 여러개의 모듈을 만들 수 있다.
멀티모듈을 생성하면 모듈별로 build.gradle
파일이 생기기 때문에, 각 모듈에 맞게 의존성을 설정할 수 있다.
메인 프로젝트의 build.gradle
에서는 모든 모듈에 대해 공통적인 설정을 적용할 수도 있다.
subprojects {
}
allprojects {
}
subprojects에서는 메인 프로젝트를 제외한 나머지 모듈들에 대한 설정, allprojects는 메인을 포함한 전체 프로젝트에 대한 설정을 할 수 있다.
모든 모듈들에서 사용되는 기본적인 설정은 메인 gradle 파일에서 해주면 된다.
멀티모듈 프로젝트를 만드는 방법에 대해 간단히 알아봤는데, 멀티모듈의 장점은 도대체 뭘까?
첫째는 최소의존성이다. 모듈별로 의존성을 따로 설정할 수 있기 때문에, 각 모듈은 해당 모듈에 필요한 최소한의 의존성을 가진다.
만약 모놀리식으로 프로젝트를 개발한다면, 의존성이 굳이 필요하지 않은 부분에서도 외부 라이브러리를 사용할 수 있기 때문에 스파게티 의존성
이 생긴다. 복잡하게 얽힌 의존성으로 점차 개발 생산성이 떨어질 수 있다.
계층에 따라 분리된 모듈로 인해 추상화 레벨을 맞출 수 있다. 하나의 모듈에서 다양한 어플리케이션 레이어와 의존성을 있는 형태가 아니라, 계층화된 모듈 레이어로 분리한으로서 역할과 책임의 선을 명확하게 개발의 생산성을 향상시킬 수 있다.