멀티모듈로 빌드 환경 개선
Writer: 박준걸

시작하게된 계기

신규 프로젝트를 진행하면서, 빌드 속도를 올리기 위한 방법에 대해 공부를 하였습니다. 추천하는 방법은 멀티 모듈 방식이였습니다. 관심사 별로 모듈을 구성하고, App 모듈에서 사용하는 방식으로 하면 빌드 속도가 올라가고, 각 관심사 별로 구분이 가능하기 때문에 추후 다른 어플리케이션 개발을 진행해도 모듈을 가져와서 작업이 가능하다고 판단했습니다.

초기 시행 착오

초기 모듈 설계는 util(공통 유틸)과 network(API 기능), App(어플리케이션) 모듈 총 3개로 구분하였습니다. 그리고 각 모듈에 필요한 라이브러리를 build.gradle에 넣고 사용하였습니다. 그런데 중복되는 라이브러리가 발생하면서, 차라리 util 모듈에 라이브러릴 몰아넣고 사용하는 방식으로 구현하게되었습니다.

그래서 기대했던 방식은 아래와 같이 App 모듈이 Util과 Network를 참조하는 방식으로 구현하려고 했지만,

module-new

개발을 빨리 하겠다는 생각에 아래와 같이 직렬로 모듈이 연결되도록 개발을 하였습니다.

module-old

여기서 문제점은 멀티 모듈에 대한 이득은 하나도 없이 기존과 동일한 개발과 다를바가 없는 방식으로 구현되어 효율성이 떨어지고, 모듈간의 의존도가 커져서 분리하기 조차 어려워졌습니다.

개선 방향

  1. 각 모듈을 분리해서 원래 설계 방식대로 수정
  2. 라이브러리 버전을 관리하는 공통 구성을 만들어서 한군대에서 관리

계획한 개선 방향대로 라이브러리를 모두 정리해서 각 모듈에서 사용하는 라이브러리만 참조하게 수정하였습니다. 빌드 속도는 20% 정도 개선이 이루어졌고, 의존도 분리되어 각 모듈이 따로 작동될수 있도록 완성하였습니다. 이후 버전을 관리하는 구성을 만들기 위해 자료조사를 했고 Version Category라는 것을 알게 되어 저희 프로젝트에도 적용하기로 하였습니다. Version Category는 2차에서 말씀드리겠습니다.