Core Data
Persist or cache data on a single device, or sync data to multiple devices with CloudKit.
Core Data는 단일 디바이스에서 데이터를 지속 또는 캐싱하거나, CloudKit을 사용해서 여러 디바이스에 데이터를 동기화 하는 프레임 워크
라고 정의되어 있다
정의를 읽어보면 디바이스 내에 데이터를 저장해두고, CloudKit이라는걸 사용하면 같은 iCloud 계정의 여러 디바이스에서 데이터를 동기화 시킬 때 Core Data를 사용한다는 느낌이 든다 🧐
공식문서의 Overview를 보면 Core Data의 쓰임이 더 자세하게 나와있다
Core Data를 사용해서 오프라인에서의 사용을 위해 앱의 영구 데이터를 저장하고, 임시 데이터를 캐싱하고, 디바이스에서 앱에 실행 취소 기능을 추가할 수 있다
단일 iCloud 계정에 있는 여러 디바이스에서 데이터를 동기화하기 위해 Core Data는 자동으로 스키마를 CloudKit 컨테이너에 미러링한다
Core Data의 Data Model Editor를 통해 데이터의 타입과 관계 (relationships) 정의하고, 각 class definitions를 생성한다
그러면 Core Data는 런타임에 managed object instance를 관리하여 다음의 여러 기능을 제공할 수 있다
🤯 디바이스 내에 데이터를 저장한다는 건 알겠는데..
Data Model Editor, relationships, class definitions, managed object instance 같은 개념들을 공부하고 위 글을 다시 봐야될 것 같다
그럼 Core Data가 제공한다는 여러 기능들을 이어서 보면
Core Data는 객체를 저장소에 매핑하는 세부 정보들을 추상화 하기 때문에, 데이터베이스를 직접 관리하지 않고도 Swift 및 Objective-C에서 데이터를 쉽게 저장할 수 있다
저 깡통같이 생긴게 저장소(Store)이고, Core Data를 이용해서 저장소에 데이터를 영구적으로 저장하고, 또 가져올 수 있는 것 같다
Core Data의 undo manager(실행 취소 관리자)는 변경 사항을 추적하고 개별, 그룹, 또는 한번에 모두 롤백할 수 있기 때문에 앱에 실행 취소 및 다시 실행 지원을 쉽게 추가할 수 있다
텍스트 편집하다가 폰 흔들면 실행 취소 얼럿 뜨는 기능을 말하는 것 같다
위에 그림은 어떤 항목을 삭제하고나서 흔들면 실행취소 처리되어서 삭제한 항목을 다시 표시하는 과정을 보여주고 있다
백그라운드 상태에서 JSON을 객체로 parsing하는 것과 같은 잠재적인 UI-blocking 데이터 작업을 수행한다
그런다음 결과를 캐싱하거나 저장하여 서버 라운드 트립을 줄일 수 있다 (서버 라운드 트립은 데이터 로딩을 위해 서버에 갔다 오는 횟수를 말하는 것 같다)
위에 그림은 UI 작업 전에 백그라운드에서 데이터 작업을 하는 것 같다
Core Data는 테이블뷰와 컬렉션 뷰에 대한 data source를 제공해서 뷰와 데이터를 동기화 시켜준다
Core Data에는 데이터 모델을 버전화 하고, 앱의 발전에 따라 사용자 데이터를 마이그레이션하는 메커니즘이 포함되어 있다
어떤 앱이 시간이 지나면서 처음 Core Data의 데이터 모델이 변경될 경우, 사용자 데이터를 마이그레이션 할 수 있다는 말인 것 같다
처음에는 Core Data는 디바이스에 데이터를 저장하는구나라고만 생각했는데 더 다양한 기능을 하는 것 같다
앱에서 생성한 데이터를 Core Data에 저장하기 위해 프로젝트에 Core Data Model을 만들어볼거다
프로젝트 생성할 때 Use Core Data
를 체크하고 생성하면 AppDelegate.swift 파일에 Core Data Stack
관련 코드들이 추가된다
일단은 DataModel.swift 파일을 생성하고, Entity를 생성해준다
Entity는 저장되고 관리되어야 할 데이터의 집합을 말한다
일기장 프로젝트니까 이름은 DiaryModel로 해줬다
Attribute에는 DiaryModel이라는 Entity에 저장될 요소들을 추가해준다
그리고나서 오른쪽 Ispector를 보면 Codegen
이라는 항목이 있는데, Class Definition
, Category/Extension
, Manual/None
이 있다
Codegen이 의미하는건 Code Generation Option이다 (코드 생성 옵션)
위에서 말한 저장되고 관리되어야 할 데이터의 집합인 Entity에서 managed object subclasses를 자동 또는 수동으로 생성하는데, 그때의 옵션을 말하는 것 같다
Class Definition
managed object subclasses
와 properties
파일의 속성이나 기능을 수정할 필요가 없는 경우 선택Category/Extension
Manual/None
나는 Manual/None을 선택했는데, 그러면 아래 사진처럼 프로젝트 파일에서 두 개의 파일을 볼 수 있고, 수정도 할 수 있다
그러면 이제 DiaryModel과 그 Entity에 포함된 Attributes를 사용할 수 있게 된다
CoreData Model은 생성했고, 그럼 이제 앱에서 데이터를 Core Data에 저장하고, 불러오기만 하면 된다
﹢ Core Data Stack까지 다음 포스팅에서,,👋
참고자료