Core Data
Core Data는 APP 내에서 데이터를 관리하고 영구적으로 저장하기 위한 프레임워크이다.
Core Data는 관계형 데이터베이스와 유사한 방식으로 데이터를 저장하고 관리하는 데 도움을 주지만 Data Base는 아니다.
🔗 공식문서 - Core Data
Persistence
Core Data에서 Persistence는 데이터를 영구적으로 저장하고 관리하는 능력을 말한다. Persistence는 앱을 종료하거나 재시작한 후에도 데이터가 유지되는 것을 의미한다. Core Data는 다양한 영구 저장소(Persistent Store)를 지원하며, 이러한 저장소를 사용하여 데이터를 영구적으로 보존한다.
일반적으로 Core Data에서 사용되는 영구 저장소 유형은 아래와 같다.
SQLite
- SQLite는 Core Data의 기본 영구 저장소 유형
- SQLite 데이터베이스를 사용하여 데이터를 저장하고 관리
- 복잡한 데이터 관리 및 쿼리 작업을 수행하는 데 적합
Binary
- Binary 저장소는 이진 파일 형식으로 데이터를 저장
- 주로 단순한 데이터 구조나 작은 규모의 데이터에 사용
XML
- XML 저장소는 XML 파일 형식으로 데이터를 저장
- 주로 데이터의 구조화된 형태를 유지해야 할 때 사용
In-Memory
- In-Memory 저장소는 메모리 내에서 데이터를 저장
- 임시 데이터나 성능에 중점을 둘 때 유용함
- 앱이 종료될 때 데이터가 사라짐
Core Data를 사용하면 데이터 모델을 설계하고 영구 저장소 유형을 선택할 수 있다. Persistence는 앱이 실행 중일 때 데이터를 읽고 쓰는 작업을 관리하여 데이터를 영구적으로 유지할 수 있게 해준다.
데이터 변경 추적 및 관리
Core Data에서 추적(Tracking)은 데이터 변경 사항을 모니터링하고 관리하는 기능을 나타낸다. Core Data는 APP 내에서 데이터의 변경을 추적하고, 변경 사항을 관리하며, 이를 영구 저장소에 반영하는 데 사용된다. 이러한 추적 기능은 데이터베이스 관리와 데이터 모델 업데이트를 보다 간편하게 만들어 준다.
Managed Object Context (MOC)
- 데이터 변경을 추적하고 관리하는 핵심 컴포넌트
- 데이터베이스와 상호작용하며 데이터를 읽고 쓰는 작업을 처리함
- 앱 내에서 여러 개의 MOC를 사용할 수 있으며, 이를 통해 데이터 변경 사항을 분리하고 관리할 수 있음
Managed Objects
- Core Data에서 데이터를 나타내는 데 사용됨
- 데이터 모델의 엔티티를 표현하며 MOC에 의해 관리
- Managed Objects는 속성을 가지며, 이 속성의 변경은 추적되고 관리됨
변경 사항 추적
- MOC는 Managed Objects의 변경 사항을 추적함
- 속성 값을 변경하거나 새로운 Managed Object를 생성할 때 변경 사항이 기록됨
- 변경 사항은 컨텍스트 내 변경 사항으로 표시되며, 이것은 MOC 내에서 변경된 내용을 나타내는 일종의 작업 목록을 뜻함
데이터 저장
- 변경 사항을 영구 저장소에 반영하려면 MOC에서 save() 메서드를 호출
- save() 메서드를 호출하면 변경 사항이 영구 저장소(예: SQLite 데이터베이스)에 쓰여짐
데이터 롤백
- MOC는 변경 사항을 롤백하거나 취소할 수 있는 기능을 제공함
- 이전 상태로 데이터를 복원 가능
Core Data Stack
Core Data를 사용하여 데이터를 관리하고 영구적으로 저장하기 위한 핵심 아키텍처다. 스택은 데이터베이스와 상호작용하는 데 필요한 다양한 컴포넌트와 계층으로 구성되며, 핵심 요소는 아래와 같다.
Managed Object Context (MOC)
- NSManagedObjectContext는 Core Data 스택에서 가장 중요한 요소 중 하나
- 앱의 데이터 변경을 추적하고, 데이터를 읽고 쓰는 작업을 처리
- 일반적으로 앱은 하나 이상의 MOC를 사용하며, 각 MOC는 데이터베이스와 상호작용을 관리함
Persistent Store Coordinator
- NSPersistentStoreCoordinator는 MOC와 실제 데이터 저장소 간의 중간 계층 역할을 함
- 이 계층은 데이터베이스와의 연결을 설정하고 MOC의 데이터 변경 사항을 영구 저장소로 전달함
- 데이터베이스가 SQLite인 경우, Persistent Store Coordinator는 SQLite 데이터베이스 파일과 상호작용함
Persistent Store
- NSPersistentStore는 실제 데이터를 저장하는 곳
- 영구 저장소 유형 : SQLite, 이진 파일, XML, In-Memory 등
- 각 Persistent Store는 단일 데이터 모델과 관련되며, 앱에서 여러 Persistent Store를 사용할 수 있음
Model (데이터 모델)
- 데이터 모델은 엔티티(Entities), 속성(Attributes), 관계(Relationships) 등의 데이터 구조를 정의함
- Xcode의 Data Model Editor를 사용하여 시각적으로 데이터 모델을 만들고 관리할 수 있음
- 모델은 앱의 데이터 구조와 데이터베이스 스키마를 정의
Core Data 스택의 주요 역할은 데이터 모델을 데이터베이스에 매핑하고, 데이터 변경 사항을 추적하여 데이터베이스에 적절하게 반영하는 것이다. 앱에서 데이터를 가져오거나 저장할 때 MOC를 사용하며, MOC는 Persistent Store Coordinator를 통해 데이터베이스와 상호작용한다. 이렇게 구성된 스택을 통해 데이터 관리 및 영구 저장이 가능해지며, 데이터의 무결성과 일관성을 유지할 수 있다.
아직 와닿을 정도로 이해된 건 아니지만, Xcode를 통해서 직접 Core Data를 구현해보면 좀 더 나아지지 않을까 싶다.