Core Data 기본

marisol👩🏻‍💻·2022년 6월 29일
0

💿 Core Data

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가 제공한다는 여러 기능들을 이어서 보면

📌 Persistence (지속)

Core Data는 객체를 저장소에 매핑하는 세부 정보들을 추상화 하기 때문에, 데이터베이스를 직접 관리하지 않고도 Swift 및 Objective-C에서 데이터를 쉽게 저장할 수 있다

저 깡통같이 생긴게 저장소(Store)이고, Core Data를 이용해서 저장소에 데이터를 영구적으로 저장하고, 또 가져올 수 있는 것 같다

📌 Undo and Redo of Individual or Batched Changes (개별 또는 일괄된 변경의 실행 취소 및 다시 실행)

Core Data의 undo manager(실행 취소 관리자)는 변경 사항을 추적하고 개별, 그룹, 또는 한번에 모두 롤백할 수 있기 때문에 앱에 실행 취소 및 다시 실행 지원을 쉽게 추가할 수 있다

텍스트 편집하다가 폰 흔들면 실행 취소 얼럿 뜨는 기능을 말하는 것 같다
위에 그림은 어떤 항목을 삭제하고나서 흔들면 실행취소 처리되어서 삭제한 항목을 다시 표시하는 과정을 보여주고 있다

📌 Background Data Tasks (백그라운드에서 데이터 작업)

백그라운드 상태에서 JSON을 객체로 parsing하는 것과 같은 잠재적인 UI-blocking 데이터 작업을 수행한다
그런다음 결과를 캐싱하거나 저장하여 서버 라운드 트립을 줄일 수 있다 (서버 라운드 트립은 데이터 로딩을 위해 서버에 갔다 오는 횟수를 말하는 것 같다)

위에 그림은 UI 작업 전에 백그라운드에서 데이터 작업을 하는 것 같다

📌 View Synchronization (뷰 동기화)

Core Data는 테이블뷰와 컬렉션 뷰에 대한 data source를 제공해서 뷰와 데이터를 동기화 시켜준다

📌 Versioning and Migration (버전 관리 및 마이그레이션)

Core Data에는 데이터 모델을 버전화 하고, 앱의 발전에 따라 사용자 데이터를 마이그레이션하는 메커니즘이 포함되어 있다

어떤 앱이 시간이 지나면서 처음 Core Data의 데이터 모델이 변경될 경우, 사용자 데이터를 마이그레이션 할 수 있다는 말인 것 같다

처음에는 Core Data는 디바이스에 데이터를 저장하는구나라고만 생각했는데 더 다양한 기능을 하는 것 같다


👩🏻‍💻 Core Data Model 생성

앱에서 생성한 데이터를 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
    • Core Data가 생성하는 managed object subclassesproperties 파일의 속성이나 기능을 수정할 필요가 없는 경우 선택
    • managed object subclasses와 properties 파일 모두 자동 생성
    • 생성된 소스 코드가 프로젝트의 목록에 나타나지 않는다
  • Category/Extension
    • Properties 파일만 생성
    • managed object subclass 내에 메서드나 로직을 추가하기 위해 사용
  • Manual/None
    • 두 파일 모두 수동으로 관리
    • 이 옵션을 선택하면 managed object 파일을 생성하지 않기 때문에, class와 properties를 수동으로 만들고 관리
    • 처음에 class와 properties 파일을 생성하려면 Xcode > Editor > Create NSManaged Object Subclass 선택
    • 프로젝트 목록에서 class 파일과 properties 파일을 모두 보고 수정 가능

나는 Manual/None을 선택했는데, 그러면 아래 사진처럼 프로젝트 파일에서 두 개의 파일을 볼 수 있고, 수정도 할 수 있다

그러면 이제 DiaryModel과 그 Entity에 포함된 Attributes를 사용할 수 있게 된다

CoreData Model은 생성했고, 그럼 이제 앱에서 데이터를 Core Data에 저장하고, 불러오기만 하면 된다
﹢ Core Data Stack까지 다음 포스팅에서,,👋


참고자료

0개의 댓글