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