Docs Menu
Docs Home
/ /
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.defaultPath 글로벌 속성을 사용하여 기본 영역 경로에 액세스하고 변경할 수 있습니다

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

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

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

// 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],
});

참고

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

버전 10.14.0의 새로운 기능

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

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

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

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

  • 로컬 영역에서 동기화된 영역으로

  • 영역과 로컬 영역 동기화

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

참고

파티션 기반 동기화만 해당

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

참고

동일 유형 동기화만 가능

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

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

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

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

예시

로컬 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);

다음도 참조하세요.

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

realm.close();

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

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

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

네트워크 전송 계층에서 사용하는 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 파일