iOS/데이터베이스 조작

Persistent Data Storage

소재훈 2022. 1. 29. 19:35

지금까지는 데이터를 유지하기 위해서 단일 테이블만 사용하였다. UserDefaults 나 plist, Decodable 프로토콜을 사용해서 하나의 테이블에 key-value형식으로 데이터를 저장했던 것이 그러하다.

하지만 여러 개의 테이블이 서로 관계가 있다는 것을 표현하기 위해서는 UserDefaults, plist, Decodable프로토콜만으로는 부족하다. 따라서 database가 필요하다. 데이터를 유지하기 위한 몇 가지 방법들을 살펴보자.

Method Use
UserDefaults 빠르게 작은 비트의 데이터를 저장할 때 사용한다. 사용자의 이름, 음악의 on/off 등
Codable 사용자가 지정한/만든 객체를 개별적인 plist를 통해 저장할 수 있게 해준다.
Keychain 작은 비트의 데이터를 저장하는 것은 같지만 안전하게(securely) 저장해준다.
SQLite query를 이용해서 큰 용량의 데이터를 유지할 수 있다.
Core Data 객체 지향 데이터베이스
Realm 더 빠르고, 간단한 데이터베이스 솔루션

iPhone에서 데이터를 저장하는 백엔드는 대부분 SQLite로 구현되어 있다. SQLite는 오랜시간 동안 사용되었고, 데이터베이스 언어인 SQL을 공부한 적이 있다면 쉽게 공부할 수 있다. 가볍고 사용하기 쉬운 관계형 데이터베이스 언어인 SQLite를 사용해서 큰 데이터를 저장할 수 있다. 그리고 효율적으로 동작하기 때문에 만약 큰 용량의 데이터를 정렬한다고 iPhone에 모든 데이터베이스가 로드되지 않고 필요한 만큼만 사용된다. 따라서 메모리 관리에 개발자가 신경을 많이 쓰지 않도록 해준다.

 

Core Data는 SQLite보다 많은 기능을 제공한다. Core Data를 사용해서도 Create, Read, Update, Delete의 CRUD가 가능하다. 앞으로 어떤 기능이 있는지 살펴볼 것이다.

 

Realm은 오픈 소스 프레임워크로, Core Data보다 더 쉽고 빠른 데이터베이스 솔루션을 제공한다.  최근에 데이터를 유지하는 방법 중 가장 인기가 많은 방법이다. 이것 또 앞으로 살펴볼 것이다. 

 

앱을 업데이트하거나, iOS가 업데이트 될 때 우리는 위의 6가지 방법을 고려해야 한다.

작은 양의 정보만을 작은 key-value쌍으로 유지하고 싶다면 UserDefaults를 고려한다.

작은 용량의 사용자 지정 객체를 저장하고 싶다면 Codable을 고려하고, 데이터를 plist에 encoding 하자. 

보안과 관련된 패스워드와 관련된 정보를 저장하고자 한다면 Keychain을 사용하자.

용량이 큰 데이터를 저장하고, 쿼리를 사용해 데이터를 뽑아내야한다면 SQLite, Core Data, Realm과 같은 데이터베이스 솔루션을 사용하자.

SQLite를 이미 알고 있거나, 이미 SQLite로 구현되어 잇는 앱이라면 SQLite를 사용하자. 

데이터를 cratch로부터 보낸다면 Core Data가 좋은 솔루션이 될 것이다. 

대부분의 작업을 Core Data로 수행할 수 있지만, 더빠르고, 효율적인 데이터베이스 솔루션을 사용하고 싶다면 Realm을 사용하자.

 

위 사항들을 고려해서 앱에서 어떻게 데이터베이스를 다룰 지 결정하자.