-
iOS의 데이터베이스 비교 (SQLite, Core Data, Realm)iOS/iOS 2020. 8. 7. 12:12
안녕하세요 :)
얼리버디 프로젝트에서 내장 데이터베이스를 사용할 일이 생겨서 찾아보던 중 iOS의 대표적인 데이터베이스에 대해 비교/정리를 하게 되었습니다!바로 시작할게요 ~!
Realm
Realm이란, 오픈 소스 라이브러리로 모바일에 최적화된 데이터베이스 라이브러리입니다.
(iOS와 Android를 위해 만들어졌습니다.)데이터 컨테이너 모델을 사용하며 데이터 객체는 Realm에 객체로 저장됩니다.
즉, 객체 중심의 데이터베이스라는 것입니다.
Realm은 ORM이 아닙니다. 따라서 백그라운드에서 적용되는 SQL 쿼리문을 실행하지 않습니다.
ORM은 데이터를 접근하는 간단한 업무도 많은 쿼리문의 작업이 필요합니다. CPU 사이클과 디스크 시간을 소비하며 속도가 한순간에 느려질 수 있습니다.
Realm은 모든 작업을 처리하기 위해 최소한의 코드가 필요합니다.
Realm 모바일 데이터베이스는 SQLite나 다른 SQL 데이터베이스와 관련이 없습니다.
Key-Value 타입의 스토어가 아닌 객체를 직접 디스크에 유지합니다.
복잡한 Entity에 대한 매핑을 처리해야할 문제가 없으므로 Realm은 메모리 상의 객체를 디스크로 빠르게 가져올 수 있습니다.
또한 모바일 데이터베이스이므로 iOS와 Android 간에 데이터베이스 공유가 가능합니다.
Realm은 Core Data나 SqLite에 비해 속도가 빠르고 성능이 좋습니다.
그리고 데이터 저장에도 제한이 없음에도 무료로 이용이 가능합니다.
대용량의 데이터와 대규모 스토리지에 상관없이 일관된 속도 및 성능을 유지할 수 있습니다.
또한 메인 스레드에서 데이터를 읽기/쓰기 작업을 할 수 있습니다.
메인 스레이드에서 작업하다가 갑자기 앱이 터지는 경우를 줄여줍니다.
아래는 iOS의 데이터베이스들의 속도 차이 그래프입니다.
그래프를 보면 Realm이 확연하게 속도가 빠르다는 것을 느낄 수 있습니다.
Realm을 사용하려면 iOS8 또는 OS X 10.9 이상이어야하며 이전 버전은 지원하지 않습니다.
Core Data
Core Data는 Object에 더 중심을 둡니다.
Core Data를 사용하면 실제로 Object-C에 클래스로 표현되는 객체의 내용을 저장합니다.
SQLite보다 많은 메모리를 사용하고, 더 많은 저장공간이 필요하며, 더 빠르게 저장된 기록을 가져옵니다.
Core Data도 Realm처럼 객체 중심의 데이터베이스이므로 Core Data 코드를 Realm을 사용하여 리팩토링할 수도 있습니다.
SQLite
SQLite는 전 세계적으로 많이 사용되는 데이터 베이스 엔진이며 오픈소스입니다.
서버가 필요없는 SQL 데이터 베이스 엔진을 구현합니다.
SQLite는 Mac OS X, iOS, Android, Linux, Window에서 접근할 수 있습니다.
ANSI(American National Standards Institute)-C로 작성된 것처럼 사용하기 쉬운 프로그래밍 인터페이스를 제공합니다.
SQLite는 매우 작고 가벼워 전체 데이터 베이스를 하나의 디스크파일에 저장할 수 있습니다.
SQLite는 서버로부터 독립적이고, 설정이 간편합니다.
또한 여러 프로세스와 스레드로부터 접근이 안전하여 많이 쓰입니다.
그리고 여러 열이 있는 테이블에 데이터를 쉽게 저장합니다.
마무리
정리를 하다 보니 여러모로 최근에 나온 Realm이 모바일에 최적화되어있고 성능 면에서도 괜찮은 것 같다는 생각이 들게 합니다.
근데 아무래도 그냥 기본으로 쓰이는 SQLite(FMDB)를 사용해보는 것도 나쁘지 않을 것 같다는 생각도 듭니다.
그래서 다음 포스팅은 간단한 실습을 해보려고 해요!
이번 포스팅도 끝까지 읽어주셔서 감사합니다 :)
'iOS > iOS' 카테고리의 다른 글
[iOS] UI 개발 시 Code Base로 개발하기 (0) 2020.09.18 [iOS] Cell LifeCycle (UITableView, UICollectionView) (1) 2020.08.28 CoreLocation 적용하기 (0) 2020.06.20 URL Session Tutorial: HalfTunes (0) 2020.05.31 UIGraphics를 사용한 간단한 스케치 어플 (0) 2020.05.16