iOS

CoreData

GREEN.1229 2021. 2. 15. 17:32

안녕하세요. 그린입니다!

이번 포스팅에서는 CoreData(코어데이터)에 대해 알아보겠습니다..!

 

우선 코어데이터라는걸 알기전 데이터베이스에 대해 알아보고 차근차근 넘어가겠습니다☺️

 

1. 데이터베이스란?

 : DataBase 줄여서 DB라고 흔히 부르며 데이터를 얻기 위한 기능이나 구조를 나타내는 추상적인 개념입니다.

 

 -. 데이터베이스에는 여러가지 다양한 종류들로 나눌 수 있습니다.

 1) 계층형: 데이터 관계를 트리 형태로 정의하는 구조 (데이터 중복이 생길 수 있음)

 2) 네트워크형: 데이터 관계를 그물 형태로 정의하는 구조

    (계층형의 데이터 중복 문제는 해결되지만 복잡한 구조탓에 추후 구조 변경 비용이 많이듬)

 3) 관계형(SQL): 행과 열로 구성된 테이블간의 관계를 나타내는 구조로 흔히 사용하는 DB 형태

 4) NoSQL: 관계형 DB보다 덜 제한적인 일관성 모델을 이용하여 키와 값 형태로 저장되고 키로 DB를 관리 및 접근한다.

++ 이외 클라우드DB등 폭넓게 다양한 종류가 존재한다.

 

2. 데이터베이스 관리 시스템이란?

 : DataBaseManagementSystem 줄여서 DBMS라고 불리며 데이터베이스의 기능을 제공하기 위해 만들어진 소프트웨어이다.

   (Oracle, MySQL, SQLServer등은 DB가 아닌 DBMS이다.)

 

3. iOS 환경에서 로컬DB를 쓸때의 여러가지 방법

 1) 애플이 제공하는 퍼스트파티 프레임워크 사용: CoreData

 2) 외부 써드파티 라이브러리 사용: SQLite, Realm

 

4. 코어데이터란?

 : 앱에서 모델 계층을 관리하는데 사용하는 프레임워크로 DB가 아니다.

 -. 애플이 제공하는 In-memory 방식의 데이터 관리 프레임워크

 -. 단순한 DB처럼 저장소 기능뿐만이 아닌 undo, redo, caching등 다양한 기능 사용 가능

 

5. 코어데이터의 역할

 -. 디바이스에서 영구적 데이터를 저장 및 관리 (오프라인 사용 가능) --> 그러나 앱이 삭제되면 삭제된다.

 -. UserDefault는 정말 간단한 앱의 사용자 정보를 저장할때 적합하고 CoreData는 크고 복잡한 데이터를 체계적으로 저장할 수 있다.

 -. 임시 데이터 캐시 및 단일 기기 앱 실행 취소 기능 추가 등..

 -. 데이터를 객체로 다뤄 편리하게 사용

 

6. 코어데이터의 구조

 : 다층구조로 각 층을 담당하는 핵심 객체들이 서로 밀접한 연관성을 가진채 상호작용을 한다.

 

7. 코어데이터가 관리하는 영구 저장소 타입의 종류

 1) NSInmemoryStoreType: Inmemory에서 끝난다.

 2) NSBinaryStoreType

 3) NSXMLStoreType: iOS 환경에서 사용할 수 없다.

 4) NSSQLiteStoreType: 기본으로 저장되는 타입

 

8. 코어데이터의 장단점

 [장점]

  1) DBMS에 대한 종속성이 절감된다.

  2) 독립적으로 작성되어 재사용 및 유지보수가 편리

  3) CloudKit을 사용하여 다른 기기들과 연동할 수 있다.

 [단점]

  1) in-memory 방식임으로 메모리에 로딩된 객체에 대해서만 수정이 가능
     (SQLite
모두 메모리에 로딩하지 않아도 최소한의 데이터만 로드하여 가능)

  2) thread-safe 하지 않는다. (싱글스레드 환경)

  3) 메모리 누수 가능성

 

9. ORM이란?

 : Object-Relation Mapping의 약자로 객체와 관계형 DB의 데이터를 자동으로 매핑해주는것

 -. OOP는 클래스라는 객체를 DB는 테이블로 객체가 정의됨으로 객체 간 불일치가 발생하기에 ORM을 통해

    SQL을 자동으로 생성하여 불일치를 해결해준다.

    DB 데이터 <- ORM -> 객체

 -. 코어데이터는 단순히 데이터를 저장 불러오는 기능만 하는것에서 넘어서 객체 그래프를 관리해주고 

    스스로 관리되는 객체를 다루는 측면에서 ORM의 기능을 한다고 볼 수 있다.

 

10. 코어데이터는 DB 혹은 DBMS인가??

 : 코어데이터는 DB가 아니고 DB의 기능을 수행할 수 있는 역할을 지닌 프레임워크이다.

   영구저장을 하는것은 코어데이터의 일부 기능으로 여러가지 기능들의 총체이다.

 : 보통의 DB와 다르게 완전한 In-memory 형태로 사용이 가능 (앱 런타임 중에만 데이터를 저장)

 : 객체의 속성값, 생명주기, 관계들을 자동으로 관리해줌 (DB는 외래키와 조인등이 필요)

 

11. DB와 코어데이터의 차이

 1) DB는 단순히 데이터 저장 및 불러오기 VS 코어데이터는 해당 기능이 부속된 하나의 기능 (주된 기능은 객체 그래프 관리)

 2) DB는 디스크에 저장된 데이터로 작업 VS 코어데이터는 메모리에 로드된 객체 작업

 3) 코어데이터는 삭제 및 편집을 하려면 메모리에 로드해야 작업이 가능하다 (DB는 로드할 필요없음)

 

[참고자료]

https://developer.apple.com/documentation/coredata

https://zeddios.tistory.com/987

https://eunjin3786.tistory.com/121

https://www.raywenderlich.com/7569-getting-started-with-core-data-tutorial

https://velog.io/@dnjscksdn98/Database-ORM이란

https://www.letmecompile.com/코어데이터core-data-데이터베이스의-차이/

 

 

이렇게 이번 포스팅에서는 코어데이터에 대해 알아봤습니다. 핵심은 코어데이터는 단순한 DB나 DBMS가 아닌 해당 기능을 제공해주는

프레임워크입니다. 따라서 해당 기능 외에도 중요한 다른 기능들도 제공합니다.

아직 사용하면서 더 익혀야할 점이 많은 코어데이터... 애플에서 제공해주는만큼 다른 DB 외부 라이브러리와 어떤차이가 있는지 확실히

짚고 넘어가야겠습니다. 감사합니다😊