droidknights / DroidKnightsApp

국내 최대 규모 안드로이드 컨퍼런스 드로이드나이츠 앱
https://www.droidknights.dev
255 stars 69 forks source link

전체 모듈 의존성 개선 제안 #252

Closed SeongUgJung closed 12 months ago

SeongUgJung commented 1 year ago

문제점

현재 모듈의 형태는 각각 모듈들이 모든 구현체 모듈에 의존성을 가지고 있는 형태입니다.

이를테면 :feature:bookmark 모듈은 :core:data :core:datasource:core 이하 모듈 전체에 대해 의존성을 가지고 있으며

:core 이하의 모듈들은 각각 모듈 의존성을 가지고 있습니다.

이러한 구조는 빌드 과정에서 다음과 같은 비효율성을 나타냅니다.

이를테면 :feature:bookmark 빌드 과정에서 :core:data 의 빌드를 선제로 요구하며 :core:data:core:datasource 를 요구합니다.

따라서 :feature:bookmark 는 참조한 2개의 모듈이 선형적으로 빌드가 완료 될때까지 대기해야하는 현상이 발생합니다.

이는 core:datasource 의 구현체에 수정이 발생하면 :feature:bookmark 에도 영향이 가도록 되어 있습니다.

제시방안

예시

  1. :core:data:core:datasource 에서 각각 추상화 객체와 데이터 객체에 한해서 추상화 모듈만 별도로 분리하도록 합니다.
    • e.g) :core:data-api, :core:datasource-api (jvm 모듈로 분리할 수 있을것이라 예상됨)
  2. :feature:bookmark 는 위에서 분리한 추상화 모듈만 참조하도록 합니다.

대상 모듈

예상 효과

  1. 추상화 모듈은 dagger 등을 포함하지 않기 때문에 빌드에 미치는 영향은 극히 미미할 것입니다.
  2. 위에서 제시한 모듈은 모두 병렬 빌드가 진행될 것이기 때문에 빌드 효율에서 이점을 취할 수 있습니다.
  3. 구현체 모듈의 인스턴스들은 dagger-hilt 를 통해서 주입될 것이기 때문에 동작에 영향은 없습니다.
  4. 구현체 모듈의 변경이 다른 구현체 모듈의 빌드에 영향을 미치지 않습니다.

해당 앱은 본디 소규모 앱이기 때문에 위의 모듈 분리를 통해서 얻을 수 있는 효과는 극도로 미미하나 실제 서비스를 하는 다양한 앱은 이러한 방식으로 모듈 분리가 될 것이라 의심치 않으며 이 제안의 반영은 주요 커미터 분들의 의견을 따르도록 하겠습니다.

laco-dev commented 1 year ago

@SeongUgJung 안녕하세요. 좋은 아젠다 전달해주셔서 감사드립니다.

드로이드 나이츠 2023 앱을 시작할 때 모듈화에 대해 nowinandroidDroidKaigi2022를 레퍼런스로 잡는 것을 참고해 개발을 시작했습니다.

이후 모듈화의 고도화 대신 기능을 만드는데 리소스를 많이 사용하다보니 전달주신 의견처럼 다소 아쉬운 부분이 발생하게 되었습니다.

제시주신 방향으로 구현 된다면 드로이드 나이츠 앱을 찾아주시는 분들에게 좋은 가이드로 역할을 다할 것 같습니다. 이 과정에서 핵심 방향과 구현이 정해진 후 반복적인 작업이 필요하다면 이슈 별도로 남겨주시면 다른 분들이 작업하는 것도 가능해보입니다.

감사합니다. 🙏🏻

laco-dev commented 1 year ago

이 내용은 팀내에서 확인 했고, 작업가능하신 담당 확인해보도록 하겠습니다. 🙏🏻

SeongUgJung commented 1 year ago

core 모듈에 한해서 현재 작업을 마무리 중입니다.

곧 PR 을 올리도록 하겠습니다.