앱의 데이터를 iCloud에 저장하고, 모든 기기와 웹에서 데이터를 최신 상태로 유지할 수 있도록 도와주는 도구
비공개 데이터는 사용자의 iCloud 계정에 저장되기 때문에 사용자층이 늘어나도 무제한으로 확장이 가능하다.
공개 데이터를 저장할 수 있는 공간을 최대 1PB까지 사용할 수 있다.
웹 기반 제어 패널인 CloudKit Console를 제공하기 때문에 편리한 데이터 관리가 가능하다.
Container
데이터를 정리하는 논리적 공간. 앱의 저장공간이라고 생각하면 된다.
일반적으로 하나의 앱에서 하나의 컨테이너를 사용한다.
하나의 앱에서 여러 Container를 사용할 수도 있고, 여러 앱에서 하나의 Container를 사용할 수도 있다.
사용자는 Container 내에서 앱의 스키마를 관리한다.
Database
Container 안에는 다양한 유형의 Database가 존재한다.
Public Database : 여러 앱 사용자에게 데이터를 노출하려는 경우 사용하는 데이터베이스
Private Database : 자신만 데이터를 사용하려고 하는 경우 사용하는 데이터베이스
Shared Database : 일부 데이터를 다른 사용자와 공유하려고 하는 경우 사용하는 데이터베이스
Zone
데이터 기록의 논리적 구획
Public Database는 Dafault Zone 하나만을 가진다.
Private Database도 Dafault Zone이 있지만 여러개로 분리가 가능하다.
Zone마다 업데이트 시점을 달리하여 불필요한 데이터 전송을 방지할 수 있고, 특정 Zone만 Shared Database에 기록되도록 처리해놓는 것도 가능하다.
주요 클래스
CKContainer: iCloud 컨테이너를 나타내며, 데이터베이스에 접근할 수 있다.
CKDatabase: 데이터베이스 객체로, 레코드의 저장, 검색, 업데이트, 삭제를 관리한다.
CKRecord: 레코드를 나타내는 객체로, 데이터를 저장하는 단위이다.
CKRecordZone: 레코드의 논리적 구역을 나타내며, 구역별로 데이터를 관리할 수 있다.
CKQuery: 특정 조건에 맞는 레코드를 검색할 때 사용한다.
예제
import CloudKit
// 기본 컨테이너 가져오기
let container = CKContainer.default()
// 프라이빗 데이터베이스 가져오기
let privateDatabase = container.privateCloudDatabase
// 새로운 레코드 생성
let record = CKRecord(recordType: "MyRecordType")
record["name"] = "John Doe" as CKRecordValue
// 레코드 저장
privateDatabase.save(record) { savedRecord, error in
if let error = error {
print("Error saving record: \(error)")
} else {
print("Record saved successfully: \(String(describing: savedRecord))")
}
}