Room 3.0의 첫 번째 알파 버전이 출시되었습니다. Room 3.0은 Kotlin Multiplatform (KMP)에 중점을 두고 기존 Android, iOS, JVM 데스크톱 지원 외에 JavaScript 및 WebAssembly (WASM) 지원을 추가하는 라이브러리의 주요 호환성이 깨지는 버전입니다.
이 블로그에서는 브레이킹 체인지, Room 3.0의 이유, Room 2.0에서 이전하기 위해 할 수 있는 다양한 작업을 간략하게 설명합니다.
브레이킹 체인지
Room 3.0에는 다음과 같은 브레이킹 API 변경사항이 포함되어 있습니다.
- SupportSQLite API 삭제: Room 3.0은 androidx.sqlite 드라이버 API로 완전히 지원됩니다. SQLiteDriver API는 KMP와 호환되며 Android API에 대한 Room의 종속 항목을 삭제하면 가능한 백엔드가 두 개가 되지 않으므로 Android의 API 노출 영역이 간소화됩니다.
- 더 이상 Java 코드 생성 안 함: Room 3.0에서는 Kotlin 코드만 생성합니다. 이는 진화하는 Kotlin 우선 패러다임과 일치할 뿐만 아니라 코드베이스와 개발 프로세스를 간소화하여 더 빠른 반복을 지원합니다.
- KSP에 집중: Java 주석 처리 (AP) 및 KAPT 지원도 중단됩니다. Room 3.0은 KSP (Kotlin Symbol Processing) 프로세서 전용으로, Java 언어에 제한되지 않고 Kotlin 코드베이스를 더 효과적으로 처리할 수 있습니다.
- 코루틴 우선: Room 3.0은 Kotlin 코루틴을 채택하여 API를 코루틴 우선으로 만듭니다. 코루틴은 KMP 호환 비동기 프레임워크이며, 기본적으로 Room을 비동기로 만드는 것은 웹 플랫폼을 지원하는 데 중요한 요구사항입니다.
새 패키지
기존 Room 2.x 구현 및 Room에 전이 종속 항목이 있는 라이브러리 (예: WorkManager)와의 호환성 문제를 방지하기 위해 Room 3.0은 새 패키지에 상주하므로 새 Maven 그룹과 아티팩트 ID도 있습니다. 예를 들어 androidx.room:room-runtime이 androidx.room3:room3-runtime로 변경되었으며 androidx.room.RoomDatabase와 같은 클래스가 이제 androidx.room3.RoomDatabase에 있습니다.
Kotlin 및 코루틴 우선
더 이상 Java 코드 생성이 없으므로 Room과 상호작용하는 코드베이스가 Java로 되어 있더라도 Room 3.0에는 KSP와 Kotlin 컴파일러가 필요합니다. Room 사용이 집중되어 있고 Kotlin Gradle 플러그인과 KSP를 나머지 코드베이스에 영향을 주지 않고 적용할 수 있는 다중 모듈 프로젝트를 사용하는 것이 좋습니다.
또한 Room 3.0에서는 코루틴이 필요하며, 특히 DAO 함수가 반응형 유형(예: Flow)을 반환하지 않는 한 정지되어야 합니다. Room 3.0에서는 차단 DAO 함수가 허용되지 않습니다. 애플리케이션에 코루틴을 통합하는 방법을 알아보려면 Android의 코루틴 문서를 참고하세요.
SQLiteDriver API로 이전
SupportSQLite에서 벗어남에 따라 앱은 SQLiteDriver API로 이전해야 합니다. 이 이전은 BundledSQLiteDriver를 통해 번들로 제공되는 SQLite 라이브러리 사용을 허용하는 등 Room 3.0의 모든 이점을 활용하는 데 필수적입니다. Room 2.7.0 이상을 사용하여 지금 바로 드라이버 API로 마이그레이션할 수 있습니다. SupportSQLite를 더 이상 사용하지 않는 것이 좋습니다. Room 통합을 SQLiteDriver API로 이전하면 패키지 변경사항이 주로 심볼 참조 (가져오기) 업데이트와 관련되어 호출 사이트를 최소한으로 변경해야 할 수 있으므로 Room 3.0으로의 전환이 더 쉬워집니다.
SQLiteDriver API에 관한 간략한 개요는 SQLiteDriver API 문서를 참고하세요.
SQLiteDriver API를 사용하도록 Room을 이전하는 방법에 관한 자세한 내용은 공식 SupportSQLite에서 이전하는 문서를 참고하세요.
Room SupportSQLite 래퍼
SupportSQLite를 완전히 삭제하는 것이 모든 프로젝트에서 즉시 가능하지 않을 수도 있습니다. 이 전환을 용이하게 하기 위해 Room 2.0 시리즈의 최신 버전인 Room 2.8.0에서는 androidx.room:room-sqlite-wrapper라는 새로운 아티팩트를 도입했습니다. 이 아티팩트는 SQLiteDriver가 설치되어 데이터베이스의 SupportSQLite API가 사용 중지된 경우에도 RoomDatabase를 SupportSQLiteDatabase로 변환할 수 있는 호환성 API를 제공합니다. 이를 통해 코드베이스를 완전히 이전하는 데 시간이 더 필요한 개발자에게 임시 브리지를 제공합니다. 이 아티팩트는 중요한 SupportSQLite 사용을 계속 지원하면서 Room 3.0으로의 이전을 지원하기 위해 Room 3.0에서 androidx.room3:room3-sqlite-wrapper로 계속 존재합니다.
예를 들어 roomDatabase.openHelper.writableDatabase 호출은 roomDatabase.getSupportWrapper()로 대체될 수 있으며 setDriver()가 Room의 빌더에서 호출되더라도 래퍼가 제공됩니다.
자세한 내용은 room-sqlite-wrapper 문서를 확인하세요.
Room 및 SQLite 웹 지원
Kotlin Multiplatform이 JS 및 WasmJS를 타겟팅하고 가장 중요한 API 변경사항을 가져옵니다. 특히 Room 3.0의 많은 API는 웹 스토리지를 적절하게 지원하는 것이 비동기식이므로 정지 함수입니다. SQLiteDriver API도 웹을 지원하도록 업데이트되었으며 새로운 웹 비동기 드라이버는 androidx.sqlite:sqlite-web에서 사용할 수 있습니다. Origin private file system (OPFS)에 데이터베이스를 유지할 수 있는 Web Worker 기반 드라이버입니다.
웹용 Room 설정 방법에 관한 자세한 내용은 Room 3.0 출시 노트를 참고하세요.
맞춤 DAO 반환 유형
Room 3.0에서는 RxJava 및 Paging과 유사하게 Room에 맞춤 통합을 추가하는 기능을 도입합니다. @DaoReturnTypeConverter라는 새로운 주석 API를 통해 런타임에 Room의 생성된 코드에 액세스할 수 있도록 자체 통합을 만들 수 있습니다. 이를 통해 Room팀이 지원을 추가할 때까지 기다리지 않고도 맞춤 반환 유형이 있는 @Dao 함수를 사용할 수 있습니다. 기존 통합이 이 기능을 사용하도록 이전되므로 이제 이 기능을 사용하는 사용자는 @Database 또는 @Dao 정의에 변환기를 추가해야 합니다.
예를 들어 페이징 변환기는 androidx.room3:room3-paging 아티팩트에 있으며 PagingSourceDaoReturnTypeConverter라고 합니다. 한편 LiveData의 경우 변환기가 androidx.room3:room3-livedata에 있고 LiveDataDaoReturnTypeConverter로 호출됩니다.
자세한 내용은 Room 3.0 출시 노트의 DAO 반환 유형 변환기 섹션을 참고하세요.
Room 2.x의 유지보수 모드
Room 개발은 Room 3에 집중되므로 현재 Room 2.x 버전은 유지 관리 모드로 전환됩니다. 즉, 주요 기능은 개발되지 않지만 버그 수정 및 종속 항목 업데이트가 포함된 패치 출시 (2.8.1, 2.8.2 등)는 계속됩니다. 팀은 Room 3이 안정화될 때까지 이 작업을 계속할 예정입니다.
결론
Room 3.0의 잠재력과 Kotlin 생태계에 제공하는 기회에 대한 기대가 매우 큽니다. 앞으로도 계속해서 새로운 소식을 전해 드릴 예정이니 기대해 주세요.
계속 읽기
-
제품 소식
모든 개발자의 AI 워크플로와 요구사항은 고유하며, AI가 개발에 어떤 도움을 줄지 선택할 수 있는 것이 중요합니다. 1월에는 Android 스튜디오에서 AI 기능을 구동하는 데 로컬 또는 원격 AI 모델을 선택할 수 있는 기능이 도입되었습니다.
Matthew Warner • 전문 길이: 2분
-
제품 소식
이제 Android 스튜디오 Panda 3가 안정화되어 프로덕션에서 사용할 수 있습니다. 이번 출시를 통해 AI 기반 워크플로를 더욱 세부적으로 제어하고 맞춤설정할 수 있어 고품질 Android 앱을 그 어느 때보다 쉽게 빌드할 수 있습니다.
Matt Dyor • 3분 읽기
-
제품 소식
Google은 가장 강력한 AI 모델을 주머니 속 Android 기기에 직접 제공하기 위해 최선을 다하고 있습니다. 오늘 최신 최첨단 개방형 모델인 Gemma 4의 출시를 발표하게 되어 매우 기쁩니다.
Caren Chang, David Chou • 3분 읽기
소식 받아 보기
Android 개발 관련 최신 정보를 이메일로 받아 보세요.