iOS에서 사용할 수 있는 로컬 DB
DB(Database)란 데이터들을 저장하고 있는 공간을 말하고, DBMS란 이러한 DB를 손쉽게 관리할 수 있도록 도와주는 도구이다. 대표적으로 MariaDB, MySQL 등이 있다. 그리고 RDBMS는 Relational Database Management System으로, 데이터를 테이블 단위로 관리하는 관계형 데이터베이스 관리 도구를 뜻한다. 마찬가지로 RDB(관계형 데이터베이스)를 관리하는 도구라고 생각하면 된다.
그리고 로컬 DB란 특정 어플리케이션 내부에 데이터를 저장하는 공간을 말한다. 당연히 iOS에도 이러한 로컬 DB를 위한 프레임워크가 준비되어 있다.
iOS에서 Application 개발에서 사용할 수 있는 로컬 DB는 크게 3가지로 나뉜다.
SQLite / CoreData / Realm
각각의 프레임워크에 대해 비교해보려고 한다. 이들 중에서 CoreData는 애플이 자체 제공하는 프레임워크이고, SQLite와 Realm은 third-party 라이브러리로 Andorid와 같은 다른 환경에서도 기능을 제공한다.
이러한 로컬 DB를 잘 이용하면 서버에서 발생하는 비용이나 Round Trip과 같은 것을 줄일 수 있다.
✳️ SQLite
SQLite는 빠른 속도와 이식성, 안전성을 제공하도록 설계된 내장 가능한 오픈소스 데이터베이스이다. 일반적인 SQL로 쿼리가 가능하고, 윈도우, 맥, 리눅스, iOS, 안드로이드 등 다양한 플랫폼에서 구동 가능하다는 장점이 있다. 특정한 외형이 없고, 서버가 필요없는 SQL 데이터 베이스 엔진을 구현한다.
여러 프로세서와 스레드로부터 안전하게 접근 가능하기 때문에 안정성을 중시하는 Swift와 궁합이 맞다고 할 수 있다.
SQLite는 c언어 기반이기 때문에 iOS에서 사용하기 위해서 가급적이면 Objective-c로 만들어진 FMDB를 사용하는 것이 좋다고 한다.
✳️ CoreData
Persist or cache data on a single device, or sync data to multiple devices with CloudKit.
CoreData를 이용하면 단일 기기에 Data를 유지하거나 캐싱할 수 있고, CloudKit을 통한 다중 기기에 data를 동기화할 수 있다고 한다.
CoreData는 애플의 자체 프레임워크이고, SQLite와 달리 객체 타입 자체를 저장한다. 또한 SQLite보다 더 많은 메모리와 저장 공간을 사용하는 대신에 기록을 불러오는 속도가 더 빠르다고 한다. Xcode 내부적으로 Graph를 통해 Data 사이의 관계를 파악할 수 있게 해준다.
In-Memory 방식을 사용하기 때문에 메모리에 로딩된 객체들에 대해서만 수정이 가능하며, Thread-Safe하지 않기 때문에 다중 접근에 주의하여 프로그래밍해야 한다. 또한 RDB 방식으로 관리되지 않는다는 특징이 있다.
✳️ Realm
고성능 관계형 데이터베이스로, 모바일 환경에 맞게 설계되었기 때문에 iOS와 안드로이드에 적합하다. 그러나 윈도우와 같은 데스크톱 환경도 지원한다. Realm을 통해 관리되는 Data는 플랫폼 간에도 공유할 수 있다. SQL 쿼리를 사옹하지 않는 객체 기반이라는 점이 장점이자 단점이 될 수 있는데, 손쉽게 내부 DB를 구현할 수 있는 반면 기존의 쿼리에 익숙한 사람들에게는 적합하지 않을 수 있다.
Realm의 장점은 다른 방법에 비해 짧은 코드로 작업을 처리할 수 있다는 점이다. 또한 SQLite와 Core Data에 비해 속도도 훨씬 빠르다고 한다. CoreData와 마찬가지로 데이터를 객체로 저장하기 때문에 이전 작업 또한 손쉽게 할 수 있다. 또한 Realm Studio라는 편집기를 제공하기 때문에, 데이터를 손쉽게 관리할 수 있다.
다만, Main Thread를 이용하여 작업하기 때문에 Dispatch Queue를 이용하여 스레드 처리에 유의해야 한다.
참고
iOS Local DB 비교
iOS에서 사용할 수 있는 DataBase 비교하기
Realm. 이 무엇인지 알아봅니다.
SQLite With Swift Tutorial: Getting Started
SQLite DBMS 사용법
SQLite를 사용해야 하는 이유
Getting Started with Core Data Tutorial