본문 바로가기

iOS/학습정리

iOS) Core Data - 다른 저장소와의 비교

Core Data

Persist or cache data and support undo on a single device.

코어 데이터는 데이터를 저장하고 관리하기 위한 프레임워크이다. 코어 데이터의 경우 해당 기기에 데이터를 저장하므로 오프라인에서도 동작 가능하며, 클라우드를 제외하고는 데이터를 공유할 수 없다.

Object

Object-Oriented Database

코어 데이터의 경우 SQL을 쓸 일 없이 오롯이 Object-Oriented 방식으로만 데이터를 다룰 수 있다. 데이터는 Object로 표현되며, NSManagedObjectModel의 인스턴스로 구현된다. 이러한 Object가 관계를 형성하여 Object Graphs를 이루고 이를 관리하는 프레임워크가 바로 코어 데이터이다.

Map

어떻게 보면 코어데이터에서 가장 중요한 부분이라 할 수 있다. 관계형 데이터베이스에서 처럼 객체나 변수를 사상(mapping)한다. 코어 데이터도 내부적으로는 SQL을 이용하여 데이터를 저장하지만, 개발자는 Xcode에 내장된 데이터 모델 에디터를 통해 데이터의 타입, 관계(Graphical Relationship)를 지정하고 코드로 관련 클래스를 수정할 수 있다. 코어데이터를 사용할 때 Swift나 Object-c를 이용하여 개발할 수 있으므로 더 익숙하게 사용할 수 있다는 장점이 있다.

SQLite

서버가 아닌 응용 프로그램에 넣어 사용하는 비교적 가벼운 데이터베이스

코어데이터는 프레임워크인것에 반해 SQLite는 데이터베이스이다. 애플에서 제공되는 것이 아닌 외부 라이브러리로 비교적 가벼운 데이터 처리가 필요할 때 사용하기 좋다.

SQLite vs Core Data

보통 SQLite는 lightweight solution이 필요한 경우에, 코어 데이터는 complex object graph가 필요한 경우에 사용한다. 코어데이터가 SQLite보다 더 빠르게 기록을 가져올 수 있지만 더 많은 메모리와 저장 공간을 사용한다.

  • 속도: 코어 데이터 > SQLite
  • 메모리 및 저장공간 사용: 코어데이터 > SQLite

Realm

코어데이터와 같은 객체 데이터베이스 관리 시스템

Realm vs Core Data

설치가 쉽고 무제한 사용이 가능하다. 코어데이터보다 빠르지만 서드 파티다보니 코어 데이터보다 앱 volume이 더 크다.

User Default

앱 내부에 데이터를 저장할 때 외부 라이브러리를 사용하지 않고 저장하는 방법은 코어 데이터와 유저 디폴트를 사용하는 것이 있다. 유저 디폴트는 앱을 런치하거나 기기를 재가동하는 사이에 적은 양의 데이터를 저장하는데 사용된다.

User Default vs Core Data

모든 데이터가 키/밸류 형태로 짝을 이루기 때문에 코어데이터보다 빠르지만, 말 그대로 유저 정보와 같이 작은 데이터를 저장하는데 사용된다.

디폴트 객체는 NSData, NSString, NSNumber, NSDate, NSArray, or NSDictionary으로만 이루어진 프로퍼티 목록이어야한다. 기본적으로 floats, doubles, integers, Boolean values, and URLs와 같은 타입에 대해서 사용할 수 있는 메소드가 제공되지만 이외의 타입에 대해서는 NSData 형태로 아카이브 해야 한다.

참고