문서 메뉴
문서 홈
/ /
Atlas Device SDK
/ /

파티션 기반 동기화 - Java SDK

이 페이지의 내용

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

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

Realm Java SDK v10.16.0 이상에서는 파티션 기반 동기화에서 Flexible Sync로 마이그레이션하는 기능을 지원합니다. 자세한 내용은 파티션 기반 동기화에서 Flexible Sync로 마이그레이션을 참조하세요.

파티션 기반 동기화 및 Atlas App Services에서 구성하는 방법에 대한 자세한 내용은 App Services 문서에서 파티션 기반 동기화 를 참조하세요.

백엔드 앱 구성에 파티션 기반 동기화 를 선택하는 경우 클라이언트 구현에 파티션 값이 포함되어야 합니다. 이는 파티션 기반 동기화를 구성할 때 선택하는 파티션 키 필드의 값입니다.

파티션 값에 따라 클라이언트 애플리케이션이 액세스할 수 있는 데이터가 결정됩니다.

동기화된 영역을 열 때 파티션 값을 전달합니다.

Realm에 대한 설정을 구성하려면 SyncConfiguration.Builder를 사용하여 SyncConfiguration만듭니다.

다음 예제에서는 다음을 사용하여 동기화된 영역을 구성합니다.

  • 파티션 기반 동기화

  • UI 스레드에서 명시적으로 허용되는 동기식 읽기

  • UI 스레드에서 명시적으로 허용되는 동기식 쓰기

  • 열린 영역을 반환하기 전에 모든 백엔드 변경 사항이 기기와 동기화될 때까지 명시적으로 대기합니다.

  • 파일 공간 절약을 위한 Realm 실행 시 자동 압축

경고

프로덕션 애플리케이션은 클라이언트 재설정을 처리해야 합니다.

프로덕션 환경에서 사용되는 애플리케이션은 클라이언트 재설정 오류를 처리해야 합니다. 자세한 내용 은 Client Realm 재설정을 참조하세요.

SyncConfiguration config = new SyncConfiguration.Builder(app.currentUser(), PARTITION)
.allowQueriesOnUiThread(true)
.allowWritesOnUiThread(true)
.waitForInitialRemoteData(500, TimeUnit.MILLISECONDS)
.compactOnLaunch()
.build();
Realm.getInstanceAsync(config, new Realm.Callback() {
@Override
public void onSuccess(Realm realm) {
Log.v("EXAMPLE", "Successfully opened a realm.");
}
});
val config =
SyncConfiguration.Builder(app.currentUser(), PARTITION)
.allowQueriesOnUiThread(true)
.allowWritesOnUiThread(true)
.waitForInitialRemoteData(500, TimeUnit.MILLISECONDS)
.compactOnLaunch()
.build()
Realm.getInstanceAsync(config, object : Realm.Callback() {
override fun onSuccess(realm: Realm) {
Log.v("EXAMPLE", "Successfully opened a realm.")
}
})

중요

UI 스레드의 동기식 읽기 및 쓰기

기본적으로 비동기 트랜잭션 을 사용하여 애플리케이션의 UI 스레드에 있는 영역에 대한 읽기 또는 쓰기만 가능합니다. 즉, 동기 메서드의 사용을 명시적으로 허용하지 않는 한 Android 애플리케이션의 기본 스레드에서 이름이 Async (이)라는 단어로 끝나는 Realm 메서드만 사용할 수 있습니다.

이러한 제한은 애플리케이션 사용자를 위해 존재합니다. 즉, UI 스레드에서 읽기 및 쓰기 작업을 수행하면 UI 상호 작용이 응답하지 않거나 느려질 수 있으므로 일반적으로 이러한 작업을 비동기적으로 처리하거나 배경 스레드에서 처리하는 것이 가장 좋습니다. 하지만 애플리케이션이 UI 스레드에서 동기 Realm 읽기 또는 쓰기를 사용해야 하는 경우 다음 SyncConfiguration 옵션을 사용하여 동기 메서드 사용을 명시적으로 허용할 수 있습니다.

SyncConfiguration config = new SyncConfiguration.Builder(app.currentUser(), PARTITION)
.allowQueriesOnUiThread(true)
.allowWritesOnUiThread(true)
.build();
Realm.getInstanceAsync(config, new Realm.Callback() {
@Override
public void onSuccess(Realm realm) {
Log.v(
"EXAMPLE",
"Successfully opened a realm with reads and writes allowed on the UI thread."
);
}
});
val config = SyncConfiguration.Builder(app.currentUser(), PARTITION)
.allowQueriesOnUiThread(true)
.allowWritesOnUiThread(true)
.build()
Realm.getInstanceAsync(config, object : Realm.Callback() {
override fun onSuccess(realm: Realm) {
Log.v("EXAMPLE", "Successfully opened a realm with reads and writes allowed on the UI thread.")
}
})

동기화된 Realm을 열려면 SyncConfiguration 객체를 전달하여 getInstanceAsync() 를 호출합니다. 다음 코드는 SyncConfiguration 객체를 사용하여 생성된 특정 동기화 설정으로 영역을 생성하는 방법을 보여줍니다.

SyncConfiguration config = new SyncConfiguration.Builder(app.currentUser(), PARTITION)
.allowQueriesOnUiThread(true)
.allowWritesOnUiThread(true)
.build();
Realm.getInstanceAsync(config, new Realm.Callback() {
@Override
public void onSuccess(Realm realm) {
Log.v(
"EXAMPLE",
"Successfully opened a realm with reads and writes allowed on the UI thread."
);
}
});
val config = SyncConfiguration.Builder(app.currentUser(), PARTITION)
.allowQueriesOnUiThread(true)
.allowWritesOnUiThread(true)
.build()
Realm.getInstanceAsync(config, object : Realm.Callback() {
override fun onSuccess(realm: Realm) {
Log.v("EXAMPLE", "Successfully opened a realm with reads and writes allowed on the UI thread.")
}
})

위의 코드는 getInstanceAsync() 를 사용하여 비동기적 으로 Realm을 여는 방법을 보여줍니다. 백엔드에서 모든 데이터를 동기화하기 전에 열린 Realm을 반환하는 getInstance() 를 사용하여 Realm을 동기적으로 열 수도 있습니다. 그러나 이렇게 하면 원격 데이터를 다운로드하는 동안 일시적인 데이터 불일치가 발생할 수 있으므로 일반적으로 사용하지 않는 것이 좋습니다. waitForInitialRemoteData() 구성 옵션을 사용하여 SDK가 Realm을 열기 전에 원격 데이터를 가져오도록 강제하여 이러한 불일치를 방지할 수 있습니다.

파티션 값 은 동기화할 데이터의 하위 집합을 지정합니다. 이는 일반적으로 사용자 ID, 프로젝트 ID, 스토어 ID 또는 현재 사용자와 특히 관련이 있는 앱의 기타 카테고리 식별자입니다.

온라인 상태에서 동기화된 Realm을 열 때 사용하는 것과 정확히 동일한 구문으로 오프라인 상태에서도 동기화된 Realm을 열 수 있습니다. 모든 SDK가 이 패턴을 따르는 것은 아니므로 크로스 플랫폼 개발자는 각 SDK에 대한 설명서를 참조하여 자세한 내용을 확인해야 합니다.

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

  • Flexible Sync 를 사용하도록 SyncConfiguration.Builder 를 업데이트합니다. 여기에는 필요한 경우 partitionValue 를 제거하고 초기 구독 세트를 추가하는 작업이 포함됩니다.

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

  • 자동 Flexible Sync 구독을 제거합니다. SyncConfiguration.Builder 에 초기 구독을 추가하지 않은 경우 관련 구독을 수동으로 생성합니다.

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

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

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

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

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

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

돌아가기

백그라운드 동기화

다음

테스트 및 디버그