ABOUT ME

-

  • 안드로이드) 데이터베이스 ROOM vs REALM 비교
    Android 2020. 3. 8. 00:10

     

     

    PLOLOG

    kotlin으로 프로젝트를 하는 도중 내부 DB를 사용해야 할 경우가 생겨서,

    검색 도중 가장 많이 사용하는 로컬 db인 RoomRealm을 알게 되었습니다.

    저는 결정장애가 있어 어떤 것이 더 끌릴지를 먼저 알아보고 결정하는 편이라 두 가지 db의 약력부터 검색하였습니다.

     

    정리하자면


    ROOM

    - 2017년 구글 I/o 에서 아키텍쳐 컴포넌트에 소개됨

    - 모바일 데이터베이스인 sqlite를 통해 추상화 레이어를 제공하므로 sqlite의 모든 기능 사용 가능

    - 64kb의 적은 용량 , realm에 비하면 아주 적은 용량

    - 메서드의 수가 적기 때문에 dex 크기 제한에도 고민하지 않아도 됨

    - sql query문을 작성할 줄 알아야 함

    - live data를 몇 가지 단계만 거치면 쉽게 연결 가능

    - rx 지원

    - sqlite 경우 쿼리에 대한 에러를 컴파일에 확인하는 것이 없지만, room에서는 컴파일 도중 sql에 대한 유효성 검사 가능

    - schema 가 변경될 경우 sql쿼리를 수동으로 업데이트해야 하지만 room의 경우 쉽게 해결 가능

    - sqlite 경우 java 데이터 객체를 변경하기 위해 많은 상용구 코드(boiler plate code)를 사용해야 하지만 room은 orm라이브러리가 상용구 코드 없이 매핑 가능

    - 요약하자면 sqlite의 기능을 모두 사용할 수 있고, db로의 접근을 편하게 도와주는 라이브러리

     

    boiler plate code(상용구 코드)

    • 어떤 일을 하기 위해서 꼭 작성해야 하는 코드로 클래스의 getter setter메서드
    • 자바에서 꼭 필요하지만 코드를 길어지게 하고 개발자에게 의미 없는 노동 강요

    ex) Java에서 data class를 만들때 constructor와 getter/setter를 만들어 주는것.

    -> koltin 사용하면 data class에 내장되어 있어 한방에 해결 가능

     

    REALM

    - 대부분 c++로 작성

    - sql query 몰라도 사용 가능, orm 개념

    - 2014년부터 지금까지 안정성 있게 사용, 문서가 엄청나게 많다

    - 메서드가 많음, 용량 큼, 유용한데 안정성까지 검증된 메서드 많음

    - 데이터양이 많은 경우 이것을 쓰는 것이 좋음

    - 라이브러리가 크기 때문에 apk 용량이 2.5~4mb 늘어남

    - ios도 지원 잘됨

    - rx 지원


     

     

    PICK 

    두 가지 데이터 베이스를 비교해본 결과 "Room" 디비를 사용하기로 결정했습니다.

    이유는 노트북의 용량이 얼마 남지 않은 점, 트렌드를 봤을때 구글에서 Room을 밀어준다는점,  

    db는 query문을 작성해줘야 db를 사용한다는 느낌이 든다는 점을 고려하여 Room을 선택하였습니다.

     

     

    How to use

    ROOM = Database + Entitiy + Dao 

    Room을 사용하기 위해서는 위의 3가지 구성요소를 알아야 합니다.

     

    Database 
    • database holder를 포함하며, 앱에 영구 저장되는 데이터와 기본 연결을 위한 주 액세스 지점, 테이블과 버전을 정의하는 곳
    Entity
    •  database 안의 테이블, 데이터 모델 클래스
    Dao 
    • database에 액세스 하는 데 사용되는 메서드들을 갖고 있음. (select, insert, delete, join ….)

     

    cf) (D) atabase (A) ccess (O) bject , 디비에 접근해서 실질적으로 수행하는 메서드

     

     

     

    반응형

    댓글

Designed by Me.