hyeon.s
개발로그
hyeon.s
전체 방문자
오늘
어제
  • 분류 전체보기 (150)
    • Web 및 인프라 (1)
      • Web (1)
      • Terraform (2)
      • Docker (1)
    • Android (1)
      • 공부 (28)
      • 트러블슈팅 (12)
      • 프로젝트 개발 (10)
      • Compose (2)
      • 우테코 프리코스 (0)
    • Server (5)
      • 공부 (1)
      • Spring (4)
    • 알고리즘 (68)
      • 문제풀이 (C++,Kotlin) (54)
      • 공부 (13)
    • 디자인 (3)
      • UI (3)
    • Language (5)
      • Kotlin (5)
      • JAVA (0)
    • IT 동아리 (8)
      • UMC 3기 (Android) (7)
      • Sopt 32기 (Android) (1)

Github

글쓰기 / 관리자
hELLO · Designed By 정상우.
hyeon.s

개발로그

[Android] implemantation을 Version Catalog로 바꿔보자
Android/프로젝트 개발

[Android] implemantation을 Version Catalog로 바꿔보자

2024. 12. 12. 21:25
728x90

들어가기 전

우리의용기 프로젝트를 -v2 로 마이그레이션 하는 과정에서 기존 의존성 버전 관리 방법에서 버전 카탈로그 방식으로 변경하였다. 이러한 변경의 과정과, 왜 이 변경이 필요했고 어떤 장점이 존재하는지 이번 포스팅에서 알아보고자 한다.

Gradle 버전 카탈로그를 활용한 의존성 관리: 왜 필요할까?

기존 방식의 문제점

build.gradle에서 의존성을 관리할 때, 보통 아래와 같은 방식으로 버전을 명시한다.

implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2")

이 방식은 간단하고 익숙하지만, 프로젝트가 커지면서 다음과 같은 문제가 발생할 수 있다.

  1. 버전 중복: 여러 모듈에서 동일한 의존성을 사용하는 경우, 각 모듈마다 버전을 반복적으로 명시해야 한다. 버전 관리가 일관되지 않으면 빌드 실패의 원인이 될 수 있다.
  2. 업데이트 어려움: 의존성 버전을 업데이트할 때 모든 모듈의 버전을 일일이 찾아 변경해야 한다.
  3. 가독성 저하: 의존성이 많아질수록 build.gradle 파일이 복잡해지고, 버전 관리와 의존성 추가가 뒤섞이면서 가독성이 떨어진다.

따라서 버전 카탈로그로 마이그레이션을 진행하였다.

버전 카탈로그란?

Gradle 7.0에서 도입된 Version Catalog는 의존성과 버전을 중앙에서 관리할 수 있는 기능이다. 이를 통해 프로젝트 전반에서 일관된 의존성 관리가 가능하다. 버전 카탈로그는 libs.versions.toml 파일을 사용하여 의존성 이름, 그룹, 버전을 선언한다.

버전 카탈로그를 사용하는 이유

  1. 중앙 집중 관리: 의존성 정보를 한 곳에서 관리하므로 일관성이 유지된다.
  2. 업데이트 용이: 특정 의존성의 버전을 변경하면 프로젝트 전반에 즉시 반영된다.
  3. 코드 간결화: 각 모듈의 build.gradle 파일이 더 간결해지고 읽기 쉬워진다.
  4. 재사용성: 팀원 간에 공통된 의존성을 쉽게 공유할 수 있다.

버전 카탈로그 방식으로 마이그레이션

기존 방식에서 버전 카탈로그를 활용한 의존성 관리 방식으로 전환하는 방법은 다음과 같다.

1. libs.versions.toml 파일이 없다면 생성

gradle 디렉터리 아래에 libs.versions.toml 파일을 생성한다.

.
├── gradle
│   └── libs.versions.toml
└── build.gradle

2. ⭐ 의존성 추가하기

implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2")

위 예시를 바탕으로 libs.versions.toml 파일에 의존성과 버전을 선언해보자.

[versions]
kotlinx-coroutines = "1.5.2"

[libraries]
kotlinx-coroutines-core = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-core", version.ref = "kotlinx-coroutines" }

[versions]

의존성 버전을 관리하는 섹션이다.

라이브러리의 이름 = “version” 으로 버전을 작성할 수 있다.

[libraries]

의존성 그룹과 이름을 정의하고, [versions] 섹션에서 참조한다.

라이브러리 이름 = {group = , name = , version.ref = “versions 참조 내용” } 로 라이브러리를 정의할 수 있다. 이 때 group과 name은 기존 implementation () 안의 내용을 : 를 기준으로 group, name, version 으로 나누어 작성하면 된다.

build.gradle.kts에서 사용할 때는

dependencies {
            implementation(libs.kotlinx.coroutines.core)
}

위와 같이 libs로 의존성을 추가할 수 있다.

[bundles]

여러 라이브러리를 묶을 때 사용한다.

예시로 libs.version.toml에서 compose-ui, compose-material, compose-ui-tooling을 선언했을 때 라이브러리를 묶어 의존성을 추가하고싶다면 bundles를 사용할 수 있다.

[bundles]
compose = ["compose-ui", "compose-material", "compose-ui-tooling"]`

build.gradle.kts에서 사용할 때는

dependencies {
    **implementation(libs.bundles.compose)**
}

위와 같이 bundles의 이름으로 의존성을 추가하면 3가지의 라이브러리가 묶여 추가된다.

3. 테스트 및 검증

Gradle 빌드를 실행하여 마이그레이션이 정상적으로 작동하는지 확인한다.

gradle build

정상적으로 작동하는지 확인하면 버전 카탈로그로의 마이그레이션이 성공적으로 진행된 것이다.
그 결과 우리의 용기 의존성 코드를 왼쪽에서 오른쪽으로 간결하고, 더욱 버전관리가 쉽게 변경할 수 있었다.

특히 함께 사용되는 라이브러리들은 bundles로 묶어 implementation하여 더욱 간결하게 나타낼 수 있었다.

마무리

버전 카탈로그를 사용하면 프로젝트 규모가 커질수록 더욱 유용하다. 중복된 버전 관리로 인한 실수를 방지하고, 의존성 추가와 관리가 훨씬 효율적이 된다. 특히 팀 프로젝트에서 협업 생산성을 높이는 데 큰 도움이 될것 같다. Gradle 버전 카탈로그를 도입하여 유지 보수성을 높이는 것을 추천한다.

 

728x90
저작자표시 (새창열림)

'Android > 프로젝트 개발' 카테고리의 다른 글

[Android] Github Actions로 업무 생산성 향상 시키기 feat. APK 자동 추출  (0) 2024.12.12
[Android] PDF 뷰어 띄우기 / Activity 내에 PDF 뷰어 넣기 feat. 파일관리  (0) 2024.09.20
[Android/JAVA] Zxing 활용 바코드/QR 스캐너 구현하기  (0) 2024.08.07
[Android] Retrofit에서 XML 데이터 통신 및 파싱 방법 / RecyclerView XML 데이터 받아오기  (0) 2024.02.26
[Android] 인앱 업데이트 구현하기 / 인앱 업데이트 테스트  (1) 2023.11.01
'Android/프로젝트 개발' 카테고리의 다른 글
  • [Android] Github Actions로 업무 생산성 향상 시키기 feat. APK 자동 추출
  • [Android] PDF 뷰어 띄우기 / Activity 내에 PDF 뷰어 넣기 feat. 파일관리
  • [Android/JAVA] Zxing 활용 바코드/QR 스캐너 구현하기
  • [Android] Retrofit에서 XML 데이터 통신 및 파싱 방법 / RecyclerView XML 데이터 받아오기
hyeon.s
hyeon.s
이유있는 코드를 짜자

티스토리툴바