CloudKit을 사용하여 앱 설계하기.

CloudKit은 관리성, 유연성 및 성능을 위해 설계되었습니다. CloudKit은 컨테이너에 앱을 정리하여 각 앱을 격리함으로써 앱의 데이터가 다른 앱과 얽히지 않도록 합니다. 특수 데이터베이스 및 영역을 통해 접근 유형 또는 기능별로 앱 정보를 쉽게 분리할 수도 있습니다. CloudKit은 효율적인 동기화 및 공유 기능과 더불어 강력한 클라우드 앱을 손쉽게 개발할 수 있는 포괄적인 기능 세트를 제공합니다.

컨테이너

CloudKit은 컨테이너라는 논리적 공간을 사용하여 데이터를 정리합니다. 하나의 앱에서 여러 컨테이너를 사용하도록 구성할 수도 있고 여러 앱에서 하나의 컨테이너를 사용하도록 구성할 수도 있지만, 일반적으로 하나의 CloudKit 앱은 모든 프로덕션 데이터에 하나의 컨테이너를 사용합니다. 각 컨테이너는 CloudKit의 앱 저장 공간을 나타내며 앱의 데이터를 격리합니다. 사용자는 컨테이너 내에서 앱의 스키마를 관리합니다.

데이터베이스

컨테이너에는 공개, 비공개 및 공유 등 다양한 유형의 데이터베이스가 포함될 수 있습니다. 각 컨테이너에는 앱의 모든 사용자가 공유하는 단일 공개 데이터베이스가 있습니다. 또한 개별 앱 사용자에게 자체 비공개 데이터베이스뿐만 아니라 다른 사용자와 정보를 공유할 수 있는 공유 데이터베이스에 대한 독점적인 접근 권한이 부여됩니다(아래 참고).

이러한 데이터베이스를 선택적으로 사용하면 복잡한 ACL(접근 제어 목록) 모델을 구현하지 않고도 데이터 접근을 제어할 수 있습니다. 예를 들어 데이터를 여러 앱 사용자에게 노출하려는 경우 앱의 공개 데이터베이스를 간편하게 구성하여 이 기능을 제공할 수 있습니다. 데이터를 자신만 사용할 수 있게 하려는 경우 비공개 데이터베이스에 데이터를 게시하면 됩니다. 해당 데이터 중 일부를 다른 사용자와 명시적으로 공유하려는 경우 공유 데이터베이스에서 데이터를 보고 편집할 수 있게 특정 사용자를 초대할 수도 있습니다.

영역

CloudKit의 데이터베이스에는 데이터 기록의 논리적 구획인 영역이 포함되어 있습니다. 공개 데이터베이스에는 기본 영역이라는 하나의 영역만 있습니다. 각 비공개 데이터베이스에도 기본 영역이 있지만 데이터베이스를 여러 맞춤형 영역으로 분리할 수도 있습니다. 공유 데이터베이스에는 기본 영역이 없습니다(아래 참고).

기록이 공개 또는 비공개 데이터베이스에 저장되면 기본적으로 해당 데이터베이스의 기본 영역에 배치됩니다. 하지만 비공개 데이터베이스 내 맞춤형 영역에 기록이 배치되도록 선택할 수도 있습니다. 맞춤형 영역은 특정 용도에 맞춰 관련 기록을 그룹화하는 데 유용합니다. 예를 들어 비공개 데이터베이스에 있는 다양한 종류의 데이터가 기기마다 서로 다른 시점에 업데이트되어야 하는 경우, 유형에 따라 해당 데이터 세트를 서로 다른 영역으로 그룹화하고 영역별로 변경 사항을 동기화할 수 있습니다. 이렇게 하면 모든 영역을 한꺼번에 동기화하지 않아도 돼 불필요한 데이터 전송이 방지됩니다.

환경

CloudKit은 프로젝트와 앱을 위한 별도의 개발 및 프로덕션 환경을 제공합니다. 프로젝트가 아직 개발 단계에 있는 경우 컨테이너의 스키마와 기록을 샌드박스 환경에 저장하여 데이터베이스 스키마를 사용자에게 제공하기 전에 테스트하거나 실험할 수 있습니다. 개발 팀의 구성원만 샌드박스 환경에 접근할 수 있습니다.

스키마 개발을 완료한 후에는 프로모션이라는 프로세스를 통해 프로덕션 환경으로 이동할 수 있습니다. 프로모션되고 나면 순방향 호환 방식으로만 스키마를 수정할 수 있습니다. 이는 곧 개체 유형을 삭제할 수 없다는 뜻입니다. 개체에 필드를 추가할 수는 있지만 필드를 수정하거나 제거할 수는 없습니다. 일반적으로 클라이언트 업데이트 빈도를 제어할 수 없으므로 이 방법을 사용하면 이전 클라이언트와 스키마 변경 사항 간의 연속성을 보장할 수 있습니다. 테스트를 위해 앱을 배포할 준비가 되었으면 개발 스키마를 프로덕션 환경으로 마이그레이션하고 기록 유형, 필드, 인덱스를 복사합니다. App Store에서 판매되는 앱은 프로덕션 환경에만 접근할 수 있습니다.

권한 및 접근 제어

CloudKit은 RBAC(역할 기반 접근 제어)를 사용하여 권한을 관리하고 공개 데이터베이스의 데이터에 대한 접근을 제어합니다(비공개 데이터베이스는 비공개). CloudKit을 사용하면 역할의 권한 수준을 설정한 다음 역할을 지정된 기록 유형에 할당할 수 있습니다.

권한에는 읽기, 쓰기 및/또는 생성이 포함되며, 권한은 단계적으로 추가됩니다. 즉, 읽기 권한으로는 기록을 읽을 수만 있고, 쓰기 권한으로는 기록을 읽고 쓸 수 있으며, 생성 권한으로는 기록을 읽고 쓸 수 있을 뿐만 아니라 새 기록을 생성할 수도 있습니다.

역할에는 World, Authenticated, Creator가 있습니다. World 역할에는 인증 여부와 관계없이 모든 iCloud 사용자가 포함됩니다. Authenticated 역할에는 로그인하고 인증을 받은 모든 iCloud 사용자가 포함됩니다. Creator 역할에는 기록을 생성한 인증 사용자만 포함됩니다.

연결성

CloudKit은 강력한 일관성을 갖춘 저장 공간을 제공하며 사용자의 기기 간에, 또는 여러 사용자 간에 데이터를 쉽게 공유할 수 있도록 지원합니다. 데이터가 공유되므로 앱에서 로컬 기록을 동기화된 상태로 유지해야 합니다. 기본 프레임워크를 사용하면 앱의 데이터를 CloudKit 컨테이너에 저장할 수 있으므로 사용자가 여러 기기에서 데이터에 접근할 수 있습니다.