[Android] Realm이란? - SQLite보다 좋다던데...😕

JoJo Develog·2020년 4월 21일
6

Android

목록 보기
16/19
post-thumbnail

안녕하세요.

이번 포스팅은 모바일에서 많이 사용하는 로컬DB의 하나인 Realm에 대하여 알아보겠습니다.

1. Realm이란?🤨

Realm(렘)이란 오픈소스 데이터베이스 관리시스템(DBMS)으로 특히, 모바일 환경을 주요 타깃으로 삼은 데이터베이스입니다.
기존 안드로이드에서 사용하던 SQLite와 iOS에서 사용하는 Core Data를 대체하는 모바일 데이터 베이스 입니다.
그래서 SQLite나 다른 SQL 데이터베이스와 관련이 없으며, 이들이 가진 많은 문제들을 해결하는 것을 목표로 합니다.
2010년도 후반기에 Alexander Stigsen, Bjarne Christiansen이라는 두 분이 TightDB라는 프로젝트명으로 시작했으며 2014년 Realm으로 이름을 변경하였고 점차 그 가치를 인정받아 실리콘밸리의 떠오르는 스타트업으로 자리 잡았습니다.
현재 Realm은 NoSQL의 대표주자인 MongoDB에 인수되었습니다.

2. Realm의 특징과 기능💾

Realm 데이터베이스의 특징으로는 기존의 정형화된 데이터베이스와 다르게 NoSQL 데이터베이스를 지향합니다.

NoSQL이란?
단어 뜻 그 자체를 따지자면 "Not only SQL"로, SQL만을 사용하지 않는 데이터베이스 관리 시스템(DBMS)을 지칭하는 단어이다.
관계형 데이터베이스를 사용하지 않는다는 의미가 아닌, 여러 유형의 데이터베이스를 사용하는 것이다.
데이터를 조직하는 방법에는 리스트, 해시 테이블, 트리, 그래프 등의 다양한 방법이 있고 각각은 장점과 단점이 명확하기 때문에 단순히 NoSQL이라고만 해서는 너무 뜬구름 잡는 얘기가 된다.
NoSQL이라는 단어는 RDBMS가 데이터베이스의 독점적인 지위를 차지하고 있는 현재 상황에 반발하는 정신을 담고 있다.
-나무위키

데이터 모델 구조 자체가 객체 컨테이너로 구성되어 있습니다. 또한, Realm 데이터베이스는 rawSQL을 사용할 수 없으며 자체의 Realm API를 통해 실행됩니다. 이를 통해 좀 더 직관적인 사용이 가능해지고 데이터 처리 속도가 향상된 장점이 있지만, 기존 데이터베이스들과 달리 Realm의 자체 사용법에 대해 조금 더 공부를 해야 하는 러닝커브가 존재합니다.


하지만 성능면에서는 현재까지 Realm이 으뜸이라고 생각하고 있고 실제로 Github에 많이 있는 Realm 예제코드를 이용해 사용해보니 그 성능에서 많은 차이가 났습니다.
위의 그래프에서도 보듯이 다른 로컬DB를 압도하고 있습니다.

장점을 간단하게 아래에 나열해보았습니다.

  • 기본적인 데이터 입출력인 모델, 쓰기, 읽기, 일반적인 쿼리 등을 제공.
  • AES-256 암호화를 지원
  • 하나의 앱에서 다양한 데이터베이스를 사용할 수 있음.
  • Realm을 메모리에 저장하여 사용할 수 있음(In memory 기능)
  • Mac OS 에서는 Realm Studio 이용하여 Realm 파일을 보거나 수정이 가능.
  • 가능한한 타입과 구조 변환을 최소화하여 객체를 직접 디스크에 유지함.
  • Listener, 마이그레이션 기능 제공.
  • Realm 공식 홈페이지에서는 한국어 문서를 제공함.
  • Github에서 진행사항을 확인 가능
  • 패치노트 관리가 잘되어있음.

단점 입니다.

  • 다중 쓰레드에서의 Realm 객체 관리 (쓰레드별 객체 관리 필요함)
  • 쓰레드 흐름에 익숙하지 않다면 거의 사용하기 힘들기 때문에 러닝커브가 어느정도 존재함.
  • 바이너리 용량이 늘어남
  • 다양한 쿼리를 지원하지 않음
  • iOS8부터 지원가능
  • 알 수 없는 예외가 자주 발생함.

3. 결론

Realm은 현재 모바일에서 가장 많이 쓰이고 개발자들이 애용하는 로컬 DB가 되었습니다.
물론 SQlite가 무조건 안좋은게 아닙니다.
자신의 프로젝트 특성이나 자신이 잘 사용하는 정도에 따라 선택하여 프로젝트에 적용을 하면 되지만
Realm에 한번 적응하기 시작하면 사용성이나 성능면에서 SQlite가 따라올 수 없습니다.
근래에는 무선통신이 아주 빨라지고 네트워크 DB의 성능도 향상된 것이 사실입니다만 특정한 상황이나 빠른 로딩을 위해 로컬DB를 사용해야 하는 경우도 많습니다.
이럴 경우 고민을 하고 계신다면 Realm 사용을 추천해드립니다.

참고 내용
https://realm.io/kr/docs/
https://academy.realm.io/kr/posts/gdg-seoul-realm-introduce/
https://academy.realm.io/kr/posts/realm-object-centric-present-day-database-mobile-applications/
https://medium.com/@hesam.kamalan/database-benchmark-realm-vs-snappydb-f4b89711f424

profile
12년도부터 대학에서 안드로이드 모바일을 전공으로 시작하여 "진짜 개발자"를 꿈꾸며 개발공부를 시작했습니다. SW 개발이 재밌어서 여러 방면으로 스터디하며 현재는 새로운 환경 및 새로운 트렌드에도 유연하게 적응을 잘하는 개발자로 성장해 나가는 중입니다. 글 내용에 대한 피드백은 언제나 환영입니다!

0개의 댓글