TIL - 2021.05.31 (Mon)

Youngwoo Lee·2021년 6월 27일
0

TIL

목록 보기
29/29
post-thumbnail

오늘의 주제

  • DB, DBMS, SQLite, CoreData
  • Split View
  • Size and Core Components

대표적인 데이터베이스의 종류

Heirarchical Data Model (클래스 꼴)

Network Data Model (프로토콜 꼴)

Relational Data Model

  • 가장 보편적으로 많이 사용되는 DataModel
  • 데이터간 관계는 있지만, 물리적인 연결이 없다 (n:m)
  • metadata에 따라 정보를 제공함
  • tuple의 열과 행이 교차하는 곳에 오직 하나의 값만 존재!
  • 쉽게 query문(SQL)으로 처리할 수 있음.

NoSQL (Not only SQL)

  • 데이터간 관계가 없는 일관성 모델 (로그, 검색 데이터 결과 등)
  • 휘발성인 Key-Value 를 사용함
  • 영속성(Persistence) 지원: 데이터를 생성한 프로그램이 종료되더라도 사라지지 않도록!

References
Difference between Hierarchical, Network and Relational Data Model - GeeksforGeeks
[DBMS] 데이터베이스(Database) 종류와 장/단점 (계층형/네트워크형/SQL/NoSQL)
[DB] 데이터베이스(Database)의 종류




데이터베이스(DB) vs 데이터베이스 관리 시스템(DBMS)

데이터베이스

  • 데이터의 집합
  • 중복을 최소화하고, (일관성, 무결성, 보안성)을 유지하는 등의 역할을 한다.
  • 많은 양의 데이터를 반복적으로 처리할 때 사용한다.

데이터베이스 관리 시스템

  • 데이터베이스 내의 데이터를 접근할 수 있도록 도와주는 소프트웨어
  • DB의 물리적, 논리적 구조 정의
  • RDB를 조작할 수 있는 기능 제공 (SQL)
  • 조작기능에 따른 무결성 유지 기능
  • ex) Oracle, MySQL, SQLite

References
SQL - 위키백과, 우리 모두의 백과사전
[MySQL] DB vs DBMS




코어데이터를 사용했을 때의 장단점

CoreData: 데이터를 사용하려면 반드시 메모리에 적재가 되어야하므로 메모리에 로딩하는 과정이 비동기임!

장점

  • 스키마의 생성이 쉽고 시각적으로 보여서 편하다?

  • App의 용량 등에 있어서 추가적인 영향이 없다.

  • 데이터의 변동을 Undo, Redo할 수 있다.

  • 백그라운드에서 datatask를 진행하여 결과를 저장하거나 캐시할 수 있다.

  • View의 Datasource와 데이터를 동기화할 수 있다.

    • iOS TableView와 연동해 동작이 가능하다 (NSFetchedResultsController)
  • 데이터 모델의 버전을 관리하고, 앱이 발전함에 따라 사용자 데이터를 migration하는 매커니즘 → 장점인가?

    Core Data Model Versioning and Data Migration
    iOS) CoreData - Migration

  • CloudKit을 사용해 다른 기기들과 연동가능하다

  • 암호화를 할 수도 있다. → addPersistentStore(ofType:configurationName:at:options:)

    Is Core Data Encrypted

  • 여러가지 DBMS를 사용할 수 있다.

    • 따라서 해당 부분을 Wrapping하여 추상화된 형태로 구성됨!
    • CoreData에 명령만 하면 안에 무슨 DBMS던 알아서 처리해줌!!
    • 다양한 SQL을 지원하지만, 모든 것을 지원하지는 않는다.

단점

  • 어렵다. API에 대한 깊은 이해가 필요하다.

  • ManagedObjectContext의 객체들을 변동이 있을 때마다 저장시켜줘야함

    • 만약 이전에 강제종료가 된다면, 날아가버림
  • Apple만을 위한 것이다

  • 메모리에 로딩된 객체에 대해서만 수정 가능하다.

  • 멀티스레드 환경을 위해 디자인되었지만, 모든 object가 thread-safe하지는 않다.

    Managed object contexts are bound to the thread (queue) that they are associated with upon initialization.
    Managed objects retrieved from a context are bound to the same queue that the context is bound to.

    구조를 알아야 이해할 수 있을 듯

    Apple Developer Documentation (Using CoreData in the background)

  • 스레드끼리 Lock기능이 존재하지 않음

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

References

CoreData vs Realm: What to Choose as a Database for iOS Apps | Agilie app development company blog




코어데이터의 모델을 변경시 유의사항

Migration: 기존의 칸을 수정하거나, 생기는 등의 변경이 생겨서 기존의 DB를 최신 양식에 맞춰서 업데이트

  • Migration을 하지 않고 배포를 해버리면, 사용자들이 모두 앱을 지우고 다시 깔아야하는 상황이 일어난다.
  • 따라서, Data Model에 Version을 두어 관리해야 함.

[DB] 데이터베이스 마이그레이션




코어데이터가 관리할 수 있는 (영구) 저장소 타입의 종류

SQLite, Atomic(Binary, XML), In-Memory

Apple Developer Documentation

  1. NSInmemoryStoreType: In-memory에서 끝난다. → 얘는 영구 저장소가 아님!!

    Where Does Core Data Store Data

  2. NSBinaryStoreType : 최소 디스크 공간 차지, 저장소 유형 중 가장 빠르게 로드

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

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

Persistent Store Types and Behaviors




Database ORM

Object Relational Mapping

  • 객체와 RDB의 데이터를 자동으로 매핑시켜주는 것!
  • 객체 사이의 관계를 통해 SQL을 자동으로 생성하여 RDB와의 불일치 해결! (영속성)
  • 주로 라이브러리의 형태로 제공됨

[DB] ORM이란 - Heee's Development Blog

코어데이터는 ORM일까?

  • Apple피셜 ORM은 아니고, ORM 보다는 더 큰 개념이다. ORM 매핑 프레임워크!
  • CoreData 프레임워크가 Persistence Store Coordinator를 통해 추상화 계층(Managed Objects and Managed Object Context)을 지속성 계층(Persistence Store)에서 분리하기 때문에 SQLite뿐만 아니라 다른 관계형 데이터베이스에서도 개체를 추상화할 수 있다는 것.. 이라고 한다. 먼 소리야 이게..

References
Why core data is not an ORM




코어데이터는 DBMS일까?

  • CoreData는 데이터를 저장하기보다는 Object Graph를 매핑하기 위한 Framework로 설계되었다.
    • 특정 데이터에 접근한다는 것보다는 Model Layer에 가깝다.
  • core data는 객체를 store에 매핑하는 세부 정보를 추상화하므로 데이터베이스를 직접 관리하지 않고도 Swift 및 Object-C에서 데이터를 쉽게 저장할 수도 있습니다
    • 그냥 하나의 기능으로 DBMS의 검색 정렬 등의 일부 역할은 할 수 있다.

References

What is Core Data



코어데이터의 대체재

사실 상 대체불가..

Realm

  • 똑같이 객체 위주라서 리팩터링이 쉽다.
  • 자세한 내용은 아래에서!
  • 요즘 많이 안씀

SQLite

  • 요즘에 ORM으로 라이브러리가 나와서 SQL없이 할 수도 있다.

References

iOS Database Comparison. What are the differences?
iOS의 데이터베이스 비교 (SQLite, Core Data, Realm)
iOS. 에서 사용할수 있는 데이터베이스 비교하기

profile
iOS Developer Student

0개의 댓글