[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

🍎 Apple/Swift

[CloudKit] 기본 개념 및 사용법

inu 2024. 6. 7. 15:34
반응형

CloudKit

  • 앱의 데이터를 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))")
    }
}

반응형