Published 2022. 7. 27. 17:09

프로젝트 멀티모듈 적용

F-lab에서 멀티모듈로 프로젝트를 진행하고 있는데 프로젝트 구성을 현재 같이 프로젝트를 진행 하는 분께서 멀티 모듈을 구성했다. 나도 직접 처음부터 멀티 모듈 구성을 적용해보고 싶어서 코테 과제 속에 적용해보았고, 그 과정 속에서 겪은 시행착오를 정리해보고자 한다.

 

문제의 발생

 

처음 모듈 구성

 

app(presentation)

data (remote 포함)

domain

 

모듈 의존성

 

app -> domain

data -> domain

 

모듈 내부 구성

data -  repositoryImpl, datasource, retrofit

domain - usecase, repository interface, usecase hilt 모듈

app - activity viewModel

 

 

우선 처음에 data domain 모듈을 완성하고 빌드했을  성공을 했기 때문에 app까지 추가 진행을 하였고 테스트를 위해 앱을 빌드하는 순간

 

 error: [Dagger/MissingBinding] domain.repository.XXXRepository cannot be provided without an @Provides-annotated method

 

문제와 마주하게 되었다처음 에러와 마주했을 때는 repository module 만들어줬는데  찾을  없지원인을 알아내지 못한 채 이런 저런 방법을  시도하다가 아예 다른 예제 프로젝트를 참고하여 모듈 구조를 변경 해보았다.

 

변경 모듈 구성

 

app

presentation

data

domain

 

모듈 의존성

 

app -> data, domain, presentation

data -> domain

presentation -> domain

 

 

그리고 hilt module class들을 app 모듈에 넣었고 빌드에 성공했다.

 

 

 

문제 원인 파악 과정 

 

 모듈에서  의존성을 찾지 못하는 문제가 발생했는가에 대해 아래 두가지의 연결고리를 찾다가 원인을 알게 되었다.

 

  • data domain단을 완성해서 빌드를 했을 때는 문제 없이 빌드 되었다가 viewmodel 연결하는 순간  문제가 발생했을까
  • 첫번째 모듈 구성과 두번째 모듈 구성에서 실패와 성공의 차이는 무엇일까

 

-> A B 의존하고 있고 B C 의존하고 있으면 A C 사이에도 의존 관계가 성립힌다

-> 하나의 모듈은 dependencies 추가하지 않은 다른 모듈에 있는 클래스를 참조할  없다

 

이말인 즉슨,

ViewModel Usecase 의존하고 있고 Usecase Repository 의존 관계가 있으므로 Viewmodel Repository 의존관계가 성립한다.

 

첫번째 구조에서,

app domain 모듈을 dependencies 추가했기 때문에 usecase 의존성은 얻을  있었지만 data 모듈은 추가하지 않았기 때문에 data 모듈에 있던 repository 찾지 못했던 것이었고,

 

반면에 두번째 구조는,

app 모듈에서 presentation, data, domain 모듈을 모두 dependencies 추가했기 때문에 모든 의존관계를 찾아서 주입할  있었던 것이었다.

 

그래서

첫번째 app 모듈 dependencies data 모듈을 추가해봤더니 실패했던 빌드가 성공하는  확인할  있었다.

 

 

 

시간을 많이 투자한 것에 비해 해결책이 간단해서 약간 허무했지만 답답했던 속이 뚫리는 기분이 들었다. 대거&힐트 작동 방식에 대해서 다시 정리해야 겠다.

 

요즘 레이어 별로 모듈을 따로 구성함으로서 철저하게 의존성 분리가 되는  경험하게 되면서, 회사에서도 클린 아키텍처에 DI 적용했었는데 그동안 클린 아키텍처를 제대로 적용하고 있었나 되돌아 보고 있는 중이다...

'TIL' 카테고리의 다른 글

22/08/06 TIL  (0) 2022.08.06
2022/07/17 TIL  (0) 2022.07.17
2022/07/15 TIL  (0) 2022.07.15
2022/07/14 TIL  (0) 2022.07.15
복사했습니다!