티스토리 뷰
안녕하세요. Mobile Application 팀 전계원입니다.
어느 날 Android 개발 중 jcenter 에 있는 경고 문구를 확인하였습니다.
이에 궁금증을 가지고 jcenter 와 관련하여 찾아본 이런저런 내용들에 대해 공유드리고자 합니다.
0. 프롤로그 - jcenter() 코드에 그어진 한 개의 줄
Android Studio 의 다크테마 속에서 jcenter() 코드가 노랗게 반짝이고 있었습니다.
마우스를 올려보니 "jcenter maven repository 는 update 를 제공하지 않는다" 라고 쓰여있었습니다.
jcenter 에 대체 무슨 일이 있었던 것일까요?
1. Gradle 저장소에서 사라진 jcenter 의 흔적
https://docs.gradle.org/current/userguide/declaring_repositories.html
그러고 보니 gradle 공식문서를 살펴보면 과거에는 Gradle 저장소에는 mavenCentral(), jcenter(), google() 이렇게 3가지가 있다고 쓰여있었는데, 최근 문서를 확인해 보면 jcenter 는 어디론가 사라져 있었습니다.
https://docs.gradle.org/current/userguide/declaring_repositories.html
여기서 mavenCentral() 은 java 프로젝트에서의 오픈소스 라이브러리들을 받기 위한 저장소이며, google() 은 Android SDK 에 포함되어 있는 Android 라이브러리를 가져오기 위한 maven 저장소입니다.
2. 우리식당 정상 영업합니다
jcenter 는 bintray 에서 호스팅 하고 있는 Java 와 관련한 라이브러리와 패키지 등이 저장된 오픈소스 라이브러리 공개 저장소입니다.
https://jfrog.com/blog/into-the-sunset-bintray-jcenter-gocenter-and-chartcenter/
어느 날 bintray 에서 21년 2월에 jcenter 을 지원중단할 것이며, jcenter 사용자들은 새로운 호스팅 솔루션으로 migration 하기를 권하였고, 21년 4월부터는 jcenter 의 새로운 업데이트는 받지 않는다는 공식 포스트가 업로드되었습니다.
https://jfrog.com/blog/into-the-sunset-bintray-jcenter-gocenter-and-chartcenter/
다행히 jcenter repository 가 지원중단되지만, 업데이트가 되지 않을 뿐 서버가 문을 닫는 것은 아니었습니다.
덕분에 우리는 지원 중단된 jcenter 를 여전히 사용할 수 있으며, 갑자기 빌드가 실패하는 문제를 겪지 않을 수 있었습니다.
3. jcenter 문 닫습니다 (2024년 8월 15일 예정)
https://jfrog.com/blog/into-the-sunset-bintray-jcenter-gocenter-and-chartcenter/
2024년 7월 2일. binray 는 read-only 로 저장소를 유지한 지 3년이 지났으니 maven central 로 옮길 수 있도록 지원하기 위해 jcenter 를 완전히 종료하겠다는 공식 포스트를 업로드하였습니다.
추가로 갑자기 서버를 내리면 이를 참조하고 있던 수많은 프로젝트들이 혼돈에 겪을 것이기에 bintray 는 다음과 같은 Brownout Schedule 을 발표합니다.
서버 내림 일정 (한국시간 기준)
- 7월 30일 16:00 ~ 17:00 (1시간)
- 7월 31일 03:00 ~ 04:00 (1시간)
- 8월 05일 16:00 ~ 20:00 (4시간)
- 8월 06일 03:00 ~ 07:00 (4시간)
- 8월 07일 22:00 ~ 8월 08일 22:00 (24시간)
- 8월 15일 09:00 ~ (문 닫습니다)
4. jcenter 가 문을 닫으면 우리 같은 개발자들은 어떻게 하라는 겐가?
https://jfrog.com/blog/into-the-sunset-bintray-jcenter-gocenter-and-chartcenter/
서버가 문을 닫게 되면 jcenter 를 향한 모든 request 들은 자동으로 모두 maven central(https://repo1.maven.org/maven2/) 로 redirect 됩니다.
그렇기 때문에 현존하는 project 들이 영향을 받을 수 있으며, maven central 과 호환되지 않는 버전을 참조하고 있다면 빌드시점에 오류가 발생할 수 있습니다.
이를 해결하는 방법은 간단합니다.
...
dependencies {
api "com.android.volley:volley:1.1.0"
...
}
우선 jcenter() 를 지우고 mavenCentral() 로 변경합니다.
그리고 volley 를 예시로 하였을 때 위와 같이 오래된 라이브러리가 존재하면 라이브러리를 찾지 못한다고 이 시점에서 에러가 발생할 수 있습니다.
https://repo.maven.apache.org/maven2/com/android/volley/volley/
이 경우 MavenCentral 에서 호환되는 버전을 확인 후 알맞은 버전으로 업데이트하면 해결할 수 있습니다.
5. TL;DR
- jcenter 는 bintray 에서 호스팅 하는 java 오픈소스 라이브러리 공개저장소입니다
- 2021년 2월에 지원 중단했지만 서버를 내린 것은 아니었습니다
- 2024년 8월 15일에 서버를 내릴 예정입니다.
- 서버 내리면 jcenter 로 향한 모든 요청은 mavenCentral 로 redirect 됩니다
- mavenCentral 저장소에는 없는데 jcenter 에만 있는 구버전 라이브러리를 사용한다면 mavenCentral 에서 호환하는 라이브러리 버전으로 업데이트가 필요합니다.
6. 참고자료
JCenter Sunset on August 15th, 2024 : https://jfrog.com/blog/jcenter-sunset/
Into the Sunset on May 1st: Bintray, GoCenter, and ChartCenter : https://jfrog.com/blog/into-the-sunset-bintray-jcenter-gocenter-and-chartcenter/
Gradle 공식문서 : https://docs.gradle.org/current/userguide/declaring_repositories.html
'Mobile' 카테고리의 다른 글
statements 가 있는 switch/when 구문 deep dive (feat. bytecode) (0) | 2023.10.25 |
---|---|
Xcode 15 의 iOS 17 빌드에서 User Agent 가 원하는 값으로 설정되지 않을때 (feat. iOS 버전별 WebKit 버전과 작업 내역 확인하기) (1) | 2023.10.19 |
OS 10 이하에서 Backstack 에 Activity 가 중첩되어 쌓이는 이슈 (0) | 2023.07.05 |
DiffUtil 이해하기 (0) | 2023.05.17 |
버그와 함께 알아보는 RecyclerView 에서 wrap_content 사용을 조심해야 하는 이유 (0) | 2023.04.05 |