android Realm 데이터베이스 연동 하기(1) - 설정

android에서 로컬에 데이터를 저장한다면 어떤 방법을 사용 하시나요?

이 물음에 답을 생각하면 제일 처음 고민 하는 것은 첫번째로 DB를 사용 할까 SharedPreferences를 사용할까를 생각 하게 되는 것 같습니다.
SharedPreferences경우에는 간단하게 데이터를 저장하고 불러오기 편하여 많이 사용하지만 구현해야할
사항에 따라 DB를 생각해야 하는 경우가 생깁니다.

기본적으로는 android에서는 SQLite를 제공하여 구현할수 있지만 SQL에 대한 개념이 있다면 
쉬울수 있고 모르면 어려울수도 있는 부분들이 생기기 때문에 보다 쉽게 구현할수 있는 방법은 없을까
생각하면서 찾는다면 Realm이란 모바일DB가 쉽게 검색 될 것입니다.


1. Realm 이란?
 오픈소스로 모바일에 최적화된 데이터베이스 라이브러리 입니다. 
 ORM이 아닌 데이터컨테이너 모델을 사용하고 데이터객체는 Realm에 객체로 저장됩니다.

 <특징>
  - 네이티브 객체 저장
  - zero-copy : 데이터베이스 안팎으로 복사없이 그대로 직접 작업 가능
  - 라이브 오브젝트 패턴 : Reaml에 저장된 객체의 인스턴스가 있고 다른곳에서 해당 인스턴스 업데이트시
기존 인스턴스도 업데이트
  - 크로스 플랫폼
  - 오프라인-우선
  - ACID 준수

 <성능>
 


2. android에서 Realm 연동

 1) gradle 설정

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath "io.realm:realm-gradle-plugin:3.5.0"
    }
}
프로젝트 수준의 build.gradle 파일에 위와 같이 추가합니다.

apply plugin: 'realm-android'
realm-android 플러그인을 애플리케이션 수준의  build.gradle에 추가 합니다.

2) 시작하기

Realm.init(this);
애플리케이션의 최초 접근부분에 위 소스를 추가해서 init을 합니다.

Realm realm = Realm.getInstance(getRealmConfig());

private RealmConfiguration getRealmConfig() {
        if (realmConfiguration == null) {
            realmConfiguration = new RealmConfiguration
                    .Builder()
                    .schemaVersion(0)
                    .migration(migration)
                    .deleteRealmIfMigrationNeeded()
                    .build();
        }
        return realmConfiguration;
    }
RealmMigration migration = new RealmMigration() {
        @Override
        public void migrate(DynamicRealm realm, long oldVersion, long newVersion) {

            RealmSchema schema = realm.getSchema();
        }
    };

실제 DB  생성 부분 소스 입니다.
간단한 설정으로 DB가 생성되는 것을 알수 있습니다.
Relam.getInstance를 통해 받아온 객체로 데이터를 저장, 삭제, 업데이트등의 작업을 할수 있습니다.
설정에서 보면 shemaVersion과 migration 부분이 있는데 이부분을 통해 DB업데이트가 가능 합니다.
DB migration 부분은 추후에 다루어 보도록 하겠습니다.





댓글

주간 인기글

[ubuntu] 신규 계정에 sudo 권한 추가하기

[정보] 인스타그램은 당신의 소리를 '듣고' 있을 수도 있습니다

[Objective-C] NSString(문자열) 다루기

[네이버클라우드] 서버 인스턴스 생성하기

[Vue] 전화번호 입력/조회시 '-' 자동으로 넣어주기