Docs Menu
Docs Home
/ /
Atlas Device SDK
/ /

Realm 구성 및 열기 - C++ SDK

이 페이지의 내용

  • Realm 파일
  • 보조 파일
  • 동기화된 Realms
  • 동기화 Realms과 비동기화 Realms 비교
  • 비동기화 Realm 열기
  • 기본 Realm 열기
  • 파일 경로에서 Realm 열기
  • 동기화된 Realm 열기
  • 동기화된 Realm 사용 시 사용자 지정 HTTP headers 설정
  • Realm에 모델의 하위 집합 제공
  • Realm 닫기

영역 은 Realm에서 데이터를 구성하는 데 사용되는 핵심 데이터 구조입니다. 영역은 애플리케이션에서 사용하는 Realm 객체라는 객체와 객체를 설명하는 추가 메타데이터의 모음입니다.

Realm 을 열 때 영역 를 지정해야 합니다. db_config 에는 다음과 같은 정보가 포함될 수 있습니다.

  • 기기에서 영역이 저장되는 선택적 경로

  • 영역이 managed 모델의 선택적 목록

  • 이벤트 루프를 사용자 지정해야 하는 경우 선택적 스케줄러

  • Realm Mobile Sync로 realm을 사용하려는 경우 sync_config

Realm 파일 경로, Realm Mobile Sync 구성 또는 기타 구성 세부 정보를 지정할 필요가 없는 경우 기본 db_config 생성자를 사용할 수 있습니다.

Realm 은 영역 에 있는 모든 객체 및 유형의 바이너리 인코딩 버전을 단일 .realm 파일 에 저장합니다. 파일 은 영역 을 열 때 정의할 수 있는 특정 경로 에 있습니다. 을(를) 사용하여 이러한 파일의 내용을 열고, 보고, 편집할 수 있습니다 .

SDK는 각 영역에 대해 추가 파일을 생성합니다.

  • 'realm' 접미사가 붙은 영역 파일(예: default.realm: 객체 데이터를 포함합니다.

  • 잠금 파일, "lock" 접미사(예: default.realm.lock: Realm에서 활발하게 사용 중인 데이터 버전을 추적합니다. 이렇게 하면 Realm이 클라이언트 애플리케이션에서 아직 사용 중인 저장 공간을 회수할 수 없습니다.

  • 메모 파일, 접미사 '메모'(예: default.realm.note: 스레드 간 및 프로세스 간 알림을 활성화합니다.

  • 관리 파일, 접미사 "관리"(예: default.realm.management: 내부 상태 관리입니다.

각각 로컬 데이터 복사본을 가진 여러 기기 간에 데이터를 자동으로 동기화하도록 영역을 구성할 수 있습니다. 동기화된 영역에는 sync_config 이(가) 필요하며 동기화 프로세스를 처리하기 위해 Atlas App Services 백엔드가 필요합니다.

애플리케이션은 오프라인 상태에서도 항상 로컬에서 동기화된 Realm 객체를 생성, 수정 및 삭제할 수 있습니다. 네트워크 연결이 가능할 때마다 Realm SDK는 애플리케이션 서버에 대한 연결을 열고 다른 클라이언트와 변경 사항을 동기화합니다. Atlas Device Sync 프로토콜 과 서버 측 운영 변환은 일부 변경 사항이 오프라인에서 발생했거나 순서가 잘못되었더라도 Realm의 완전히 동기화된 모든 인스턴스가 정확히 동일한 데이터를 볼 수 있도록 보장합니다.

동기화된 영역은 동기화되지 않은 로컬 영역과 다음과 같은 몇 가지가 다릅니다.

  • 동기화된 영역은 백엔드 App Services App과 변경 사항을 동기화하려고 시도하지만, 비동기화 영역은 동기화를 시도하지 않습니다.

  • 동기화된 영역은 인증된 사용자만 액세스할 수 있지만 동기화되지 않은 영역에는 사용자 또는 인증 개념이 없습니다.

  • 동기화된 영역을 사용하면 영역을 열기 전에 업데이트를 다운로드할 수 있습니다. 그러나 Realm을 열기 전에 변경 사항을 다운로드하도록 요구하려면 사용자가 온라인 상태여야 합니다. 동기화되지 않은 Realm은 항상 오프라인에서 사용할 수 있습니다.

동기화되지 않은 영역에서 동기화된 영역으로 또는 그 반대로 데이터를 복사할 수 있지만 동기화되지 않은 영역은 동기화할 수 없습니다.

기본 생성자를 사용하여 현재 디렉토리에서 영역을 열 수 있습니다. 또는 특정 파일 경로로 db_config 를 구성하여 특정 위치에서 영역을 열 수 있습니다.

선택적 경로를 지정하지 않고 영역을 열면 현재 디렉토리에서 기본 영역이 열립니다.

영역을 열 때 C++ SDK는 프로젝트에서 어떤 모델을 사용할 수 있는지 자동으로 추론할 수 있습니다. 비대칭 객체와 데이터를 단방향으로 동기화하기 위해 영역을 여는 경우가 아니라면 사용 가능한 모델을 수동으로 지정할 필요가 없습니다. 자세한 내용은 이 페이지의 동기화된 Realm 열기를 참조하세요.

auto config = realm::db_config();
auto realm = realm::db(std::move(config));

Android 앱 빌드

Realm C++ SDK를 사용하는 Android 앱을 빌드할 때는 db_config 생성자의 path 매개변수에 filesDir.path 를 전달해야 합니다. 자세한 내용 은 Android 앱 빌드를 참조하세요.

set_path() 을 사용하여 영역을 열 때 사용할 db_config 의 경로를 지정할 수 있습니다.

auto relative_realm_path_directory = "custom_path_directory/";
std::filesystem::create_directories(relative_realm_path_directory);
// Construct a path
std::filesystem::path path =
std::filesystem::current_path().append(relative_realm_path_directory);
// Add a name for the database file
path = path.append("employee_objects");
// Add the .realm extension
path = path.replace_extension("realm");
// Set the path on the config, and open the database at the path
auto config = realm::db_config();
config.set_path(path);
auto realmInstance = realm::db(std::move(config));

Android 앱 빌드

Realm C++ SDK를 사용하는 Android 앱을 빌드할 때는 db_config 생성자에서 path 매개변수로 filesDir.path 를 전달해야 합니다. 자세한 내용 은 Android 앱 빌드를 참조하세요.

기기 간에 데이터를 동기화하려면 Flexible Sync를 구성한 Atlas App Services 앱 이 있어야 합니다.

동기화된 영역을 열려면 다음을 수행합니다.

  1. Atlas App Services App에 연결합니다.

  2. 사용자를 인증합니다.

  3. 동기화 구성을 만듭니다.

  4. 구성과 동기화된 사용자의 영역을 엽니다.

// Initialize the App, authenticate a user, and open the database
auto appConfig = realm::App::configuration();
appConfig.app_id = APP_ID;
auto app = realm::App(appConfig);
auto user = app.login(realm::App::credentials::anonymous()).get();
auto syncConfig = user.flexible_sync_configuration();
auto syncedRealm = realm::db(syncConfig);

동기화된 영역을 열 때, 영역에서 managed 모델을 열기 함수의 템플릿 매개 변수 목록에 전달할 필요가 없습니다. 이는 더 이상 사용되지 않는 알파 API의 변경 사항입니다.

이 규칙의 유일한 예외는 동기화된 영역을 열어 asymmetric_object 유형을 동기화하는 것입니다. asymmetric_object 유형을 동기화하기 위해 동기화된 영역을 여는 경우 열기 함수에 대한 템플릿 매개변수 목록에서 객체를 명시적으로 지정해야 합니다. 자세한 내용 은 Atlas로 데이터 스트리밍 - C++ SDK를 참조하세요.

Android 앱 빌드

Realm C++ SDK를 사용하는 Android 앱을 빌드할 때는 db_config 생성자의 path 매개변수에 filesDir.path 를 전달해야 합니다. 자세한 내용 은 Android 앱 빌드를 참조하세요.

Realm Mobile Sync에서 사용자 지정 HTTP headers를 사용하려면 flexible_sync_configuration() 에서 헤더를 설정해야 합니다.

구성을 초기화한 후 set_custom_http_headers() 멤버 함수를 사용하여 사용자 지정 HTTP headers를 문자열 헤더 키와 값의 맵으로 설정합니다.

std::map<std::string, std::string> customHeaders;
customHeaders.emplace("CUSTOM_HEADER_NAME", "CUSTOM_HEADER_VALUE");
auto syncConfig = user.flexible_sync_configuration();
syncConfig.set_custom_http_headers(customHeaders);

이제 Realm Mobile Sync 네트워크 요청에 헤더를 사용할 수 있는 동기화된 영역입니다.

메모리 제약이 적은 상태에서 작동

일부 애플리케이션은 메모리 설치 공간에 엄격한 제약이 있습니다. 메모리가 부족한 환경에 맞게 영역 메모리 사용량을 최적화하려면 모델의 하위 집합으로 영역을 엽니다.

기본적으로 C++ SDK는 실행 파일에 객체 스키마 가 있는 모든 Realm 객체 유형을 데이터베이스 스키마에 자동으로 추가합니다.

하지만 영역에서 모델의 하위 집합만 managed 하려면 해당 모델을 realm::open() 함수의 템플릿 매개 변수 목록에 전달하여 지정할 수 있습니다.

auto config = realm::db_config();
auto realm = realm::open<realm::Dog>(std::move(config));

메모리 누수를 방지하려면 사용을 마친 데이터베이스를 닫습니다. 데이터베이스를 닫으면 나머지 객체가 모두 무효화됩니다. db::close() 을(를) 사용하여 데이터베이스를 닫습니다.

// Create a database configuration.
auto config = realm::db_config();
auto realm = realm::db(config);
// Use the database...
// ... later, close it.
realm.close();
// You can confirm that the database is closed if needed.
CHECK(realm.is_closed());
// Objects from the database become invalidated when you close the database.
CHECK(specificDog.is_invalidated());

돌아가기

Realm 파일