[iOS]_CoreData

윤여송·2023년 8월 25일
0

iOS

목록 보기
7/11
post-thumbnail

CoreData

1.📚CoreData란?

Core Data는 DataBase가 아니다
CoreData는 데이터 저장에 관한 일종의 프레임워크이다.

1) In-Memory 방식이 존재: 사용 하려는 모든 데이터는 우선 메모리에 로딩되는 과정이 존재

  • 코어 데이터: 읽고 쓰는 모든 데이터는 원칙적으로 메모리에 로드된 다음에 처리 (영구 저장소를 아예 사용하지 않고 순수하게 인메모리 방식으로만 사용하는 것이 가능)
  • In-Memory란? 말 그대로, Disc에 저장하지 않고 휘발성으로 테스트 같이 잠깐 이용하려고 하는 경우에 In-Memory로 사용가능
  • 다른 DB방식: 효율성을 위해 읽기 목적의 데이터 일부만 메모리에 로드

2)엔터티(Entity)를 통해 데이터 저장 구조 정의
(다른 DB방식은 일반적으로 테이블을 통해 데이터 저장 구조를 정의)

엔터티(Entity): 데이터가 저장될 구조

  • 어트리뷰트(Attribuy): 엔터티의 하위 속성들을 정의하는 역할
  • 릴레이션(Relation): 엔터티끼리의 관계 정의
  • 페치속성(Fatched Properties): 템플릿 형태로 만들어 놓은 것(반복되는 요처이나 값만 바꾸어 비슷한 요청들을 묶어놓은 것)

**3)용어

2.📚코어 데이터의 구조

1)관리객체(Managed Object): NSManagedObject
table에서 레코드를 읽을 때 coredata 에서는 객체가 생성되는데, 이 객체를 저장하는 자료형

2)관리 객체 컨텍스트(Managed Object Context)
핵심적인 두 가지 역할
(1)MO를 가지고 CRUD역할(CoreData에서 생성되는 모든 관리 객체는 컨텍스트에 담겨 관리)

  • 컨텍스트에 담긴 객체는 영구 저장소로 보내 저장, 삭제 가능
  • core data는 메모리에 로드된 상태로 처리되는데, 이 때의 메모리가 "컨텍스트"를 의미
    (2)"영구 저장소"와 "영구 저장소 코디네이터"에 대한 관리자 역할
  • 읽기와 쓰기를 영구 저장소에 요청(DAO패턴과 유사)
    3)영구 저장소 코디네이터(Persistent Store Coordinator)
    컨텍스트와 직접 데이터를 주고 받으면서 다양한 영구 저장소들의 접근을 조정하고 입출력을 담당
    흐름: 컨텍스트가 데이터 요청 -> 코디네이터가 요청을 받고, 영구 저장소에서 데이터 탐색 -> 코디 네이터가 MO인스턴스 생성하여 반환

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

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

  • 초기에는 직접 읽을 수 있으며 디버깅에 용이한 XML저장소 타입을 사용하며, 앱을 배포할 당시 대량의 데이터를 고려하여 SQLite데이터베이스를 사용하는 것이 용이

⚠️3.코어데이터의 한계

1)in-memory방식: 메모리에 로딩된 객체에 대해서만 수정 가능(SQLite는 메모리에 객체 모두를 로딩하지 않아도, 최소한의 데이터만 로드)
in - memory에서 데이터 삭제시, 영구 저장소에서 데이터 read->객체로 생성 -> 이것을 메모리에 로딩 -> 이를 삭제하고 다시 컨텍스트를 저장소에 커밋

2)데이터 로직에서의 한계
중복된 값의 입력을 방지하는 "Unique"키가 없으므로, 애플리케이션에서 비즈니스 로직을 통해 처리해야 가능

3)thread-safe하지 않음(싱글스레드 환경)
thread끼리 Lock기능(다른 쓰레드가 침범하지 못하는 것)이 존재하지 않음(단 락을 걸지 않음으로써 빠르게 데이터 처리가 가능)

profile
y_some__velog

0개의 댓글