인턴십 과정중 local data 사용 방식으로 선택한 Core Data 에 대해 다시 공부하고 정리 해 보았다!
코어데이터는 데이터 베이스가 아니다. 코어데이터는 애플의 local object graph persistence framework 로, 로컬 디바이스에 데이터를 저장하는 목적으로 사용되는 프레임워크이다.
공식문서에 따르면 코어데이터가 하는 일은 크게 5가지로 나와있다.
코어 데이터를 사용해서 앱에서 사용되는 데이터를 저장하고, 불러오고, 수정하는 과정에서 개발자는 직접 해당 데이터들의 관계를 관리하거나 생각할 필요가 없다. DB 에 대한 생각을 할 필요 없이 데이터를 저장하고, 수정하고, 불러오거나 삭제할 수 있도록 한다.
관리자는 변경 사항을 추적하고 개별적으로나 그룹적으로 한 번에 롤백할 수 있어 앱에 Undo 및 Redo를 쉽게 추가할 수 있다. 아이폰에서 메모나 메시지를 쓰다가 흔들면 글자가 사라지는 기능이 있는데요, 아래 그림은 그러한 제스처를 사용하여 실행 취소를 하는 것을 보여주는 그림이다.
백그라운드에서 JSON을 객체로 구문 분석하는 것과 같은 데이터 작업을 수행한다. 그런 뒤 결과를 캐시 하거나 저장하여 서버에 갔다 오는 횟수를 줄일 수 있다. 아래 그림은 UI를 업데이트하기 전에 백그라운드에서 개체를 채우는 End Point의 데이터를 보여주는 그림이다.
Core Data는 테이블, 컬렉션 뷰에 대한 Data Source를 제공하여 뷰와 데이터를 동기화 상태로 유지하는데 도움을 준다.
Core Data에는 데이터 모델의 버전을 관리하고 앱이 발전함에 따라 사용자 데이터를 마이그레이션하는 메커니즘이 있다.
관리 객체 모델 (Managed Object Model)은 database의 스키마를 의미한다. 관리 객체의 구조, 엔터티(Entity)의 구조를 정의하는 객체이다. 이를 바탕으로 생성된 인스턴스가 관리 객체(Managed Object) 이다.
컨텍스트는 transaction 을 담당한다고 이해할 수 있다. 관리 객체를 생성, 저장하고 가져오는 작업등을 제공한다.
MO를 가지고 CRUD역할 (Core Data에서 생성되는 모든 관리 객체는 컨텍스트에 담겨 관리됨)
영구 저장소와 영구 저장소 코디네이터에 대한 관리자 역할
영구 저장소와 관리 객체 모델을 연결한다. 컨텍스트와 직접 데이터를 주고 받으며 영구 저장소들의 접근을 조정하고 입출력을 담당한다.
위와 같은 Core Data 구조를 바탕으로 엔티티 저장 흐름을 간단히 설명하자면 아래와 같다.