본문 바로가기
iOS/iOS

Core Data

by 황민우 2022. 4. 14.

정의

- 애플리케이션의 영구 데이터를 저장하는 프레임워크
- 임시 데이터를 캐시 하는 프레임워크
- 단일 기기에서 앱에 실행 취소 기능을 추가하는 프레임워크

- 앱의 콘텐츠나 데이터 자체를 저장/보관하는 특별한 객체

- Core Data는 ORM 매핑 프레임워크(데이터 저장 프레임워크)로, 데이터 베이스가 아닙니다.

 


Core Data

1, In-Memory 방식이 존재

- In-Memory방식 : 디스크에 저장하지 않고, 휘발성으로 테스트같이 잠깐 이용하려고 하는 경우에 사용하는 방식
- 사용하려는 모든 데이터는 우선 메모리에 로딩되는 과정이 존재합니다.
코어 데이터는 읽고 쓰는 모든 데이터를 원칙적으로 메모리에 로드된 다음에 처리합니다.
- (다른 DB 방식은 효율성을 위해 읽기 목적의 데이터 일부만 메모리에 로드합니다.)

 

2, * Entity(엔터티)를 통해 데이터 저장 구조 정의

- 코어 데이터는 엔터티를 통해 데이터 저장 구조를 정의합니다.
- (다른 DB 방식은 일반적으로 테이블을 통해 데이터 저장 구조를 정의합니다.)

 

* Entity(엔터티) : 데이터가 저장될 구조
- Attribute(어트리뷰트) : 엔터티의 하위 속성들을 정의하는 역할
- Relation(릴레이션) : 엔터티끼리의 관계 정의
- Fatched Properties(패치속성) : 템플릿 형태로 만들어 놓은 것(반복되는 요청, 값만 바뀌는 비슷한 요청을 묶어놓은 것)

 

3, 용어

SQLite Core Data
데이터베이스 파일 데이터 모델 파일
테이블 엔터티
컬럼 어트리뷰트
외래키 + 조인 릴레이션

 

4, 데이터를 객체로 취급

- 코어 데이터는 테이블의 행, 레코드 하나하나를 독립된 객체로 사용합니다.

 

 

5, 데이터 접근 방법

- 코어 데이터DAO 패턴사용합니다.(단, core data에서는 DAO객체를 자동으로 제공)

- SQLite에서 DAO클래스를 만들고, 그 객체로 접근하는 것과 같이 사용합니다.

 

 

6, 관리 객체(Managed Object) : MO 패턴

- VO(Value Object)패턴과 동일한 개념으로 core data에서는 MO패턴이라고 합니다.

- MO클래스의 프로퍼티를 엔터티의 각 어트리뷰트와 직접 연결시키는 방식(*ORM매핑)을 사용합니다.

(Object Relation Mapping : 객체와 관계형 데이터 베이스를 자동으로 매핑시켜주는 방식)


객체 그래프 관리자(Object Graph Manager)

- 코어 데이터는 애플리케이션에서 Model계층의 객체를 관리하는 데 사용하는 프레임워크이자, 라이프 사이클이나 영속성 관리를 위한 기능을 제공하는 객체 그래프 관리자입니다.

 

객체 그래프(Object Graph)란?

- 객체를 하나의 노드로 간주하고 서로 간의 연관 관계를 링크로 이어보면 다양하게 연결되는 복합적인 그래프 형태의 도형

 

특성

- 코어 데이터가 객체 그래프를 담당한다는 것은 객체끼리 연결할 수 있으며, 해당 객체끼리 영속적으로 동기화한다는 의미입니다.


코어 데이터의 구조

 

 

 

1, 관리 객체(Managed Obect) : MSManagedObject

- 테이블에서 레코드를 읽을 때, 코어 데이터에서 생성되는 객체를 저장하는 자료형

 

 

2, 관리 객체 컨텍스트(Managed Object Context)

- 관리 객체 컨텍스트는 핵심적인 두 가지 역할을 합니다.

 

1, MO를 가지고 CRUD역할 수행

    - 건텐스트에 담긴 객체는 영구 저장소로 이동해 저장, 삭제가 가능

    - 코어 데이터는 메모리에 로드된 상태로 처리되는데, 이때 메모리가 콘텍스트를 의미

 

2, "영구 저장소"와 "영구 저장소 코디네이터"에 대한 관리자 역할

    - 읽기와 쓰기를 영구 저장소에 요청

 

 

3, 영구 저장소 코디네이터(Persistent Store Coordinator)

- 컨텍스트와 직접 데이터를 주고받으면서 다양한 영구 저장소들접근을 조정하고 입출력을 담당합니다.

- 동작 방식

  1. 컨텍스트가 데이터를 요청
  2. 코디네이터가 요청을 받고, 영구 저장소에서 데이터 탐색
  3. 코디 네이터가 MO인스턴스를 생성해 반환

 

 

4, 관리 객체 모델(Managed Object Model)

- Entity(엔터티)의 구조를 정의하는 객체인 동시에, 이를 바탕으로 MO패턴의 모델 클래스를 참조

*MOM(Managed Object Model) : 클래스이자 형식, 구조를 의미

- 데이터를 CRUD하지 않으며 관리 객체의 각 요소를 제대로 담을 수 있도록 저장 데이터를 구조화

*MO : MOM을 바탕으로 생성된 인스턴스

 

 

 

5, 영구 객체 저장소(Persistent Object Store)

- XML 저장소 타입을 사용하며, SQLite데이터베이스를 사용하는 것이 용이

타입 설명
인메모리 저장소 타입
(NSInmemoryStroeType)
- 메모리 기반의 저장 방식
- 앱 종료 시 데이터 보존 X
플랫 바이너리 저장소 타입
(NSBinaryStoreType)
- 데이터를 단순 바이너리 파일 형식으로 저장
- 장점 : 조회 성능 개선
- 단점 : 초기 로딩 시간 증가
XML 저장소 타입
(NSXMLStoreType)
- 원자성
- 장점 : 직접 열어보고 확인 가능, 초기 디버깅에 용이
- 단점 : 처리 속도가 느림
SQLite 데이터베이스
(NSSQLiteStoreType)
- 객체 그래프 중 일부만 로딩
- 가장 많이 사용

 


코어 데이터의 한계

 

1, in-memory 방식

- 메모리에 로딩된 객체에 대해서만 수정 가능

 

2, 데이터 로직에서의 한계

- 중복된 값의 입력을 방지하는 "Unique"키가 없어, 앱에서 비즈니스 로직을 통해 처리해야 함.

 

3, thread-safe하지 않음

- thread끼리 Lock 기능이 존재하지 않음.


내용 출처

https://ios-development.tistory.com/89

 

[iOS - swift] 12. 코어 데이터(Core Data)의 개념 - (1)

* Core Data는 DataBase가 아님 ( Core Data는 ORM 매핑 프레임워크가 맞는 의미, 데이터 저장에 관한 일종의 프레임워크 ) 1. Core Data란? 1) In-Memory 방식이 존재 : 사용 하려는 모든 데이터는 우선 메모리..

ios-development.tistory.com

https://sihyungyou.github.io/iOS-coredata/

 

iOS) 코어데이터 알아보기

Core Data

sihyungyou.github.io

 

댓글