Closed SeongUgJung closed 12 months ago
@SeongUgJung 안녕하세요. 좋은 아젠다 전달해주셔서 감사드립니다.
드로이드 나이츠 2023 앱을 시작할 때 모듈화에 대해 nowinandroid 와 DroidKaigi2022를 레퍼런스로 잡는 것을 참고해 개발을 시작했습니다.
이후 모듈화의 고도화 대신 기능을 만드는데 리소스를 많이 사용하다보니 전달주신 의견처럼 다소 아쉬운 부분이 발생하게 되었습니다.
제시주신 방향으로 구현 된다면 드로이드 나이츠 앱을 찾아주시는 분들에게 좋은 가이드로 역할을 다할 것 같습니다. 이 과정에서 핵심 방향과 구현이 정해진 후 반복적인 작업이 필요하다면 이슈 별도로 남겨주시면 다른 분들이 작업하는 것도 가능해보입니다.
감사합니다. 🙏🏻
이 내용은 팀내에서 확인 했고, 작업가능하신 담당 확인해보도록 하겠습니다. 🙏🏻
core 모듈에 한해서 현재 작업을 마무리 중입니다.
곧 PR 을 올리도록 하겠습니다.
문제점
현재 모듈의 형태는 각각 모듈들이 모든 구현체 모듈에 의존성을 가지고 있는 형태입니다.
이를테면
:feature:bookmark
모듈은:core:data
:core:datasource
등:core
이하 모듈 전체에 대해 의존성을 가지고 있으며:core
이하의 모듈들은 각각 모듈 의존성을 가지고 있습니다.이러한 구조는 빌드 과정에서 다음과 같은 비효율성을 나타냅니다.
이를테면
:feature:bookmark
빌드 과정에서:core:data
의 빌드를 선제로 요구하며:core:data
는:core:datasource
를 요구합니다.따라서
:feature:bookmark
는 참조한 2개의 모듈이 선형적으로 빌드가 완료 될때까지 대기해야하는 현상이 발생합니다.이는
core:datasource
의 구현체에 수정이 발생하면:feature:bookmark
에도 영향이 가도록 되어 있습니다.제시방안
예시
:core:data
와:core:datasource
에서 각각 추상화 객체와 데이터 객체에 한해서 추상화 모듈만 별도로 분리하도록 합니다.:core:data-api
,:core:datasource-api
(jvm 모듈로 분리할 수 있을것이라 예상됨):feature:bookmark
는 위에서 분리한 추상화 모듈만 참조하도록 합니다.대상 모듈
:core:data
: model, repository:core:datasource
: model, repository:core:domain
: model, repository:feature:bookmark
: navigation:feature:setting
: navigation:feature:contributor
: navigation:feature:session
: navigation:feature:bookmark
: navigation예상 효과
해당 앱은 본디 소규모 앱이기 때문에 위의 모듈 분리를 통해서 얻을 수 있는 효과는 극도로 미미하나 실제 서비스를 하는 다양한 앱은 이러한 방식으로 모듈 분리가 될 것이라 의심치 않으며 이 제안의 반영은 주요 커미터 분들의 의견을 따르도록 하겠습니다.