안드로이드

Version Catalog 도입기 (1)

최효식 2024. 3. 28. 03:25

일단 먼저 도입 하기전에 안드로이드 gradle 에서 버전 관리를 할 수 있는 방법에 대해서 정의 해보고 왜 Version Catalog 를 개인 프로젝트에서 도입을 하려고 했는지 설명하겠습니다.

 

1. build.gradle(groovy 사용) 

 

가장 처음에 프로젝트를 생성하면 작성되어 있는 방법입니다. 

 

장점)

  • 가장 손쉽게 버전을 추가하고 관리를 할 수 있습니다.
  • 단일 모듈에 단일 프로젝트일 시 빠르게 버전을 추가하고 개발을 진행할 수 있습니다.

단점)

  • groovy 언어로 작성시 컴파일 단계에서 종속성의 오류를 발견할 수 없습니다.
// Coroutine
    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.99")

 

위와 같이 1.5.99 라는 말도 안되는 버전을 명시 해도 sync 후 build 시 Build Success 가 뜨게 됩니다.

 

 

  • implementation 이 증가할수록 gradle 파일의 가독성이 점점 떨어지게 됩니다.
  • 버전 명시를 String 으로 하기 때문에 문법적인 오타나 오류를 컴파일 단계에서 발견할 수 없습니다.

 

 

2. buildSrc (kotlin-dsl 사용)

 

Version Catalog 에 대해 알기 전까지는 필자도 buildSrc 를 애용하고 있었습니다. 별도의 buildSrc library 모듈을 만들어서 kotlin 파일에서 모든 종속성의 버전관리를 kotlin 언어로 작성해서 관리하는 방법입니다.

 

장점)

  • kotlin 언어로 작성하기 때문에 컴파일 시 문법적인 오류를 발견할 수 있습니다.
 // Coroutine
    implementation(Kotlin.COROUTINES_CORe)

 

위와 같이 E 를 e 로 소문자로 적고 빌드를 실행하게 되면

 

 

바로 해당 gradle 파일의 23라인에 오류가 있다고 알려줍니다. 

 

  • 여러 의존성들이 추가가 되더라도 가독성이 groovy 보다 훨씬 뛰어납니다.
dependencies {

    implementation project(":domain")

    implementation AndroidX.CORE_KTX
    implementation AndroidX.APP_COMPAT
    implementation Google.MATERIAL
    testImplementation UnitTest.JUNIT
    androidTestImplementation AndroidTest.ANDROID_JUNIT
    androidTestImplementation AndroidTest.ESPRESSO_CORE
    implementation AndroidX.CONSTRAINTLAYOUT

    // Coroutine
    implementation(Kotlin.COROUTINES_CORE)
    implementation(Kotlin.COROUTINES_ANDROID)
    testImplementation(UnitTest.COROUTINE_TEST)
    androidTestImplementation(AndroidTest.ANDROID_COROUTINE_TEST)

    // GLide
    implementation(Libraries.GLIDE)
    annotationProcessor(Libraries.GLIDE_COMPILER)

    // Dagger Hilt
    implementation Google.HILT_ANDROID
    kapt Google.HILT_ANDROID_COMPILER

    implementation(AndroidX.ACTIVITY_KTX)
    implementation(AndroidX.FRAGMENT_KTX)
    implementation(AndroidX.LIFECYCLE_VIEWMODEL_KTX)

    testImplementation(UnitTest.TRUTH)
    testImplementation(UnitTest.COROUTINE_TEST)
    androidTestImplementation(AndroidTest.ANDROID_TRUTH)

    testImplementation UnitTest.MOCKK
    androidTestImplementation AndroidTest.ANDROID_MOCKK

}

 

  • kotlin 언어를 사용하다 보니 IDE 에서 자동완성을 지원해줍니다.

 

 

  • 문법 뿐만 아니라 잘못된 버전으로 주입 시 컴파일 단계에서 오류를 잡아줍니다.
    • 아까와 같이 1.5.99 로 빌드 시 빌드 시점에서 바로 잘못된 버전이라고 오류를 잡아냅니다.

 

 

 

단점)

 

  • 특정 버전 하나가 수정 되면 빌드시 버전의 영향을 받은 모듈만 재빌드가 일어나는게 아닌 모든 모듈이 재빌드가 일어나 빌드 시간이 늘어나게 된다. 

 

 

위와 같은 buildSrc 의 단점 때문에 Version Catalog 를 도입해봐야 겠다고 생각을 하게 되었습니다.

Version Catalog 는 버전을 수정시 영향을 받은 모듈만 재빌드가 일어나기 때문에 빌드 시간이 확실히 빠르다는 느낌을 받았습니다. 

 

다음 글에서 Version Catalog 를 어떤식으로 프로젝트에 적용했는지에 대해서 설명하겠습니다.