Docs Menu
Docs Home
/ /
Atlas Device SDK
/ /

파티션 기반 동기화 - .NET SDK

이 페이지의 내용

  • 파티션 값
  • 온라인 상태에서 파티션 기반 동기화 Realm 열기
  • 오프라인 상태에서 파티션 기반 동기화 Realm 열기
  • 파티션 기반 동기화에서 Flexible Sync로 마이그레이션
  • 마이그레이션 후 클라이언트 코드 업데이트
  • 동기화되지 않은 Realm에서 동기화된 Realm으로 마이그레이션

파티션 기반 동기화는 Realm .NET SDK와 함께 Atlas Device Sync를 사용하기 위한 이전 모드입니다. 새 앱에는 Flexible Sync 를 사용하는 것이 좋습니다. 이 페이지의 정보는 아직 파티션 기반 동기화를 사용하고 있는 사용자를 위한 것입니다.

Realm .NET SDK v11.1.0 이상에서는 파티션 기반 동기화 에서 Flexible Sync로 마이그레이션 하는 기능 을 지원합니다. 자세한 내용은 파티션 기반 동기화 에서 Flexible Sync로 마이그레이션을 참조하세요. Flexible Sync를 사용하려면 이전 파티션 기반 동기화 앱을 마이그레이션 것이 좋습니다.

When you select Partition-Based Sync for your backend App configuration, your client implementation must include a partition value. 이는 파티션 기반 동기화 를 구성할 때 선택하는 파티션 키 필드 의 값입니다.

파티션 값에 따라 클라이언트 애플리케이션이 액세스할 수 있는 데이터가 결정됩니다. 동기화된 영역을 열 때 파티션 값을 전달합니다.

온라인 상태에서 동기화된 영역을 여는 단계는 다음과 같습니다.

  1. 앱 코드는 사용자를 인증하는 과정을 안내합니다.

  2. 파티션 사용자 객체를 포함하는 PartitionSyncConfiguration 객체를 만듭니다.

  3. 영역 () 메서드를 호출하고 PartitionSyncConfiguration 객체 를 전달하여 동기화된 Realm을 엽니다.

다음 코드는 이러한 단계를 보여줍니다.

user = await app.LogInAsync(
Credentials.EmailPassword("caleb@mongodb.com", "MySekritPwd"));
config = new PartitionSyncConfiguration("myPart", user);
try
{
realm = await Realm.GetInstanceAsync(config);
}
catch (Exception ex)
{
Console.WriteLine($@"Error creating or opening the
realm file. {ex.Message}");
}

위의 예에서 코드는 GetInstanceAsync() 을(를) 호출하여 비동기적 으로 영역을 여는 방법을 보여줍니다. GetInstance() 메서드를 호출하여 Realm을 동기적 으로 열 수도 있습니다.

var synchronousRealm = Realm.GetInstance(config);

다음도 참조하세요.

사용자가 인증되면 사용자가 로그오프할 때까지 User 객체가 기기에 유지됩니다. 이렇게 하면 앱이 기존 사용자를 검색 하고 오프라인 상태에서 동기화된 영역을 열 수 있습니다. 오프라인 상태에서 발생하는 변경 사항은 기기가 앱에 다시 연결되면 SDK에 동기화됩니다.

다음 코드는 기존 User 객체가 있는지 확인하는 방법을 보여줍니다. 아무 것도 발견되지 않으면 에 설명된 프로세스를 사용하여 사용자를 얻습니다. 기기에 이미 user 있는 경우 해당 사용자와 동기화된 영역이 열립니다.

if (app.CurrentUser == null)
{
// App must be online for user to authenticate
user = await app.LogInAsync(
Credentials.EmailPassword("caleb@mongodb.com", "MySekritPwd"));
config = new PartitionSyncConfiguration("_part", user);
realm = await Realm.GetInstanceAsync(config);
}
else
{
// This works whether online or offline
user = app.CurrentUser;
config = new PartitionSyncConfiguration("_part", user);
realm = Realm.GetInstance(config);
}

App Services Realm Mobile Sync 모드를 파티션 기반 동기화에서 Flexible Sync로 마이그레이션할 수 있습니다. 마이그레이션은 애플리케이션 코드를 변경할 필요가 없는 자동 프로세스입니다. 자동 마이그레이션에는 Realm .NET SDK 버전 11.1.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를 사용하도록 변환하려면 다음과 같이 변경하세요.

  • PartitionSyncConfigurationFlexibleSyncConfiguration으로 변경합니다.

  • Flexible Sync 구독에 사용할 관련 속성을 객체 모델에 추가합니다. 예를 들어 ownerId 속성을 추가하여 사용자가 자신의 데이터만 동기화할 수 있도록 할 수 있습니다.

  • 자동 Flexible Sync 구독을 제거하고 관련 구독을 수동으로 생성합니다.

이러한 전략에 대한 데이터 모델링 방법의 예를 포함하여 Flexible Sync 권한 전략의 예는 Device Sync 권한 가이드를 참조하세요.

파티션 기반 동기화에서 Flexible Sync로 마이그레이션하면 Realm은 앱에 대한 숨겨진 Flexible Sync 구독을 자동으로 생성합니다. 다음에 구독을 추가하거나 변경할 때 다음을 수행하는 것이 좋습니다.

  1. 자동으로 생성된 구독을 제거합니다.

  2. 클라이언트 코드베이스에 관련 구독을 수동으로 추가합니다.

이를 통해 향후 반복 및 디버깅을 위해 코드베이스에서 모든 구독 로직을 함께 볼 수 있습니다.

자동으로 생성된 Flexible Sync 구독에 대한 자세한 내용은 클라이언트 앱을 Flexible Sync로 마이그레이션을 참조하세요.

동기화되지 않은 영역 을 동기화된 영역 으로 변환할 수 있습니다( 파티션 기반 동기화). 동기화되지 않은 Realm에서 파티션 기반 동기화 를 사용하는 영역 으로 변환하려면 다음을 수행합니다.

  1. 기존 영역 을 엽니다.

  2. 새 영역 에 대한 구성을 만듭니다.

  3. 기존 영역 에서 WriteCopy() 메서드를 호출하여 데이터를 새 영역 으로 복사합니다.

다음 코드에서는 동기화되지 않은 영역 을 열고 새 PartitionSyncConfiguration 객체 를 만든 다음 기존 영역 을 새 영역 에 복사합니다. 그런 다음 기존 영역 을 삭제 하고 새 영역 을 엽니다.

var existingConfig = new RealmConfiguration("example.realm");
var existingRealm = Realm.GetInstance(existingConfig);
var app = App.Create("my-app-id");
var user = await app.LogInAsync(
Credentials.EmailPassword("email@example.com", "password"));
var syncConfig = new PartitionSyncConfiguration("user_partition", user);
existingRealm.WriteCopy(syncConfig);
// You can now delete the nonsynced realm:
Realm.DeleteRealm(existingConfig);
// You can now use the synced realm:
var syncedRealm = Realm.GetInstance(syncConfig);

참고

파티션 기반 동기화만 해당

이 방법은 비동기화 영역과 파티션 기반 동기화 간의 변환만 지원합니다. 앱에서 Flexible Sync를 사용하는 경우 영역의 객체를 수동으로 반복하고 다른 영역으로 복사해야 합니다.

돌아가기

Atlas로 데이터 스트리밍