Skip to main content

Command Palette

Search for a command to run...

[Android] Multi Module

Multi Module을 왜 쓰는지, Multi Module에서 버전 관리는 어떻게 하는지 알아봅시다.

Updated
3 min read
[Android] Multi Module

더 잘하고 싶은 안드로이드 개발자.

https://github.com/jinukeu

모듈

모듈이란?

  • 모듈은 소스 파일 및 빌드 설정으로 구성된 모음이며, 이를 통해 프로젝트를 별개의 기능 단위로 분할할 수 있다.

  • 프로젝트에서 하나 이상의 모듈이 포함될 수 있으며, 하나의 모듈이 다른 모듈을 종속성으로 사용할 수 있습니다. 각 모듈은 개별적으로 빌드, 테스트 및 디버그 할 수 있다.

  • 안드로이드 프로젝트를 만들면 자동으로 생성되는 app도 모듈의 한 종류.

장점

  • 의존성을 줄일 수 있다. (관심사 분리)
    기존의 단일 모듈 방식에서는 실수로 의존성 규칙을 위반할 수 있지만 멀티 모듈 방식을 사용하면 build.gradle 파일에서 의존성을 추가하지 않으면 다른 모듈의 코드를 사용할 수 없기 때문에 의존성 규칙을 쉽게 관리 가능.

  • 빌드 시간 감소를 기대할 수 있다.
    기본적으로 빌드를 할때 변경된 모듈만 빌드하므로 빌드 시간 감소를 기대할 수 있다. 하지만 모듈간 종속성이 복잡해지고 모듈의 수정이 많다면 빌드 시간이 증가될 수 있다.

  • 코드 재사용성이 높아진다.
    레이어별, 기능별로 모듈을 나눠서 코드를 작성하게되면 해당 기능이 필요할때 해당 모듈에 대한 의존성을 추가해서 사용하면 되기 때문에 재사용성이 높아진다.

  • 모듈 단위 테스트를 할 수 있다.

단점

  • 하나의 앱만 있는데, 모듈을 여러개로 나눠놓으면 코드량이 더 많게 느껴진다.

  • 해당 프로젝트를 처음보면 코드 전체를 보고 이해하기 어렵다.

  • 위의 이유로 오히려 빌드 시간이 늘어날 수 있다.

버전 관리

멀티 모듈을 사용하게되면 build.gradle 파일이 여러개 생긴다.

  • gradle == 빌드 도구(build tool)
    빌드도구는 빌드의 모든 과정(컴파일, 테스트, 배포, 문서화 등의 작업을 포함하는 절차)을 자동으로 처리할 수 있도록 도와주는 것이다. 즉 개발을 좀 더 쉽게 할 수 있도록 도움을 준다! 빌드 도구 중 하나가 Gradle이다. Gradle에서 사용되는 언어로는 그루비 기반의 gradle dsl(Domain-Specific Languages, 도메인 특화 언어)를 사용한다.

  • settings.gradle 파일과 build.gradle 파일의 차이
    settings.gradle : 프로젝트의 구성 정보를 기록하는 파일이다. 어떤 하위 프로젝트들이 어떤 관계로 구성되어 있는지를 기술하면 된다.
    build.gradle : 의존성이나 플러그인 설정 등을 하는 파일이다. 빌드 작업에 필요한 기본 설정, 동작 등을 기술하면 된다.

여러개의 build.gradle에서 공통적으로 사용할 변수를 쓴다거나, dependency들의 버전을 통일하고자 할 때 사용할 수 있는 방법들은 여러가지가 있다.

1. ext(extra) 사용

  • 장점

    • 간단하다.
  • 단점

    • ide 자동 완성이 안되기 때문에 오타를 낼 확률이 있다.

2. Kotlin DSL + buildSrc 사용

  • 장점

    • 컴파일 타임에 에러 확인
  • 코드 탐색

  • 자동 완성

  • 구문 강조

  • IDE의 지원으로 향상된 편집환경

  • 소스코드와 동일한 언어의 사용

  • 단점

    • 빌드 캐시가 Invalidation 되거나 클린 빌드시에 Groovy DSL보다 느리다.

    • Java8이상에서 동작

    • 새로운 라이브러리 버전 Inspection 기능 미지원

    • buildSrc 구성 파일에서 버전을 변경하는 경우 Gradle 이 정의한 플러그인을 포함하여 전체 buildSrc 를 재구성한다. (빌드 캐시 무효화)
      -> 아래에서 설명하는 version catalog 의 경우 함수 호출의 형태라 상수 값의 변경 여부는 무관하기 때문에, 단순 버전 변경이 일어난다고 해도 리빌드를 하지 않으니 그만큼 시간 절약에 도움이 될 수 있다.

3. Version catalog

  • 장점

    • IDE 에서 자동 완성을 통해 종속성을 쉽게 추가할 수 있다.

    • 하나의 파일로 모든 모듈의 종속성 버전을 관리할 수 있다.

    • bundle 을 이용할 수 있다.

참고

https://brunch.co.kr/@purpledev/43
https://velog.io/@dabin/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EB%A9%80%ED%8B%B0%EB%AA%A8%EB%93%88
https://hhyeok1026.tistory.com/38
https://velog.io/@7lo9ve3/gradle
https://brunch.co.kr/@oemilk/221

More from this blog

단위테스트 2장 정리

단위 테스트의 정의에는 많은 늬앙스가 있다. 크게 고전파, 런던파로 나뉜다. 고전파: 모든 사람이 단위 테스트와 테스트 주도 개발에 원론적으로 접근하는 방식 런던파: 런던의 프로그래밍 커뮤니티에서 시작 단위 테스트의 정의 단위 테스트는 작은 코드 조각을 검증하고 빠르게 수행하고 격리된 방식으로 처리하는 자동화된 테스트다. 격리 문제에 대한 런던파의 접근 코드 조각을 격리된 방식으로 검증한다는 것은 무엇을 의미할까? 런던파에서는 테스트 ...

Sep 3, 20243 min read

단위 테스트 1장 정리

단위 테스트 1장 정리 내용입니다. 단위 테스트에 시간을 투자할 때는 항상 최대한 이득을 얻도록 노력해야하며, 테스트에 드는 노력을 가능한 줄이고 그에 따르는 이득을 최대화해야 한다. 이 책에서 다루는 내용은 비용 편익 분석 방법을 배우고 특정 상황에서 적절한 테스트 기술을 적용할 수 있다. 또한 공통적인 안티 패턴을 피하는 방법도 배운다. 단위 테스트의 목표 단위 테스트의 목표는 무엇인가? 프로젝트의 지속 가능한 성장을 가능하게 하는 것이다...

Aug 27, 20242 min read

23년 하반기 회고

23년 상반기 회고에서 이어지는 글이다. 8 - 9월 이력서 제출 그리고 ... 이력서와 포트폴리오를 만들었다. 꽤나 잘 만들었다고 생각했다. 개발자 지인들의 첨삭, 인프런 멘토링, 유료 이력서 첨삭 서비스를 받으며 칭찬을 꽤 받았기 때문이다. 내가 보기에도 괜찮은 것 같고 ... 다른 사람들이 보기에도 괜찮다고 했으니 서류 합격률은 꽤 높을거라 생각했다. 50개의 서류를 넣은 결과, 3번의 서류 합격 그리고 단 한 곳에서만 최종합격했다. (최...

Jan 1, 20243 min read
23년 하반기 회고

[Android] Compose 수명 주기, 부수효과

수명 주기 개요 컴포지션은 UI를 기술하는 컴포저블의 트리 구조이다.컴포지션은 초기 컴포지션을 통해서만 생성되고 리컴포지션을 통해서만 업데이트 된다. 컴포저블의 수명 주기 컴포지션 시작 리컴포지션 컴포지션 종료 리컴포지션은 일반적으로 State<T> 객체가 변경되면 트리거됩니다. 컴포지션 내 컴포저블의 분석 컴포지션 내 컴포저블의 인스턴스는 호출 사이트(call site)로 식별된다. (호출 사이트는 컴포저블이 호출되는 소스코드 위치...

Dec 22, 20236 min read
[Android] Compose 수명 주기, 부수효과

[Android] rememberUpdatedState 완벽 이해

rememberUpdatedState 정의 공식 문서에는 다음과 같이 적혀있다. 값이 변경되는 경우 다시 시작되지 않아야 하는 효과(Effect)에서 값 참조 포스팅을 정리하면서 정의한 rememberUpdateState는 아래와 같다. remember는 초기 컴포지션에서만 값을 저장하고 리컴포지션 때 들어온 값은 저장하지 않는다. 리컴포지션 때 들어온 값도 저장하고 싶을 때 rememberUpdateState를 사용한다. 이게 도대체 ...

Dec 14, 20234 min read
[Android] rememberUpdatedState 완벽 이해

Jinukeu

33 posts