관리 메뉴

나만을 위한 블로그

[Android] Room DB란? 본문

Android

[Android] Room DB란?

참깨빵위에참깨빵 2021. 1. 31. 02:05
728x90
반응형

이전 포스팅이 Room DB의 사용법이었다. 이번엔 Room DB란 무엇인지에 대해 포스팅하려고 한다.

onlyfor-me-blog.tistory.com/290

 

[Android] Room DB 사용법

이번 포스팅에선 제트팩 라이브러리에 속하는 룸 DB를 사용한 간단한 CRUD 예제 코드를 기록할 것이다. 먼저 앱 수준 gradle에 의존성을 추가한다. implementation 'com.google.android.material:material:1.1.0'..

onlyfor-me-blog.tistory.com

그 전에 DB(데이터베이스)란 무엇일까? 개인적으로 살면서 많이 들어본 단어다.

혼자 쓰는 경우와 함께 쓰는 경우 상관없이, 앱이든 게임이든 어딘가에 데이터를 저장하는 처리가 꼭 필요하다.

게임을 열심히 해서 1레벨에서 100레벨까지 올린 후 만족하며 게임을 종료하고, 다음 날 다시 켰더니 레벨이 1로 돌아가 있고 튜토리얼부터 다시 진행해야 한다면? 끔찍하다.

그래서 데이터를 어딘가에 쌓아두고 보관하며 필요할 때마다 추가하거나 조회, 수정, 삭제할 수 있는 장소가 필요하다. 이것을 위한 요소가 데이터베이스다. 아래는 위키백과의 데이터베이스 항목의 일부 내용이다.

 

데이터베이스는 일반적으로 컴퓨터 시스템에서 전자적으로 저장 및 액세스되는 조직화 된 데이터 모음이다

 

그럼 이 데이터가 저장되는 장소는 어디일까? 클라이언트-서버 구조라면 보통 서버 쪽에 위치할 것이다.

그렇다면 생각해봐야 하는 게 하나 생긴다. 모든 데이터를 (웹)서버 안의 데이터베이스에 저장해야 하는가?

굳이 서버측 데이터베이스에 저장할 필요가 없는 데이터를 서버에 저장하는 것도 좀 이상하다. 클라이언트에 저장해도 되는 데이터는 클라이언트에 저장해야 할 것이다.

이 때 클라이언트가 핸드폰 앱일 경우 데이터를 저장할 수 있는 곳은 쉐어드 프리퍼런스, SQLite, Room DB 정도다.

이제 이 중 하나인 Room DB에 대해서 확인해보자.

 

Room DB는 제트팩 라이브러리의 구성요소 중 하나로, 안드로이드 디벨로퍼에선 Room을 아래와 같이 말한다.

 

Room 지속성 라이브러리는 SQLite에 추상화 계층을 제공하여 SQLite를 완벽히 활용하면서 더 견고한 데이터베이스 액세스를 가능하게 합니다. 라이브러리를 사용하면 앱을 실행하는 기기에서 앱 데이터의 캐시를 만들 수 있습니다. 앱의 단일 정보 소스로 제공되는 이 캐시를 통해 사용자는 인터넷 연결 여부와 관계없이 앱에 있는 주요 정보를 일관된 형태로 볼 수 있습니다.
상당한 양의 구조화된 데이터를 처리하는 앱은 데이터를 로컬로 유지하여 대단한 이점을 얻을 수 있습니다. 가장 일반적인 사용 사례는 관련 데이터를 캐싱하는 것입니다. 이런 방식으로 기기가 네트워크에 액세스할 수 없을 때 오프라인 상태인 동안에도 사용자가 여전히 콘텐츠를 탐색할 수 있습니다. 나중에 기기가 다시 온라인 상태가 되면 사용자가 시작한 콘텐츠 변경사항이 서버에 동기화됩니다. Room은 이러한 문제를 자동으로 처리하므로 SQLite 대신 Room을 사용할 것을 적극적으로 권장합니다.

 

안드로이드 디벨로퍼에서 공식적으로 SQLite보다 사용을 권장하며, SQLite를 활용하는 데이터베이스같다. 그럼 Room은 SQLite의 상위호환 데이터베이스인가?

다른 곳에서는 Room DB에 대해서 이렇게 말하고 있다.

 

exaud.com/building-data-base-with-room-persistence-library/

 

Building Database with Room Persistence Library

Room is a new way to create a database in your android apps. Learn how to reduce time and effort developing your app.

exaud.com

Room Persistence Library는 SQLite에 추상화 계층을 추가하여 데이터베이스에 대한 액세스를 단순화하고 상용구를 줄이며 런타임시 SQL 쿼리의 유효성을 검사하는 라이브러리다.

 

이쯤되면 SQLite와 Room은 무슨 차이가 있을지 궁금해진다. 왜 안드로이드 디벨로퍼에선 Room DB 사용하기를 SQLite보다 권장하는 걸까?

SQLite를 사용할 때의 단점은 아래와 같다.

  • SQL 쿼리에 대한 컴파일 체크가 없다. 실제 DB에 없는 틀린 열 이름으로 쿼리를 작성하면 런타임 동안 예외가 발생하고 컴파일하는 동안 이 문제를 잡을 수 없다.
  • 스키마가 바뀌면 영향 받는 SQL 쿼리를 수동 업데이트해야 한다. 여기서 시간이 오래 걸리거나 다른 오류가 발생할 수도 있다.
  • SQL 쿼리와 자바 데이터 객체 간 변환 처리를 하려면 많은 상용구 코드를 작성해야 한다.

반면 Room DB의 장점은 아래와 같다.

stackoverflow.com/questions/50650077/sqlite-database-vs-room-persistence-library

 

SQlite Database VS Room persistence library

I need help for my exam project to find differences and benefit of ROOM database: I tried to search in android development documentation to understand the difference between these two databases, b...

stackoverflow.com

  • Room은 컴파일하는 시간에 SQL 유효성 검사를 수행한다.
  • 스키마가 바뀌었을 때 영향 받는 SQL 쿼리를 직접 바꾸지 않아도 된다.
  • 상용구 코드 없이 DB 객체를 자바 객체에 매핑한다.
  • LiveData, RxJava와 같이 작동할 수 있다.

4번을 제외하곤 SQLite의 단점을 보완한 게 Room DB라고 볼 수 있겠다.

 

SQLite를 사용하면 SQLiteOpenHelper를 상속하는 클래스를 만든 다음 여기서 DATABASE_NAME, TABLE_NAME 등 많은 상수를 정의해 테이블을 만들고, 데이터 좀 건드리려면 Cursor를 쓰고 Cursor 객체를 통해 메서드를 불러와서 써야 했다. 이러한 자잘한 코드를 상용구 코드라고 한다.

이 단점을 Room은 어노테이션을 사용하여 상용구 코드를 줄였다. 또한 Dao(Data Access Object) 클래스를 써서 테이블 생성 및 테이블에서 수행할 작업을 분리한다.

 

하지만 이런 장점이 있다고 무조건 SQLite보다 Room DB를 쓸 필요는 없다. 자신의 상황과 기호에 맞게 쓰면 된다.

www.quora.com/Which-is-the-best-database-for-an-Android-SQLite-or-room-persistence-library

 

Which is the best database for an Android SQLite or room persistence library?

Answer (1 of 2): The straightforward answer is Room. It is the new thing introduced in Android Jetpack. I have published a complete step by step series about using Room in your Android Project. You can check it here https://youtu.be/9iF2qEF28Do But its no

www.quora.com

Room은 개발자가 Android에서 SQLite 데이터베이스와 관련된 코드를 더 쉽게 작성할 수 있도록 SQLite 위에 빌드 된 래퍼일 뿐이다. Android의 ORM(Object Relational Mapping) 프레임워크일 뿐이다. Room은 SQLite 데이터베이스와 동일하다.

 

 

참고 포스팅)

 

developer.android.com/topic/libraries/architecture/room

 

Room 지속성 라이브러리  |  Android 개발자  |  Android Developers

Room 라이브러리 사용 방법을 알아봅니다.

developer.android.com

medium.com/@anujguptawork/note-making-application-using-sqlite-vs-room-part-2-using-room-becf92672e29

 

Note Making Application using Sqlite vs Room : Part 2— Using Room Library

This post is part 2 of the tutorial series Note Making Application using Sqlite vs Room. In part 1 we saw how to create a note making…

medium.com

medium.com/androiddevelopers/7-steps-to-room-27a5fe5f99b2

 

7 Steps To Room

A step by step guide on how to migrate your app to Room

medium.com

 

반응형
Comments