안녕하세요! 피피아노입니다 🎵
제가 요즘 팀 프로젝트를 해보려고 하는데 iOS 앱에 데이터베이스를 제대로 연결해서 사용해보는 건 처음이라 제대로 공부하고 사용해보고 싶어서 이번 포스팅에서는 코어 데이터에 대해서 한 번 작성해보려고 합니다!
Core Data가 나오게 된 배경에 대해서 간단하게 살펴보고 Core Data가 뭔지, 그리고 Core Data를 사용하기 위해서 어떤 개념들을 알아야 하는지 정리해보겠습니다.
저도 공부하면서 작성하는 거라 잘못된 부분이 있다면 댓글로 지적 부탁드립니다...!
그럼 바로 시작할게요!
Core Data가 나오게 된 배경
코어 데이터가 뭔지 살펴보기 전에 먼저 코어 데이터가 왜 나오게 됐는지 먼저 살펴보겠습니다.
iOS 앱 개발에서 데이터 관리는 매우 중요한 부분입니다. 초기 iOS 개발에서는 SQLite, XML 파일 등 다양한 데이터 저장 방식을 사용했지만, 이는 복잡하고 오류가 발생하기 쉬웠다고 합니다.
이에 애플은 2008년 iOS 3.0에서 코어 데이터 프레임워크를 도입했습니다. 코어 데이터는 데이터 모델링, 데이터 저장, 데이터 검색 등 데이터 관리를 위한 통합 솔루션을 제공해줍니다.
Core Data란?
코어 데이터는 본질적으로 개발자가 기본적인 데이터베이스 기술에 대한 지식이 없어도 Swift 객체로 데이터 작업을 할 수 있도록 SQLite 데이터베이스에 래퍼(wrapper)를 두는 프레임워크입니다.
Core Data Stack
코어 데이터는 데이터 저장소 기능을 제공하기 위해 통합된 여러 프레임워크 객체로 구성됩니다. 이 스택을 그림으로 표현해보면 아래처럼 표현할 수 있습니다.
영구 컨테이너
영구 컨테이너(persistent container)는 코어 데이터 스택의 생성을 처리하고 기본적인 코어 데이터 기능에 추가적인 애플리케이션 메소드를 쉽게 추가할 수 있도록 설계되었습니다.
영구 컨테이너는 코어 데이터를 설정하고 관리하는 일을 대신 해줍니다. 영구 컨테이너를 초기화하면, 이 컨테이너가 코어 데이터를 사용할 준비를 마치게 됩니다. 그 후, 영구 컨테이너를 통해 관리 객체 콘텍스트(managed object context)에 접근할 수 있게 됩니다.
관리 객체 콘텍스트는 데이터베이스와 애플리케이션 간의 다리 역할을 하는 도구로, 데이터를 추가, 삭제, 수정하는 작업을 할 수 있게 해줍니다. 요약하자면, 영구 컨테이너는 코어 데이터를 쉽게 다룰 수 있게 해주는 도구이며, 이를 통해 데이터를 관리하는 데 필요한 기본적인 기능들을 사용할 수 있게 됩니다.
관리 객체
관리 객체(managed object)는 데이터를 저장하기 위해 애플리케이션 코드에서 생성되는 객체입니다. 관리 객체는 데이터베이스 테이블의 행 또는 레코드로 생각하시면 됩니다. 관리 객체는 NSManagedObject 클래스 또는 그 하위 클래스의 인스턴스인데 이러한 객체는 관리 객체 콘텍스트에 포함되고 유지 됩니다.
관리 객체 콘텍스트
관리 객체 콘텍스트는 아까 위에서 간단하게 설명했는데요. 더 자세히 알아보겠습니다.
코어 데이터 기반의 애플리케이션은 영구 저장소와 직접 상호작용하지 않습니다. 그럼 어떻게 상호작용을 하냐? 바로 직접 상호작용하지 않는 대신에 애플리케이션 코드는 코어 데이터 스택의 관리 객체 콘텍스트 계층에 포함된 관리 객체와 상호작용하게 되는데요. 이 콘텍스트는 기본 데이터 저장소와 관련하여 객체의 상태를 유지하고 관리 객체 모델에 의해 정의된 관리 객체 간의 관계를 관리합니다.
영구 저장소 코디네이터
영구 저장소 코디네이터(persistent stroe coordinator)는 여러 영구 객체 저장소에 대한 액세스를 조정하는 역할을 합니다. 그래서 iOS 개발자들은 영구 저장소 코디네이터와 직접 상호작용할 일이 거의 없고, 둘 이상의 영구 객체 저장소가 필요한 앱을 개발할 필요가 거의 없을 것입니다.
만약 여러 저장소가 필요한 경우에는 코디네이터가 이러한 저장소를 코어 데이터 스택의 상위 계층에 단일 저장소로 제공해줍니다.
영구 객체 저장소
Core Data에서 데이터가 실제로 저장되는 공간이 바로 영구 객체 저장소(persistent object store)입니다. 이 저장소는 4가지 타입으로 구분됩니다.
SQLite 저장소: 가장 일반적으로 사용되는 저장소 타입으로, SQLite 데이터베이스에 데이터를 저장합니다.
XML 저장소: XML 파일 형태로 데이터를 저장합니다.
바이너리 저장소: 바이너리 파일 형태로 데이터를 저장합니다.
인메모리 저장소: 메모리 상에 데이터를 저장하며, 앱이 종료되면 데이터가 사라집니다.
이 중 SQLite 저장소가 가장 많이 사용되는데, 이는 SQLite가 안정적이고 효율적인 데이터베이스 엔진이기 때문입니다. 또한 SQLite는 iOS 기기에 기본적으로 포함되어 있어 별도의 설치가 필요 없다는 장점이 있습니다.
영구 객체 저장소는 NSPersistentStore 클래스에 의해 관리됩니다. 이 클래스는 데이터를 읽고 쓰는 역할을 담당하며, 저장소 타입에 따라 다른 구현체를 사용합니다.
종합적으로 Core Data의 영구 객체 저장소는 데이터를 실제로 저장하는 공간으로, SQLite, XML, 바이너리, 인메모리 등 다양한 타입의 저장소를 지원합니다. 이를 통해 개발자는 데이터베이스 관리에 대한 복잡성을 줄이고, 효율적으로 데이터를 저장하고 관리할 수 있습니다.
감사합니다.
잘못된 내용이 있거나 더 좋은 내용 피드백은 언제나 환영합니다!
궁금하신 부분은 댓글로 질문 부탁드립니다!
'Apple > iOS' 카테고리의 다른 글
[iOS] Live Activity 알아보기 (0) | 2024.08.09 |
---|---|
[iOS] RESTful API 완벽 이해하기 (0) | 2024.07.22 |
[iOS] Open API 연결하는 방법 (0) | 2024.05.19 |
[iOS] 화면 전환 방식 (Present, NavigationController + Source, NavigationController + Segue) (0) | 2024.03.24 |
[iOS] AutoLayout 쉽게 이해하기 (0) | 2023.12.30 |