멀티 모듈 프로젝트
모듈의 정의
모듈은 여러 가지로 정의될 수 있지만, 일반적으로 큰 체계의 구성요소이고, 다른 구성요소와 독립적으로 운영된다. wikipedia
우리가 제공받는 의존 라이브러리들도 모두 모듈이다.
- 모듈은 독립적인 의미를 갖는다.
- 모듈은 어떠한 추상화 정도에 대한 계층을 가지고 있다.
- 계층 간 의존 관계에 관한 규칙이 존재한다.
Gradle을 이용한 멀티 모듈 프로젝트 관리
서로 독립된 프로젝트 단위로 여러 개의 프로젝트를 통해 시스템을 개발할 경우
가장 큰 문제점은 시스템의 중심 Domain
이 가져야할 규칙과 구조 등을 동일하게 보장해주는 매커니즘이 없다 는 것이다.
그렇게 되면 여러 개의 어플리케이션에 동일한 Domain
을 복사-붙여넣기 해야하는 무의미한 반복이 발생한다.
또한 이 과정에서 많은 양의 코드를 수정해야하고 실수를 할 여지가 발생하게 된다.
나는 개인적으로 코딩에 있어서
여지
라는 단어를 중요하게 생각한다. 알고리즘 문제를 풀다가도 에러가 날 여지가 있는 코드는 되도록이면 피해갈려고 한다. 조금이라도 실수가 발생할 가능성있다면 처음부터 그런 방법은 피해가는게 나중에 더 편하다는 것 배웠기 때문이다!
따라서 멀티 모듈 프로젝트
를 통해서 기존의 여러 개의 단일 프로젝트를 한 프로젝트 안에 모듈로 가짐으로써 공통으로 사용하는 코드들을 모아놓고 같이 쓸 수 있게 된다.
멀티 모듈 프로젝트는 독립적으로 실행 가능한 어플리케이션을 1개 이상 가질 수 있다.
또한 머맅 모듈 프로젝트는 하나의 시스템을 단위로 만들어지는데, 시스템은 1개 이상의 서비스와 공유 인프라가 모여 구성된다.
독립적으로 실행 가능한 어플리케이션들은 서로 다른 책임과 역할을 가지기 때문에,
발생 가능한 문제 상황 을 피하기 위해 하위 모듈들에 대한 의존성과 사용성에 대한 개방/폐쇄를 철저히 해야한다.