상세 컨텐츠

본문 제목

나만의 안드로이드 앱 만들기(고급자 편) - 멀티 모듈 프로젝트란?

나만의 안드로이드 앱 만들기/고급자

by Victorywskim 2023. 12. 26. 01:50

본문

반응형

멀티 모듈은 개발 조직이 점점 커짐에 따라 필연적으로 요구됩니다.

멀티 모듈 프로젝트는 왜 필요하고, 어떻게 쓰면 좋을까에 대해서 소개하고자 합니다.

 

 

가정을 해봅시다.

 

프로젝트 초기에는 빠른 시장 검증이 필요했기 때문에 핵심 기능에 중점을 두고 빠르게 개발 및 수정하는 작업이 이뤄졌습니다. 그러나 프로젝트는 성장하며 많은 사용자들이 서비스를 이용하게 되었고, 이로 인해 버그가 늘어나고 새로운 기능 요구가 증가했습니다. 이에 따라 추가적인 개발자들을 영입하게 되었고, 초기에는 고려하지 못했던 아키텍처와 코드 리팩토링이 필요한 시점에 도달했습니다.

프로젝트 중기에는 안정화된 코드와 도입된 아키텍처로 인해 코드 리뷰 및 협업이 상대적으로 수월했습니다. 그러나 코드 양이 늘어남에 따라 코드 병합 시 컨플릭트가 늘어나고, 다른 개발자들의 코드를 수정하는 일이 빈번해졌습니다. 이로 인해 논리적인 안정장치로는 부족하다고 생각되어 물리적인 안정장치가 필요하게 되었습니다.

 

멀티 모듈 프로젝트 도입을 고려하는 이유

 

위 가정에 대한 어려움을 최소화하고자 함입니다. 멀티 모듈은 프로젝트를 여러 개의 독립된 모듈로 나누어 개발하게 함으로써 코드 병합 시 발생할 수 있는 문제를 줄이고, 개발자들 간의 협업을 향상시킬 수 있는 강력한 도구입니다.

본편에서는 멀티 모듈의 구체적인 이점과 구현 방법에 대해 자세히 살펴보겠습니다. 여기에는 모듈 간의 의존성 관리, 더 나은 코드 구조화, 테스트 용이성 등이 포함됩니다. 이러한 측면들은 멀티 모듈 아키텍처를 통해 프로젝트를 효율적으로 관리하고 확장성을 확보하는데 중요한 역할을 합니다.

 

 

멀티 모듈 프로젝트의 장/단점

 

  • 장점
    • 모듈 간 분리로 인한 유지보수 용이성
      • 각 모듈은 특정 기능이나 책임을 담당하므로 유지보수가 더 쉬워집니다. 변경이 필요한 부분을 찾기 쉬우며, 수정이나 업데이트가 다른 모듈에 미치는 영향을 최소화할 수 있습니다.
    • 효율적인 협업
      • 모듈 간의 명확한 경계를 통해 다수의 개발자들이 동시에 작업할 수 있습니다. 각 모듈은 독립적으로 개발, 빌드, 배포되므로 효율적인 협업이 가능합니다.
    • 빌드 속도 향상
      • 변경 사항이 있는 모듈만 빌드되기 때문에 전체 프로젝트를 빌드할 때의 속도가 향상됩니다. 이는 큰 규모의 프로젝트에서 더욱 중요한 이점이 됩니다.
    • 테스트 용이성
      • 각 모듈은 독립적으로 테스트 가능하며, 모듈 간 의존성을 최소화하여 테스트 작성과 유지보수를 간편하게 합니다.
    • 코드 재사용성
      • 공통 모듈이나 라이브러리를 사용하여 코드를 중복으로 작성하지 않고, 여러 프로젝트에서 동일한 기능을 재사용할 수 있습니다.
  • 단점
    • 설정 및 유지 관리의 복잡성
      • 멀티 모듈 프로젝트를 설정하고 관리하는 것은 초기에는 번거로울 수 있습니다. 특히 프로젝트 구조를 일관되게 유지하고 의존성을 관리하는 것이 복잡할 수 있습니다. 또한 잘못된 구성으로 인해 작업량이 증가 할 수도 있습니다.
    • 빌드 시스템의 추가 복잡성
      • 멀티 모듈 프로젝트에서는 각 모듈이 독립적으로 빌드되어야 하므로 빌드 스크립트와 설정이 추가로 필요할 수 있습니다.
    • 의존성 관리의 어려움
      • 모듈 간의 의존성을 관리하는 것이 어려울 수 있습니다. 의존성이 꼬이면 빌드 오류가 발생할 수 있고, 이를 해결하는 것이 복잡할 수 있습니다.
    • 초기 프로젝트 구성에 대한 노하우 필요
      • 프로젝트 초기에 적절한 모듈 구성을 세우는 것이 중요하며, 이를 위해서는 멀티 모듈 아키텍처에 대한 이해와 노하우가 필요합니다.
    • 빌드 시간 오버헤드
      • 일부 모듈이 변경되면 그에 따라 의존하는 다른 모듈들도 다시 빌드되어야 합니다. 따라서 일부 모듈의 변경이 전체 프로젝트의 빌드 시간을 증가시킬 수 있습니다.

 

 

그럼 어떻게 하면 좋을까요?

 

 

사실 클린 아키텍쳐를 이미 도입하고 계시다면 멀티 모듈 프로젝트를 이미 사용하고 있는게 맞습니다.

 

클린아키텍쳐에서는 코드의 목적에 따라 계층 별로 모듈을 생성하고 코드를 분리하여 운영하기 때문입니다.

 

제가 생각하는 멀티 모듈 구성 방법은 다음과 같습니다.

 

  • 기능
    • 주요 기능 또는 도메인에 따라 모듈을 분리합니다. 예를 들어, 사용자 관리, 결제, 통계 등과 같이 각각의 핵심 기능을 모듈로 분리할 수 있습니다.
  • 계층
    • 프로젝트를 Presentation, Domain, Data 등의 계층으로 나누어 모듈을 구성할 수 있습니다. 각 계층은 독립적으로 테스트하고 교체할 수 있어 유연성을 높일 수 있습니다.
  • UI 관련 여부
    • UI 관련 코드와 비 UI 관련 코드를 분리합니다. 예를 들어, 안드로이드 프로젝트에서는 UI 관련 코드와 비 UI 관련 코드를 각각 모듈로 나눌 수 있습니다.
  • 테스트 가능성
    • 모듈은 독립적으로 테스트 가능해야 합니다. 모듈 간의 의존성을 최소화하고, 각 모듈이 자체적으로 테스트할 수 있도록 구성해야 합니다.

 

이 방법 외에도 여러가지 구성하는 방법이 있을 것이라고 생각합니다. 구성 방법에는 정답이 없고 그 프로젝트 상황에 맞는 적합한 방법을 사용하는 것이 더 중요하다고 생각합니다.

 

 

정리

 

멀티 모듈 프로젝트에는 프로젝트 마다 다양한 모듈이 있을 것이라고 생각합니다.

 

좋은 멀티 모듈은 의도와 목적에 맞게 잘 분리되어 개발 및 유지보수가 용이한 구조로 되어 있을때 좋은 멀티 모듈이라고 생각합니다.

 

다음 편에서는 멀티 모듈을 직접 구현해보도록 하겠습니다.

 

감사합니다.

 

반응형

관련글 더보기