-
안녕하세요. 그린입니다!
이번 포스팅에서는 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 외부 라이브러리와 어떤차이가 있는지 확실히
짚고 넘어가야겠습니다. 감사합니다😊
'iOS' 카테고리의 다른 글
Responder Chain / Touch Event (0) 2021.02.22 의존성 관리도구 (0) 2021.02.18 KeyChain (4) 2021.02.01 Collection View (0) 2021.01.25 Application Life Cycle (0) 2021.01.14