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

Realm 구성, 열기 및 닫기 - Node.js SDK

이 페이지의 내용

  • Realm 열기
  • 스키마를 제공하지 않고 Realm에 액세스하기
  • In-Memory Realm 열기
  • 데이터 복사 및 새 Realm 열기
  • Realm 닫기
  • HTTP 프록시 사용
  • 요구 사항:
  • 제한 사항
  • 프록시로 가져오기 설치
  • HTTPS_PROXY 설정 및 스크립트 실행하기

로컬(동기화되지 않은) Realm을 열려면 Realm.Configuration 객체를 비동기 메서드 Realm.open()에 전달합니다.

참고

기본 Realm 경로에 액세스하기

Configuration 객체에 path 속성을 지정하지 않으면 SDK는 기본 경로에 Realm을 생성합니다. Realm.defaultPath 글로벌 속성을 사용하여 기본 Realm 경로에 액세스하고 변경할 수 있습니다

// Open a local realm file with a predefined Car object model
const realm = await Realm.open({
schema: [Car],
});

기기에서 Realm을 생성한 후 동일한 Realm에 액세스할 때 new Realm()을(를) 호출하여 스키마를 생략할 수 있습니다. SDK는 Realm.defaultPath에 있는 기존 Realm 파일에서 Realm의 스키마를 도출합니다.

스키마를 제공하지 않고 Realm에 액세스하는 것은 로컬 Realm에서만 작동합니다. 동기화된 Realm을 사용할 때는 항상 스키마를 전달해야 합니다.

// Open the Realm with a schema
const realm = new Realm({ schema: [Car] });
realm.close();
// Reopen it without a schema
const reopenedRealm = new Realm();

파일에 기록되지 않고 메모리에서만 실행되는 영역을 생성하려면 Realm.Configuration 객체에 inMemory: true을(를) 추가합니다:

const realm = await Realm.open({
inMemory: true,
schema: [Car],
});

참고

인메모리 Realm은 메모리가 부족한 경우 디스크 공간을 사용할 수 있지만 Realm을 닫으면 인메모리 Realm에서 생성된 파일이 삭제됩니다.

버전 10.14.0의 새로운 기능

기존 영역의 데이터를 다른 구성 옵션이 있는 새 영역으로 복사하려면 새 구성에 Realm.writeCopyTo() 함수를 전달합니다. 메서드를 사용하여 특정 세그먼트의 객체를 조회하기 위해 컬렉션을 필터링합니다.

새 Realm 구성에서 path을(를) 지정 해야 합니다.

복사된 Realm을 이미 존재하는 Realm 파일에 작성하는 경우 데이터는 객체별로 기록됩니다. 복사 작업은 지정된 기본 키에 대한 객체가 이미 있는 경우 객체를 대체합니다. 복사하는 Realm과 쓰는 Realm의 스키마가 호환되어야 복사 작업이 성공할 수 있습니다. 두 구성의 스키마에 있는 객체만 복사됩니다.

구성 변경에는 SyncConfiguration에 대한 수정이 포함될 수 있습니다.

  • 로컬 Realm에서 동기화된 Realm으로

  • Realm과 로컬 Realm 동기화

  • 다른 사용자의 동기화된 Realm에서 동기화된 Realm으로

참고

파티션 기반 동기화만 해당

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

참고

동일 유형 동기화만 가능

이 방법은 다른 파티션 기반 동기화 사용자를 위한 파티션 기반 동기화 구성 복사 또는 다른 Flexible Sync 사용자를 위한 Flexible Sync 구성 복사만 지원합니다. 이 방법을 사용하여 파티션 기반 동기화 Realm과 Flexible Sync Realm 간에 또는 그 반대로 변환할 수 없습니다.

구성 변경에는 ConfigurationencryptionKey 속성에 대한 변경도 포함될 수 있습니다.

  • 암호화된 Realm에서 암호화되지 않은 Realm으로의 전환

  • 암호화되지 않은 Realm에서 암호화된 Realm으로의 전환

예제

로컬 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으로 열거나 암호화되지 않은 동기화 Realm을 암호화된 동기화 Realm으로 열 수 있습니다.

예제

동기화된 암호화 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);

다음도 참조하세요.

메모리 유출를 방지하려면 Realm 인스턴스 사용이 완료되면 close() 메서드를 호출하는 것이 중요합니다.

realm.close();

Realm Node.js SDK는 HTTP 프록시 뒤에서 실행하는 것을 제한적으로 지원합니다.

  • Realm Node.js SDK v10.3.0 이상.

  • NPM CLI v6.9.0 이상이 필요합니다.

  • fetch-with-proxy 패키지를 수동으로 설치해야 합니다.

  • 클라이언트에서 프록시 서버로의 HTTPS 연결은 지원되지 않습니다. HTTPS_PROXY에 지정된 URL은 http://(으)로시작해야 합니다.

  • HTTPS_PROXY 환경 변수를 설정해야 합니다. 프록시는 런타임 또는 앱별로 설정할 수 없습니다.

네트워크 전송 계층에서 사용하는 node-fetch 패키지를 전환하려면 수동 단계가 필요합니다.

Realm Node.js SDK를 설치한 후 다음 명령을 실행하여 네트워크 전송 패키지에 다른 패키지를 설치합니다.

npm install node-fetch@npm:fetch-with-proxy --prefix node_modules/realm-network-transport

HTTP 프록시를 통해 Realm JS의 모든 요청을 라우팅하면서 임의의 스크립트 파일을 실행할 수 있습니다.

Unix 시스템에서는 명령 앞에 환경 변수를 할당하는 접두사를 붙일 수 있습니다.

HTTPS_PROXY=http://127.0.0.1:3128 node index.js

돌아가기

Realm 파일

다음

Realm 파일 크기 줄이기