파티션 기반 동기화 - React Native SDK
이 페이지의 내용
파티션 기반 동기화는 Realm React Native SDK와 함께 Atlas Device Sync를 사용하기 위한 이전 모드입니다. 새 앱에는 Flexible Sync 를 사용하는 것이 좋습니다. 이 페이지의 정보는 아직 파티션 기반 동기화를 사용하고 있는 사용자를 위한 것입니다.
파티션 기반 동기화 및 Atlas App Services 에서 구성하는 방법에 대한 자세한 내용은 App Services 문서에서 파티션 기반 동기화 를 참조하세요.
파티션 값
When you select Partition-Based Sync for your backend App configuration, your client implementation must include a partition value. 이는 파티션 기반 동기화 를 구성할 때 선택하는 파티션 키 필드 의 값입니다.
파티션 값에 따라 클라이언트 애플리케이션이 액세스할 수 있는 데이터가 결정됩니다.
동기화된 영역을 열 때 파티션 값을 전달합니다.
파티션 기반 동기화 Realm 구성
Flexible Sync 영역을 열려면 @realm/react
의 createRealmContext()
함수와 반환된 RealmProvider
을 사용합니다.
UserProvider
에 중첩된 RealmProvider
에서 flexible: true
을 포함하는 SyncConfiguration 객체 와 함께 sync
속성 을 추가합니다.
UserProvider
는 인증된 사용자를 자동으로 RealmProvider
에 전달한다는 점에 유의하세요.
<RealmProvider schema={[YourObjectModel]} sync={{ partitionValue: 'testPartition', }}> <RestOfApp /> </RealmProvider>
데이터 복사 및 새 Realm 열기
버전 realm@10.14.0
의 새로운 기능
기존 영역의 데이터를 다른 구성 옵션이 있는 새 영역으로 복사하려면 새 구성에 Realm.writeCopyTo() 함수를 전달합니다. 메서드를 사용하여 특정 세그먼트의 객체를 조회하기 위해 컬렉션을 필터링합니다.
참고
동일 유형 동기화만 가능
이 방법은 다른 파티션 기반 동기화 사용자를 위한 파티션 기반 동기화 구성 복사 또는 다른 Flexible Sync 사용자를 위한 Flexible Sync 구성 복사만 지원합니다. 이 방법을 사용하여 파티션 기반 동기화 영역과 Flexible Sync 영역 간에 또는 그 반대로 변환할 수 없습니다.
새 영역 구성에서 path
을(를) 지정 해야 합니다.
복사된 영역을 이미 존재하는 영역 파일에 작성하는 경우 데이터는 객체별로 기록됩니다. 복사 작업은 지정된 기본 키에 대한 객체가 이미 있는 경우 객체를 대체합니다. 복사하는 영역과 쓰는 영역의 스키마가 호환되어야 복사 작업이 성공할 수 있습니다. 두 구성의 스키마에 있는 객체만 복사됩니다.
구성 변경에는 SyncConfiguration에 대한 수정이 포함될 수 있습니다.
로컬 영역에서 동기화된 영역으로
영역과 로컬 영역 동기화
구성 변경에는 Configuration
의 encryptionKey
속성에 대한 변경도 포함될 수 있습니다.
암호화된 영역에서 암호화되지 않은 영역으로의 전환
암호화되지 않은 영역에서 암호화된 영역으로의 전환
예시
로컬 Realm을 동기화된 Realm으로 변환
const localConfig = { schema: [Car], path: "localOnly.realm", }; const localRealm = await Realm.open(localConfig); const syncedConfig = { schema: [Car], path: "copyLocalToSynced.realm", sync: { user: app.currentUser, partitionValue: "myPartition", }, }; localRealm.writeCopyTo(syncedConfig); const syncedRealm = await Realm.open(syncedConfig);
const localConfig: Realm.Configuration = { schema: [Car], path: "localOnly.realm", }; const localRealm = await Realm.open(localConfig); const syncedConfig: Realm.Configuration = { schema: [Car], path: "copyLocalToSynced.realm", sync: { user: app.currentUser!, partitionValue: "myPartition", }, }; localRealm.writeCopyTo(syncedConfig); const syncedRealm = await Realm.open(syncedConfig);
구성 변경 사항을 결합할 수도 있습니다. 예를 들어 로컬 암호화 영역을 암호화되지 않은 동기화 영역으로 열거나 암호화되지 않은 동기화 영역을 암호화된 동기화 영역으로 열 수 있습니다.
예시
동기화된 암호화 Realm을 로컬 암호화되지 않은 Realm으로 변환
// Create a secure key. const encryptionKey = new Int8Array(64); // ... store key const syncedEncryptedConfig = { schema: [Car], path: "syncedEncrypted.realm", sync: { user: app.currentUser, partitionValue: "myPartition", }, encryptionKey, }; const syncedEncryptedRealm = await Realm.open(syncedEncryptedConfig); const localUnencryptedConfig = { schema: [Car], path: "copyLocalUnencrypted.realm", }; syncedEncryptedRealm.writeCopyTo(localUnencryptedConfig); const localUnencryptedRealm = await Realm.open(syncedEncryptedConfig);
// Create a secure key. const encryptionKey = new Int8Array(64); // ... store key const syncedEncryptedConfig: Realm.Configuration = { schema: [Car], path: "syncedEncrypted.realm", sync: { user: app.currentUser!, partitionValue: "myPartition", }, encryptionKey, }; const syncedEncryptedRealm = await Realm.open(syncedEncryptedConfig); const localUnencryptedConfig: Realm.Configuration = { schema: [Car], path: "copyLocalUnencrypted.realm", }; syncedEncryptedRealm.writeCopyTo(localUnencryptedConfig); const localUnencryptedRealm = await Realm.open(syncedEncryptedConfig);
파티션 기반 동기화에서 Flexible Sync로 마이그레이션
App Services Realm Mobile Sync 모드를 파티션 기반 동기화에서 Flexible Sync로 마이그레이션할 수 있습니다. 마이그레이션은 애플리케이션 코드를 변경할 필요가 없는 자동 프로세스입니다. 자동 마이그레이션을 사용하려면 Realm Node.js SDK 버전 11.10.0 이상이 필요합니다.
마이그레이션하면 기존 App Services 사용자 및 인증 구성을 유지할 수 있습니다. Flexible Sync는 더욱 다양한 권한 구성 옵션과 보다 세분화된 데이터 동기화를 제공합니다.
App Services App을 파티션 기반 동기화에서 Flexible Sync로 마이그레이션하는 방법에 대한 자세한 내용은 Device Sync 모드 마이그레이션을 참조하세요.
마이그레이션 후 클라이언트 코드 업데이트
파티션 기반 동기화에서 Flexible Sync로 자동 마이그레이션할 때는 클라이언트 코드를 변경할 필요가 없습니다. 그러나 이 기능을 지원하기 위해 Realm은 다음을 통해 두 동기화 모드의 차이점을 자동으로 처리합니다.
partitionKey == partitionValue
인 각 Realm 객체 유형에 대해 Flexible Sync 구독을 자동으로 생성합니다.필드가 아직 없는 경우 모든 객체에
partitionKey
필드를 삽입합니다. 이는 자동 Flexible Sync 구독에 필요합니다.
마이그레이션 후 클라이언트 코드를 업데이트해야 하는 경우 클라이언트 코드베이스를 업데이트하여 숨겨진 마이그레이션 기능을 제거하는 것이 좋습니다. 다음과 같은 경우 클라이언트 코드베이스를 업데이트해야 할 수 있습니다.
클라이언트 코드베이스에서 새 모델을 추가하거나 모델을 변경하는 경우
Realm 객체를 읽거나 쓰는 기능을 추가하거나 변경하는 경우
동기화하는 데이터를 보다 세밀하게 제어하려는 경우
파티션 기반 동기화 클라이언트 코드를 Flexible Sync를 사용하도록 변환하려면 다음과 같이 변경하세요.
동기화된 Realm을 여는 SyncConfiguration 객체 에
flexible:true
를 추가 영역.Flexible Sync 구독에 사용할 관련 속성을 객체 모델에 추가합니다. 예를 들어
ownerId
속성을 추가하여 사용자가 자신의 데이터만 동기화할 수 있도록 할 수 있습니다.자동 Flexible Sync 구독을 제거하고 관련 구독을 수동으로 생성합니다.
이러한 전략에 대한 데이터 모델링 방법의 예를 포함하여 Flexible Sync 권한 전략의 예는 Device Sync 권한 가이드를 참조하세요.
구독 제거 및 수동 생성
파티션 기반 동기화에서 Flexible Sync로 마이그레이션하면 Realm은 앱에 대한 숨겨진 Flexible Sync 구독을 자동으로 생성합니다. 다음에 구독을 추가하거나 변경할 때 다음을 수행하는 것이 좋습니다.
이를 통해 향후 반복 및 디버깅을 위해 코드베이스에서 모든 구독 로직을 함께 볼 수 있습니다.
자동으로 생성된 Flexible Sync 구독에 대한 자세한 내용은 클라이언트 앱을 Flexible Sync로 마이그레이션을 참조하세요.