들어가기 전
우리의용기 프로젝트를 -v2 로 마이그레이션 하는 과정에서 기존 의존성 버전 관리 방법에서 버전 카탈로그 방식으로 변경하였다. 이러한 변경의 과정과, 왜 이 변경이 필요했고 어떤 장점이 존재하는지 이번 포스팅에서 알아보고자 한다.
Gradle 버전 카탈로그를 활용한 의존성 관리: 왜 필요할까?
기존 방식의 문제점
build.gradle
에서 의존성을 관리할 때, 보통 아래와 같은 방식으로 버전을 명시한다.
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2")
이 방식은 간단하고 익숙하지만, 프로젝트가 커지면서 다음과 같은 문제가 발생할 수 있다.
- 버전 중복: 여러 모듈에서 동일한 의존성을 사용하는 경우, 각 모듈마다 버전을 반복적으로 명시해야 한다. 버전 관리가 일관되지 않으면 빌드 실패의 원인이 될 수 있다.
- 업데이트 어려움: 의존성 버전을 업데이트할 때 모든 모듈의 버전을 일일이 찾아 변경해야 한다.
- 가독성 저하: 의존성이 많아질수록
build.gradle
파일이 복잡해지고, 버전 관리와 의존성 추가가 뒤섞이면서 가독성이 떨어진다.
따라서 버전 카탈로그로 마이그레이션을 진행하였다.
버전 카탈로그란?
Gradle 7.0에서 도입된 Version Catalog는 의존성과 버전을 중앙에서 관리할 수 있는 기능이다. 이를 통해 프로젝트 전반에서 일관된 의존성 관리가 가능하다. 버전 카탈로그는 libs.versions.toml
파일을 사용하여 의존성 이름, 그룹, 버전을 선언한다.
버전 카탈로그를 사용하는 이유
- 중앙 집중 관리: 의존성 정보를 한 곳에서 관리하므로 일관성이 유지된다.
- 업데이트 용이: 특정 의존성의 버전을 변경하면 프로젝트 전반에 즉시 반영된다.
- 코드 간결화: 각 모듈의
build.gradle
파일이 더 간결해지고 읽기 쉬워진다. - 재사용성: 팀원 간에 공통된 의존성을 쉽게 공유할 수 있다.
버전 카탈로그 방식으로 마이그레이션
기존 방식에서 버전 카탈로그를 활용한 의존성 관리 방식으로 전환하는 방법은 다음과 같다.
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 버전 카탈로그를 도입하여 유지 보수성을 높이는 것을 추천한다.
'Android > 프로젝트 개발' 카테고리의 다른 글
[Android] Github Actions로 업무 생산성 향상 시키기 feat. APK 자동 추출 (0) | 2024.12.12 |
---|---|
[Android] Menu 데이터는 어디에 저장하는 게 성능이 좋을까? (RoomDB vs Object) (0) | 2024.12.05 |
[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 |