Room 3: wasmJs와 코루틴 지원으로 새로운 메이저 버전으로 마이그레이션하기
Room 3은 androidx.room3 패키지를 도입하여 Android 전용 SQLite Driver API에 대한 의존성을 완전히 제거했습니다. 공개 API는 이제 연결 처리를 위해 문서화된 대안을 사용합니다.
이전 스타일에서 새로운 스타일로 전환하는 예시:
// 이전
roomDatabase.query("select * from users").use { cursor -> ... }
// 이후
roomDatabase.useReaderConnection { connection ->
connection.usePrepared("select * from users") { stmt -> ... }
}
코드 생성은 KAPT에서 KSP로 마이그레이션되었습니다. 모든 내부 DAO 로직은 코루틴을 사용하도록 재작성되어 Kotlin 멀티플랫폼에서 비동기 작업을 단순화합니다.
핵심 업그레이드는 wasmJs 지원입니다. Room의 KMP 버전은 이제 WebAssembly와 호환되어 모바일 웹 개발의 가능성을 열어줍니다.
더 이상 사용되지 않는 기능이 제거되어 레거시 코드로부터 코드베이스가 정리되었습니다.
Room 3으로 마이그레이션하는 단계
마이그레이션은 급진적인 아키텍처 변경 없이 진행됩니다. 주요 단계는 다음과 같습니다:
- build.gradle.kts에서 플러그인과 의존성을 업데이트하세요:
// 루트 build.gradle.kts
plugins {
id("androidx.room3") version "3.0.0-alpha02" apply false
}
// 라이브러리 build.gradle.kts
plugins {
id("androidx.room3")
}
kotlin {
sourceSets {
commonMain {
val room_version = "3.0.0-alpha02"
implementation("androidx.room3:room3-runtime:$room_version")
ksp("androidx.room3:room3-compiler:$room_version")
}
}
}
room3 {
schemaDirectory("$projectDir/schemas")
}
- 임포트를 교체하세요: RoomDatabase, @Entity 및 기타 클래스는 이제 room3 패키지에 있습니다.
- 프로젝트를 빌드하고 오류를 수정하세요. DAO에 suspend 함수가 추가되었고 메서드 네이밍이 변경되었습니다.
- 스키마 디렉토리의 데이터베이스 스키마를 확인하세요 — Room 3은 컴파일에 이를 필요로 합니다.
마이그레이션 후 모든 타겟에서 테스트하세요: JVM, Android, iOS, wasmJs.
KMP 개발을 위한 장점
- 코어의 코루틴: DAO에서 suspend 함수가 기본이 되어 Flow나 LiveData가 필요 없습니다.
- wasmJs: 완전한 WebAssembly 지원으로 우회 방법 없이 브라우저에서 Room을 실행할 수 있습니다.
- KAPT 대신 KSP: 더 빠른 컴파일, 더 적은 아티팩트.
코드 생성의 성능 비교 (일반적인 KMP 프로젝트 기준):
| 메트릭 | Room 2 (KAPT) | Room 3 (KSP) |
|----------------------|---------------|---------------|
| 컴파일 시간 | 45 초 | 22 초 |
| APK 크기 | 1.2 MB | 0.9 MB |
| wasm에서 실행 | 아니오 | 예 |
데이터는 근사치이며 프로젝트 크기에 따라 다릅니다.
핵심 포인트
- Android 의존성 없는 깔끔한 API를 가진 새로운 room3 패키지.
- KMP를 위한 완전한 코루틴 및 KSP 지원.
- 웹 애플리케이션을 위한 wasmJs 통합.
- 마이그레이션은 간단합니다: 의존성 업데이트 + 임포트 수정.
- 알파 버전: 프로덕션 사용을 위해 안정 버전을 기다리세요.
구현 권장사항
중급/시니어 개발자를 위해: 새로운 KMP 프로젝트로 시작하세요. 레거시 프로젝트의 경우 3.0.0-stable까지 마이그레이션을 연기하세요.
실제 시나리오로 테스트하세요:
- suspend 함수를 사용한 트랜잭션.
- wasm에서의 스키마 마이그레이션.
- 브라우저에서의 쿼리 성능.
Room 3은 특히 wasm 생태계의 성장과 함께 멀티플랫폼을 위한 범용 ORM으로서의 입지를 강화합니다.
— Editorial Team
아직 댓글이 없습니다.