본문 바로가기
Swift

[iOS] About CoreData

by dsungc 2024. 10. 13.

Core Data

앱에서 모델 계층 개체를 관리하는 데 사용하는 프레임워크

 

 

- Core Data는 DB가 아닌 객체-그래프 관리 시스템으로, 데이터를 효율적으로 관리할 수 있도록 도와줌

- 데이터를 메모리에 로드한 뒤 처리하는 방식으로 작동, but In-Memory 방식도 지원

- 객체를 영구 저장소에 매핑하는 세부 정보를 추상화하여, 데이터베이스를 직접 관리하지 않고도 Swift 데이터 모델을 쉽게 저장하고 관리

- 기본 SQLite 데이터베이스 사용

- 데이터베이스를 다루는 SQL을 사용하지 않고 객체를 다루는 방법으로 데이터 핸들링


Core Data의 주요 기능

 

1. 객체-그래프 관리 시스템

- 객체와 관계를 효율적으로 관리

- 데이터의 저장과 로드를 지원하여 앱 데이터를 효과적으로 처리

 

객체 그래프?

- 객체를 하나의 노드로 간주하고, 서로 간의 연관 관계를 링크로 이어 복잡한 네트워크 구조를 형성하는 그래프 형태

- 코어데이터는 객체 그래프를 관리하는 역할

 

특징

a. 객체 간 연결 가능

- Core Data는 객체들 간의 관계를 정의하여 서로 연결 가능

 

b. 영속적 동기화

- 연결된 객체들 간의 관계를 동기화 상태로 유지

ex)

- A 객체와 B 객체가 연결되어 있는 경우, A 객체가 삭제되면 자동으로 B 객체도 삭제

- 데이터 무결성을 유지하는 데 중요한 역할

 

c. 데이터베이스와의 차이점

- 일반적인 데이터베이스에서는 두 테이블 간의 관계를 조인 조건으로 명시

- Core Data에서는 객체 그래프를 사용해 이러한 관계를 자동으로 관리

- DB는 테이블을 통해 데이터 저장, but Core Data는 Entity를 통해 데이터 저장 구조 정의

 

Entity: 데이터 저장 구조

- Attribute: 엔터티의 하위 속성 정의    < -- > 컬럼

- Relation: 엔터티끼리의 관계              < -- > 외래키 + 조인

 

2. Undo 및 Redo 기능

- 실행 취소 관리자를 통해 변경 사항을 추적

- 개별적으로나 그룹적으로 롤백이 가능하여 앱에 Undo 및 Redo 기능을 쉽게 추가할 수 있음

 

3. 데이터 동기화 유지

- 테이블뷰 및 컬렉션뷰의 Data Source를 제공하여 데이터를 동기화 상태로 유지하는 데 도움

 

4. 버전 관리 및 마이그레이션

- 데이터 모델 변경 시 기존 데이터를 새 모델로 마이그레이션


Core Data의 저장소 종류

 

Core Data는 데이터를 영구적으로 저장할 수 있는 다양한 저장소 지원

- SQLite: 기본 저장소로 널리 사용됨.

- XML: 사람이 읽을 수 있는 형식

- Binary: 바이너리 포맷으로 저장

- In-Memory: 메모리에만 데이터를 저장하여 비영구적 관리


In-Memory 방식 

- 휘발성으로 테스트 혹은 프리뷰와 같이 잠깐 이용하려는 경우에 In-Memory로 사용

다른 DB들은?

- 효율성을 위해 읽기 목적의 데이터 일부만 메모리에 로드


Core Data의 구조(스택)

 

컨텍스트의 코디네이터에 데이터 요청    --> 

코디네이터가 영구 저장소에서 데이터 탐색  --> 

코디네이터가 인스턴스 Managed Object 객체를 생성하여 반환

 

 

1. Core Data 스택 캡슐화(NSPersistentContainer)

- iOS 10 이상에서 사용, Core Data 스택을 쉽게 설정

- 내부적으로 NSManagedObjectModel, NSPersistentStoreCoordinator, NSManagedObjectContext를 포함하여 Core Data 스택 간소화

 

2. 관리 객체 모델(NSManagedObjectModel)

- 데이터 모델에 작성한 데이터 스키마에 대한 정보

 

3. 관리 객체 컨텍스트 (NSManagedObjectContext)

- 코어 데이터의 스택 중 최상단에 위치

- 애플리케이션 작성하면서 주로 접하는 객체

- 데이터의 생성, 수정, 삭제를 위한 API 제공

- core data는 메모리에 로드된 상태로 처리하는데, 이 때의 메모리가 컨텍스트임

 

4. 영구 저장소 코디네이터 (NSPersistentStoreCoordinator)

- 영구 저장소: NSPersistentStore, 메모리나 디스크 저장

- 영구 저장소를 통해서 모델에 작성한 데이터 다루기(입출력 담당)

 

 

 

 

 

 

 

'Swift' 카테고리의 다른 글

[iOS] About JWT(Jason Web Token)  (0) 2024.10.17
[iOS] About Cookie/Session  (0) 2024.10.13
[iOS] About ARC(Automatic Reference Counting)  (1) 2024.10.05
[iOS] About Optional(옵셔널)  (0) 2024.10.01
[iOS] About Copy-On-Write(COW)  (0) 2024.09.28