제품 소식

Room 3.0 - Room 현대화

4분 읽기
Daniel Santiago Rivera
소프트웨어 엔지니어

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와 호환되며 Room의 Android API 종속 항목을 삭제하면 가능한 백엔드가 두 개가 되지 않으므로 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-runtimeandroidx.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 문서를 참고하세요.

Room을 이전하여 SQLiteDriver API를 사용하는 방법에 관한 자세한 내용은 SupportSQLite에서 이전하는 공식 문서를 참고하세요.

Room SupportSQLite 래퍼

SupportSQLite를 완전히 삭제하는 것이 모든 프로젝트에 즉시 실현 가능하지 않을 수 있다는 것을 잘 알고 있습니다. 이 전환을 용이하게 하기 위해 Room 2.0 시리즈의 최신 버전인 Room 2.8.0에서는 androidx.room:room-sqlite-wrapper라는 새 아티팩트를 도입했습니다. 이 아티팩트는 데이터베이스의 SupportSQLite API가 SQLiteDriver가 설치되어 사용 중지된 경우에도 RoomDatabaseSupportSQLiteDatabase로 변환할 수 있는 호환성 API를 제공합니다. 이를 통해 코드베이스를 완전히 이전하는 데 시간이 더 필요한 개발자를 위한 임시 브리지를 제공합니다. 이 아티팩트는 중요한 SupportSQLite 사용을 계속 지원하면서 Room 3.0으로의 이전을 지원하기 위해 Room 3.0에서 androidx.room3:room3-sqlite-wrapper로 계속 존재합니다.

예를 들어 roomDatabase.openHelper.writableDatabase 호출은 roomDatabase.getSupportWrapper()로 대체할 수 있으며 Room의 빌더에서 setDriver()가 호출되더라도 래퍼가 제공됩니다.

자세한 내용은 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)에 데이터베이스를 유지할 수 있는 웹 작업자 기반 드라이버입니다.

웹용 Room을 설정하는 방법에 관한 자세한 내용은 Room 3.0 출시 노트를 참고하세요.

맞춤 DAO 반환 유형

Room 3.0에서는 RxJava 및 Paging과 마찬가지로 Room에 맞춤 통합을 추가하는 기능을 도입합니다. @DaoReturnTypeConverter라는 새 주석 API를 통해 Room의 생성된 코드가 런타임에 액세스할 수 있도록 자체 통합을 만들 수 있습니다. 이를 통해 Room팀이 지원을 추가할 때까지 기다리지 않고도 맞춤 반환 유형이 있는 @Dao 함수를 사용할 수 있습니다. 기존 통합은 이 기능을 사용하도록 이전되므로 이제 이를 사용하는 사용자는 @Database 또는 @Dao 정의에 변환기를 추가해야 합니다.

예를 들어 Paging 변환기는 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 생태계에 제공하는 기회에 매우 기대하고 있습니다. 이 여정을 계속 진행하면서 더 많은 업데이트를 기대해 주세요.

작성자:

계속 읽기