전체적인 구조를 설계하던 중 한 가지 고민에 빠졌다. DataSource 영역을 따로 module로 분리하는 것은 좋은 방법일까? 여러 예제에서 remote, local(cache) 모듈이 추가된 구조를 볼 수 있다. 만약 나누게 된다면 어떤 장단점이 있을 지 고민해보기 위해 두 가지 방식의 컴포넌트 다이어그램을 설계해보았다.
위쪽 이미지는 remote, local 모듈로 분리되어 있고 아래 이미지는 Data 모듈 하나로 구성되어 있다. 차이점을 좀 더 살펴보면 remote, local 모듈로 분리하게 되면 안드로이드 의존성이 필요한 Room은 local 모듈에 존재하기 때문에 data와 remote 모듈은 순수 코틀린 라이브러리 모듈로 생성이 가능하다.
일단 분리하게 되면 좋은 이점부터 생각해보았다.
각 모듈에 대한 테스트 코드를 쉽게 작성할 수 있다. remote에 대한 테스트와 local에 대한 테스트를 각 모듈에서 서로 의존되지 않고 분리된 상태에서 작성하여 테스트를 할 수 있다.
각 모듈이 필요한 역할만 수행하기 때문에 관심사 분리를 통해 유지 보수 측면에서 이점을 느낄 수 있다.
멀티 모듈로 분리하게 되면 수정된 모듈에 대한 빌드를 하기 때문에 빌드 속도가 향상되는 이점을 느낄 수 있다.
알아볼수록 생각보다 큰 이점은 없는 것 같다는 생각이 들었다. 굳이 모듈로 분리하지 않더라도 data 계층에서 repository와 datasource를 분리하여 구현하게 되면 충분히 원하고자하는 바를 다 이룰 수 있기 때문이다. 큰 규모의 프로젝트에서는 여러 이점들을 몸소 느끼겠지만 이번 프로젝트 규모에서는 remote, local 모듈로 분리했을 때 느낄 수 있는 이점보다 발생할 수 있는 이슈가 더 클 것으로 판단해 분리하지 않을 것이다.