Android에서 Room을 사용하여 로컬 데이터베이스를 생성하는 완벽 가이드

  • Room은 SQLite 위에 고급 추상화 계층 역할을 하여 데이터 영속성을 간소화합니다.
  • 이 아키텍처는 엔티티, DAO 및 데이터베이스 클래스라는 세 가지 핵심 요소에 기반합니다.
  • 이 라이브러리는 LiveData, ViewModel, Kotlin 코루틴과 같은 Jetpack 구성 요소와의 네이티브 통합을 지원합니다.
  • 컴파일 중에 SQL 쿼리 검증을 제공하여 런타임 오류를 획기적으로 줄입니다.

Android에서 Room을 사용하여 로컬 데이터베이스 생성

대량의 정형 데이터를 처리하는 애플리케이션을 개발할 때, 인터넷 연결에 항상 의존할 수 있는 것은 아니라는 사실을 깨닫게 됩니다. 바로 이 지점에서 가능성이 열립니다. 정보를 로컬에 저장하세요이를 통해 앱은 비행기 모드이거나 통신 상태가 좋지 않은 지역에서도 작동할 수 있습니다. 가장 일반적인 시나리오는 사용자가 중단 없이 콘텐츠를 계속 탐색할 수 있도록 캐싱 시스템을 구축하는 것입니다.

코딩에 얽매이지 않고 이를 구현하기 위해 Google은 Room 라이브러리를 제공합니다. 기본적으로 Room은 다음과 같은 기능을 합니다. SQLite 위에 있는 추상화 계층 Room은 반복적이고 번거로운 작업을 없애주어, 훨씬 더 현대적이고 안전한 방식으로 관계형 데이터베이스의 모든 기능을 활용할 수 있도록 해줍니다. 오류 발생 가능성이 높은 표준 코드를 작성하는 것은 잊으세요. Room은 모든 요소가 더욱 매끄럽게 연결되도록 도와줍니다.

기존 SQLite 대신 Room을 선택해야 하는 이유는 무엇일까요?

SQLite의 네이티브 API를 사용하는 것은 저수준 시스템이기 때문에 상당한 어려움을 초래할 수 있습니다. 가장 큰 위험 중 하나는 SQL 문이 애플리케이션이 실행될 때까지 검사되지 않는다는 점입니다. 즉, 단순한 오타 하나로도 애플리케이션이 종료될 수 있습니다. 예상치 못한 상황에서 Room은 다음과 같은 기능을 구현하여 이 문제를 해결합니다. 컴파일 타임 쿼리 검증기기에서 앱을 실행하기 전에 문제가 있으면 알려줍니다.

또한 Room은 Jetpack 아키텍처와 완벽하게 통합되어 모든 화면에서 데이터 일관성을 크게 향상시킵니다. 사용 시 편의 참고 사항이는 반복적인 코드(일명 보일러플레이트 코드)를 획기적으로 줄여 프로젝트의 유지 관리성과 확장성을 장기적으로 크게 향상시킵니다.

SQL 및 NoSQL 데이터베이스 관리 시스템
관련 기사 :
모바일에서 SQL 및 NoSQL 데이터베이스를 관리하는 앱 및 관리자

건축의 필수 구성 요소

Room이 제대로 작동하려면 팀으로서 함께 작동하는 세 가지 기본 요소가 필요합니다.

  • 엔티티: 이것들은 데이터베이스 테이블을 나타내는 Kotlin 클래스입니다. 각 엔티티 인스턴스는 해당 테이블의 행에 대응합니다.
  • 데이터 액세스 객체(DAO): 인터페이스는 정보를 조회, 삽입, 삭제 또는 업데이트하는 메서드를 정의하는 곳입니다. 인터페이스는 앱의 로직과 데이터를 연결하는 다리 역할을 합니다.
  • 데이터베이스 클래스(RoomDatabase): 이는 주요 접근 지점이며, 연결을 유지하고 시스템의 구성 요소를 정의하는 추상 클래스입니다.

기술 구성 및 종속성

Room을 본격적으로 사용하기 전에 먼저 파일을 준비해야 합니다. build.gradle종속성을 추가하는 것이 필수적입니다. 런타임 및 컴파일러Kotlin을 사용한다면 다음을 사용해야 합니다. kapt o ksp 어노테이션 처리를 위해 두 가지 모두 포함하지 않도록 주의하여 충돌을 방지하십시오. 확장자를 추가하는 것도 강력히 권장합니다. 룸-ktx이것이 바로 사용을 가능하게 하는 것입니다. 서스펜션 함수 및 코루틴고부하 작업을 수행할 때 사용자 인터페이스가 멈추는 현상을 방지합니다.

데이터 레이어를 단계별로 구현하기

먼저 우리는 다음을 정의합니다. 개체우리는 주석을 사용합니다 @Entity Room에게 이 클래스가 테이블임을 알려주려면, 내부에서 필드를 표시해야 합니다. @PrimaryKey 각 레코드를 고유하게 만들려면, 데이터베이스에서 자동으로 ID를 할당하도록 하려면 다음을 사용합니다. autoGenerate = true. 우리는 또한 사용할 수 있습니다 @ColumnInfo SQLite의 컬럼 이름과 Kotlin의 변수 이름을 다르게 지정하고 싶다면 어떻게 해야 할까요?

그럼 다음으로 넘어가겠습니다. DAO여기서는 주석이 달린 인터페이스를 생성합니다. @Dao삽입이나 삭제와 같은 간단한 작업에는 어노테이션을 사용합니다. @Insert, @Update y @Delete하지만 사용자 지정 검색의 경우, 저희는 다음을 사용합니다. @Query여기서는 SQL 문을 직접 작성합니다. 매우 유용한 팁은 다음과 같습니다. LiveData 또는 Flow를 반환합니다.이를 통해 테이블의 데이터가 변경되는 즉시 인터페이스가 자동으로 업데이트됩니다.

마지막으로, 우리는 설정을 완료했습니다. 룸데이터베이스이 클래스는 추상 클래스여야 하며, 다음 클래스를 상속해야 합니다. RoomDatabase다음과 같은 주석이 추가되었습니다. @Database 포함된 모든 엔티티와 데이터베이스 버전을 나타냅니다. 데이터베이스의 여러 인스턴스를 동시에 여는 것을 방지하려면 다음과 같은 방법을 구현하는 것이 이상적입니다. 싱글턴 패턴 통해 companion object 방법을 사용하여 getInstance.

MVVM 아키텍처 및 리포지토리와의 통합

앱이 전문적으로 보이려면 뷰에서 데이터베이스를 직접 호출해서는 안 됩니다. 이상적으로는 ...을 사용하는 것이 좋습니다. 리포지토리저장소는 데이터를 네트워크에서 가져올지 로컬 캐시에서 가져올지 결정하는 중개자 역할을 합니다. 예를 들어, 앱이 먼저 DAO에서 데이터를 가져오려고 시도하고, 목록이 비어 있고 연결이 가능한 경우 REST API를 통해 서버에 요청하도록 프로그래밍할 수 있습니다.

이 흐름은 다음으로 마무리됩니다. 뷰모델이는 데이터를 프래그먼트 또는 액티비티에 노출하는 역할을 합니다. 사용 시 AndroidViewModel우리는 접근 권한이 있습니다 애플리케이션 컨텍스트 데이터베이스를 인스턴스화합니다. 이렇게 하면 뷰는 데이터베이스 인스턴스화만 관찰하는 책임 분리가 이루어집니다. 데이터 상태 그리고 그것들이 어디에서 왔는지, 어떻게 보관되는지에 대해서는 걱정하지 않습니다.

기타 기능 및 최적화

Room을 사용하면 테이블 간의 복잡한 관계를 처리할 수 있습니다. 외국어 키 그리고 다른 개체 안에 개체를 포함시킬 수 있는 능력 @Embedded테이블 구조를 변경해야 할 경우(예: 열 추가) Room은 다음과 같은 옵션을 제공합니다. 최적화된 마이그레이션 경로 사용자가 애플리케이션 업데이트 시 데이터를 잃지 않도록 하기 위함입니다.

지속성을 한 단계 더 발전시키고자 하는 사용자를 위해 Room DAO 기반의 HTTP 엔드포인트를 생성할 수 있는 실험적인 도구가 있습니다. 이 도구는 Kotlin 서버와 Android 앱 간의 원활한 통신을 가능하게 합니다. 오프라인 우선사용자의 인터넷 연결 상태에 관계없이 항상 원활한 사용자 경험을 보장합니다.

SQL 및 NoSQL 데이터베이스 관리 시스템
관련 기사 :
모바일에서 SQL 및 NoSQL 데이터베이스를 관리하는 앱 및 관리자

Room을 도입함으로써 Android의 데이터 관리 방식이 혁신적으로 변화했습니다. SQLite의 취약성을 제거하고 Jetpack 컴포넌트 기반의 견고한 워크플로우를 제공합니다. 명확한 엔티티, 효율적인 DAO, 그리고 싱글턴 패턴을 활용한 중앙 집중식 데이터베이스를 결합하여 오프라인에서도 작동하고 컴파일 시 오류 검사를 통해 유지보수가 매우 간편한, 훨씬 빠른 애플리케이션을 구현할 수 있습니다. 더 많은 사람들이 주제에 대해 알 수 있도록 이 정보를 공유하세요.


선호하는 소스로 추가