[iOS] Core Data는 대체 무엇인가???

룰루날라·2022년 6월 2일
4
post-thumbnail
post-custom-banner

코어데이터에 대해 조금만 찾아보면, 제일 많이 볼 수 있는 말이 ‘코어데이터는 데이터베이스도 아니고, ORM도 아닌 객체 그래프 관리 프레임워크’라는 말이다.

오늘은 대체 코어데이터란 무엇이길래!! 저런 이야기들이 계속 나오는지 알아보도록 하자!

🤓 코어데이터란 대체 무엇이냐

코어데이터란 넓은 의미에서는 앱의 모델 계층이자,
데이터베이스, ORM 등의 기능을 가진 객체 그래프 관리 프레임워크다.

ㅎㅎ 위에서 한 말을 너무 똑같이 했지만 그게 코어 데이터다!

코어 데이터는 근본적으로 객체 그래프를 관리하는 역할을 한다.

객체 그래프 관리 프레임워크

객체 그래프메모리에 있는 객체들과 그 객체들간의 관계를 이야기한다.

예를 들어, Person이라는 객체와 Family라는 객체가 위와 같은 관계로 메모리에 올라간다고 했을 때

이 객체들과, 객체들이 어떤 관계를 갖고 있는지를 객체 그래프라고 하는 것이다.

좀 더 실제 앱의 예시로 생각해보면 SNS 앱에는 게시글과 댓글들이 있을텐데 두 객체의 인스턴스들과 인스턴스간의 관계들은 객체 그래프를 형성한다.
이 밖에도 수많은 객체들이 메모리에서 관계를 형성하고 있을 것이다.
이것들을 그 형태 그대로 디스크에 저장할 필요가 있고 코어데이터가 바로 그것을 위한 것이다.

코어 데이터는 이렇게 객체 그래프를 관리하는 역할을 하는 프레임워크다.
따라서 우리는 코어 데이터를 사용할 때 객체지향적인 방식으로 데이터와 상호작용할 것이다. 코어데이터는 객체지향의 관점에서 바라보고 사용하는 것이 좋다👍

그렇다면 데이터베이스, ORM이라는 말은 왜 나오는걸까?
데이터베이스와 ORM은 코어데이터가 객체 그래프를 관리하는 과정에서 제공하는 기능 일부다.

Database

Database는 코어데이터의 일부 기능이기 때문에 데이터를 저장하는 용도가 아니어도 얼마든지 쓸 수 있다.

하지만, 공식문서 상의 코어데이터의 정의만 봐도 주 기능이 로컬 디바이스에 데이터를 저장하는 것이라는 걸 알 수 있다.

내부적으로 SQlite를 저장소 유형으로 사용하기도 해 코어데이터 자체가 데이터베이스라고 생각할 수 있지만 코어데이터는 데이터베이스의 저장과 검색이라는 기능을 가지고 있는 더 큰 개념이다.
(코어 데이터가 내부 저장소로 SQlite말고도 어떤 것들을 사용하는지를 알고 싶다면 여기에서 확인할 수 있다.)

ORM

관계형 데이터베이스와 소통하기 위해서는 SQL이란 언어가 필요한데, ORM이란 내가 앱을 만드는 데 사용하고 있는 언어를 SQL로 번역해주는 거라고 생각하면 쉽다.

OOP를 바탕으로 만든 객체를 관계형 데이터베이스의 테이블로 매핑해줘서 SQL문을 자동으로 생성해주는 것인데, 코어데이터 역시 내부적으로 SQlite를 사용함에도 따로 SQL문을 작성할 필요 없이 객체간 관계를 바탕으로 SQL문을 자동으로 생성해주기 때문에 ORM의 기능도 하고 있다.

=> 일반적인 데이터베이스를 사용하는 경우, 데이터의 CRUD 작업을 분명하게 해줘야하는데 
코어데이터는 내부적으로는 SQlite를 사용함에도 명시적으로 CRUD를 하라고 말할 필요는 없다.
그냥 객체를 만들어서, 앱에서의 다른 객체처럼 그 객체를 가지고 작업하면 된다. 
그러면 뒤에서 코어 데이터가 data persistence를 관리해줄거다.

앱의 모델 계층

코어데이터는 넓게 보면 앱의 모델이라고 볼 수 있다.
좀 더 정확히 말하면 모델 레이어의 객체를 관리하기 위한 프레임워크다.

예를 들어, genre, title이라는 프로퍼티를 갖는 Movie라는 모델 타입이 있다고 했을 때
해당 모델 타입은 코어데이터의 데이터 모델 에디털르 통해 Entity와 Attribute로 만들어 관리하게 된다.
(이 내용에 대해서는 실제 코어데이터를 앱에 적용해보는 다음 글에서 더 자세히 살펴보도록 하겠다.)

앱에서 사용하는 데이터 중 로컬 디바이스에 저장해놓고 사용하는 데이터들의 모델은 코어데이터로 관리한다고 보면 될 것이다.

코어데이터는 모델 계층의 객체의 라이프 사이클과 객체 그래프 관리와 관련된 일들에 대한 솔루션들을 제공한다.
모델 객체들, 그 객체들간의 관계를 알려주면 알아서 객체 그래프를 관리해주고 저장까지 해주기 때문에 모델 레이어에 대해 작성하는 코드의 양이 50~70퍼센트나 줄어든다.

To be continued...

오늘은 '코어데이터가 무엇인지'에 대해서 알아보았다.
하나의 기능만 하는 단순한 기술이 아니다보니 머릿속에 정리가 잘 안 되어 있었는데
글을 쓰면서 코어데이터가 무엇인지 확실히 알게 된 것 같다.

다음 글에서는 실제로 앱에 코어데이터를 적용해보는 과정을 함께 해보면서
코어데이터는 어떤 구조를 가지고 있는지, 어떤 방식으로 위에서 말한 일들을 해내는건지 알아보자!



참고
https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/CoreData/index.html#//apple_ref/doc/uid/TP40001075-CH2-SW1
https://developer.apple.com/documentation/coredata
https://www.youtube.com/watch?v=O7u9nYWjvKk&t=2567s

profile
즐거운 인생 (~-_-)~ ~(-_-~)
post-custom-banner

2개의 댓글

comment-user-thumbnail
2023년 4월 2일

많은 도움이 되었습니다!

답글 달기
comment-user-thumbnail
2023년 8월 4일

감사합니다. 도움이 많이 됐어요!

답글 달기