데이터 모델 매핑
이 페이지의 내용
이 페이지에는 Atlas Device Sync 에서 사용하는 Atlas App Services 스키마가 Atlas Device SDK에서 사용하는 SDK 객체 모델에 매핑되는 방법에 대한 정보가 포함되어 있습니다.
이러한 데이터 모델을 생성하는 방법을 알아보려면 다음 페이지를 참조하세요.
Atlas App Services 스키마에서 SDK 객체 모델을 생성하려면 SDK 객체 모델 생성을 참조하세요 .
Atlas Device SDK 클라이언트 코드에서 Atlas App Services 스키마를 생성하려면 SDK 객체 모델에서 Atlas App Services 스키마 생성을 참조하세요.
Device Sync가 이 두 데이터 모델을 사용하는 방법에 대해 자세히 알아보려면 동기화 데이터 모델 개요를 참조하세요.
데이터베이스, collection 및 객체
Realm Mobile Sync를 구성할 때 데이터를 저장할 데이터 소스를 지정합니다 . 이 데이터 소스에는 여러 데이터베이스가 포함될 수 있으며, 각 데이터베이스에는 여러 collection이 포함될 수 있습니다.
App Services 스키마 는 Realm 데이터베이스 객체 이름을 Realm Mobile Sync 데이터 소스의 데이터베이스 collection에 매핑합니다. App Services 스키마의 title
필드는 Realm 데이터베이스의 Realm 객체 유형 이름에 매핑됩니다. title
이름은 클라이언트 객체와 적절한 Atlas collection 간의 매핑을 결정하므로 이 이름은 동기화된 데이터 소스의 모든 스키마 중에서 고유해야 합니다.
title
는 collection 이름과 일치하지 않아도 됩니다.
예시
이름이 Pets
인 데이터베이스 가 있는 앱 을 생각해 보세요. 여기에는 Canine
및 Feline
와 같은 여러 컬렉션이 포함될 수 있습니다. Canine
컬렉션 의 App Services 스키마 는아래 예시 와 유사할 수 있으며, 여기서 스키마 의 title
필드 는 Dog
입니다. 그러면 Dog
이라는 Realm 데이터베이스 객체 가 Pets
데이터베이스 의 Canine
컬렉션 에 매핑됩니다.
동일한 cluster에 title
가 Dog
인 다른 스키마가 있을 수 없습니다. 예를 들어, title
이(가) Dog
인 객체를 동일한 cluster의 Debug
및 Test
데이터베이스에 동기화할 수 없습니다. 앱 개발 목적으로 동일한 객체를 다른 collection에 동기화하려면 개발용 cluster와 프로덕션용 cluster 등 서로 다른 데이터 소스를 사용해야 합니다.
개발 모드로 매핑
Realm Mobile Sync 구성에서 개발 모드를 사용 하도록 설정하면 App Services에서 동기화하는 Realm 데이터베이스 객체에 대한 collection과 스키마를 자동으로 만들 수 있습니다. 개발 모드를 활성화할 때 지정한 데이터베이스 에 해당 collection 생성됩니다.
개발 모드가 활성화되면 동기화는 Realm 데이터베이스 객체 유형의 이름과 일치하는 title
이(가) App Services 스키마에 있는 컬렉션을 찾습니다. 이 collection은 연결된 데이터 소스의 모든 데이터베이스에 있을 수 있습니다. 개발 모드를 구성할 때 추가하는 데이터베이스에 있을 필요는 없습니다.
연결된 데이터 소스의 App Services 스키마에 해당하는 title
이 없는 경우 App Services는 이 Realm 객체 유형에 대한 새 collection을 만듭니다. 이 collection은 개발 모드를 활성화할 때 지정한 데이터베이스에 생성됩니다. 컬렉션 이름은 객체의 유형과 일치하며, 해당 App Services 스키마에는 title
필드가 있으며, 이 필드의 값은 객체 유형의 이름입니다. 이렇게 하면 Realm 데이터베이스 객체와 새 collection 간에 매핑이 생성됩니다.
예시
Pets
이라는 이름의 데이터베이스가 있는 Atlas cluster를 생각해 보세요. It contains a Feline
collection with existing data.
애플리케이션 코드에서 새 Dog
객체를 정의합니다. 개발 모드를 활성화하고 Pets
데이터베이스를 새 Realm 객체 유형에 대한 collection을 생성할 데이터베이스로 지정합니다. 새 Dog
객체를 동기화하면 App Services는 Pets
데이터베이스에 Dog
컬렉션을 만들고 컬렉션에 대한 스키마를 만듭니다. 스키마에 있는 객체의 title
는 Dog
입니다.
나중에 애플리케이션 코드에 새 Person
객체를 추가한 다음 동기화하면 Atlas App Services는 Pets
데이터베이스에 이 Person
객체에 대한 새 컬렉션을 만듭니다. 다른 데이터베이스에서 Person
객체에 대한 컬렉션을 생성하려는 경우 다른 데이터베이스에서 Person
객체에 대한 스키마 정의 및 적용 을 수행할 수 있습니다. 또는 개발 모드를 비활성화했다가 다시 활성화하고 새 컬렉션을 생성할 다른 데이터베이스를 선택할 수 있습니다.
지도 제작
유형 이름
title
필드에는 스키마가 나타내는 객체 유형의 이름이 포함되어 있습니다. 이는 Atlas Device SDK의 클래스 또는 스키마 이름에 해당합니다. 유형 이름은 동기화된 클러스터의 모든 스키마 중에서 고유해야 하지만 그렇지 않은 경우 임의적이며 컬렉션 이름과 일치할 필요가 없습니다.
기존의 접근 방식은 각 객체 유형의 이름을 "개" 또는 " 사람"과 같이 단수 명사로 지정하는 것입니다. 개발 모드에서 또는 기존 문서를 샘플링하여 생성된 스키마는 이 규칙을 사용합니다.
참고
Atlas Device Sync로 작업하려면 유형 이름이 UTF-8 57자를 초과할 수 없습니다.
속성 유형
특정 속성에 대해 다음과 같은 제약 조건을 구성할 수 있습니다.
Parameter | 유형 | 설명 |
---|---|---|
유형 | 문자열 | SDK 객체 모델의 모든 속성에는 강력하게 정의된 데이터 유형이 있습니다. 속성의 유형은 기본 데이터 유형일 수도 있고 동일한 SDK 객체 모델에 정의된 객체 유형일 수도 있습니다. 또한 유형은 속성에 단일 값이 포함되어 있는지 또는 값 목록이 포함되어 있는지 여부를 지정합니다. Realm 데이터베이스는 다음과 같은 속성 유형을 지원합니다.
지원되는 데이터 유형에 대한 자세한 내용은 스키마 유형을 참조하세요. |
옵션 | 부울 | 선택적 속성은 null 값을 포함하거나 객체에서 완전히 생략될 수 있습니다. 기본적으로 모든 속성은 명시적으로 필수로 표시하지 않는 한 선택 사항입니다. |
기본값 | 부울 | 클라이언트 애플리케이션이 정의된 속성에 대한 값이 없는 새 객체를 생성하는 경우 해당 객체는 대신 기본값을 사용합니다. 필수 속성이 포함되지 않은 스키마 하위 집합을 사용하여 클라이언트에서 데이터베이스를 열면 서버는 필수 속성 값을 자동으로 0 또는 빈 기본값으로 채웁니다. 필수 필드 값이 누락된 객체를 생성하려고 하면 해당 객체는 유효성 검사에 실패하고 영역에 유지되지 않습니다. |
인덱싱됨 | 부울 | 속성 인덱스는 쓰기 작업에 대한 추가 오버헤드를 희생하는 대신 특정 읽기 작업의 속도를 크게 향상시킵니다. 인덱스는 속성 값을 기준으로 객체를 쿼리하는 등 동등성 비교에 특히 유용합니다. 그러나 인덱스는 추가 스토리지를 소비합니다. |
데이터 유형에 대한 SDK별 세부 정보는 다음을 참조하세요.
배열 속성
SDK 객체 모델과 Atlas App Services 스키마는 모두 배열 속성을 지원합니다.
배열 속성에 대한 SDK 관련 세부 정보는 다음을 참조하세요.
Atlas App Services 스키마에서 배열 속성을 모델링하는 방법에 대한 자세한 내용은 BSON types - Array 를 참조하세요. Atlas App Services 스키마는 최소 및 최대 항목 수 지정과 같이 SDK 객체 모델이 지원하지 않는 특정 제약 조건을 지원합니다.
혼합 속성
SDK 객체 모델과 Atlas App Services 스키마는 모두 혼합 유형 속성을 지원합니다.
혼합 필드는 지원되는 모든 데이터 유형을 포함할 수 있으며, 사전 정의된 구조 없이 기능적으로 객체 또는 문서 역할을 합니다.
Atlas App Services 스키마에서 혼합 속성을 모델링하는 방법에 대한 자세한 내용은 혼합 - 스키마 유형을 참조하세요.
혼합 속성의 컬렉션
참고
28, 20245월 이후에 생성된 앱
2024년 5월 28일 이후에 생성된 App Services Apps 는 혼합 데이터 속성 내에 혼합 데이터 컬렉션(배열 및 사전)을 저장할 수 있습니다. 다른 컬렉션 내에 컬렉션을 중첩할 수 있으므로 엄격한 데이터 모델을 정의하지 않고도 JSON 또는 MongoDB 문서와 같은 복잡한 데이터 구조를 저장할 수 있습니다.
Atlas Device SDK 와 함께 이 기능 을 사용하려면 다음 최소 SDK 버전 중 하나를 사용해야 합니다.
C++ SDK: 버전 미정
Flutter SDK: v2.0.0 이상
Kotlin SDK: v2.0.0 이상
.NET SDK: v12.2.0 이상
Node.js SDK: v12.9.0 이상
React Native SDK: v12.9.0 이상
Swift SDK: v10.51.0 이상
이 기능은 Java SDK에서 지원되지 않습니다 .
지원되는 SDK를 사용하여 기존 앱에서 이 기능을 활성화하는 방법에 대해 자세히 알아보려면 지원팀에 문의하세요.
혼합 속성의 컬렉션(배열 또는 사전)을 활용하여 사전 정의된 스키마에 맞지 않는 데이터(예: 가변 JSON 데이터 또는 복잡한 MongoDB 문서)를 저장할 수 있습니다. 혼합 데이터 컬렉션에는 다른 혼합 데이터 컬렉션이 포함될 수 있으므로 데이터를 복잡한 구조에 중첩할 수 있습니다. 예제는 이 페이지의 예제 문서: 혼합 데이터의 중첩 컬렉션을 참조하세요.
Atlas App Services 스키마 또는 SDK 객체 모델 스키마에서 혼합 데이터 유형으로 컬렉션을 저장할 수 있습니다.
혼합 데이터 유형에 대한 SDK 관련 세부 정보는 다음을 참조하세요.
참고
새 Java SDK 앱은 RealmAny를 사용할 수 없음
Java SDK 를 사용하는 새 App Services 앱은 데이터 모델을 RealmAny
유형의 속성과 동기화할 수 없습니다. 앱 에서 Device Sync 와 혼합된 데이터 유형을 사용하려면 코틀린 SDK (Kotlin SDK) 를 사용하세요.
내장된 객체
포함된 객체는 상위 객체 내에 중첩된 데이터로 포함됩니다. 포함된 객체는 상위 객체의 라이프사이클을 상속합니다. 독립적인 데이터베이스 객체로 존재할 수 없습니다.
포함된 객체에 대한 SDK 관련 세부 정보는 다음을 참조하세요.
Atlas App Services 스키마에서 대일 관계를 모델링하는 방법에 대한 자세한 내용은 내장된 객체 관계를 참조하세요.
집합 (Sets)
SDK 객체 모델과 Atlas App Services 스키마는 모두 세트 데이터 유형을 지원합니다. 세트는 고유한 값의 컬렉션입니다.
세트에 대한 SDK 관련 세부 정보는 다음을 참조하세요.
Atlas App Services 스키마의 모델링 세트에 대한 자세한 내용은 세트를 참조하세요 .
딕셔너리 (Dictionaries)
SDK 객체 모델과 Atlas App Services 스키마는 모두 사전 데이터 유형을 지원합니다. 세트는 고유한 값의 컬렉션입니다. 사전은 지정된 유형의 값과 쌍을 이루는 동적이고 고유한 string 키의 컬렉션입니다. 사전은 기능적으로 사전 정의된 필드 이름이 없는 객체 또는 문서입니다.
딕셔너리에 대한 SDK 관련 세부 정보는 다음을 참조하세요.
Atlas App Services 스키마에서 사전을 모델링하는 방법에 대한 자세한 내용은 사전을 참조하세요 .
관계
SDK 객체 모델은 다음과 같은 유형의 관계를 지원합니다.
대일 관계: 대일 관계는 객체가 특정 방식으로 하나 이상의 다른 객체와 관련되지 않음을 의미합니다.
대다 관계: 대다 관계는 객체가 특정 방식으로 여러 객체와 관련되어 있음을 의미합니다.
역관계: 역 관계는 정의된 대일 또는 대다 관계에서 해당 객체를 참조하는 다른 모든 객체에 객체를 다시 연결합니다.
Atlas App Services 스키마는 대일 및 대다 관계를 지원합니다. Atlas App Services 스키마는 역관계를 지원 하지 않습니다 .
관계에 대한 SDK 관련 세부 정보는 다음을 참조하세요.
Atlas App Services 스키마의 관계 모델링에 대한 자세한 내용은 관계를 참조하세요 .
지리 공간 데이터
지리 공간적 데이터는 지구 표면의 점 및 기타 데이터를 설명합니다. Atlas App Services에는 기본 제공 지리 공간적 유형이 없습니다. 대신 표준 GeoJSON 객체를 사용하여 지리적 데이터를 모델링합니다. 지리 공간적 데이터에 대한 자세한 내용은 스키마 유형을 참조하세요.
지리 공간적 데이터에 대한 SDK 관련 세부 정보는 다음을 참조하세요.
데이터 모델 매핑 예시
이 예에서는 Realm Mobile Sync를 사용하여 Dog
를 모델링하는 방법을 보여 줍니다.
App Services 스키마
이 Atlas App Services 스키마는 Device Sync 에서 사용하는 Dog
데이터 모델을 생성합니다.
{ "title": "Dog", "bsonType": "object", "required": [ "_id", "name" ], "properties": { "_id": { "bsonType": "objectId" }, "name": { "bsonType": "string" }, "age": { "bsonType": "int" } "breed": { "bsonType": "string" } "details": { "bsonType": "mixed" } } }
SDK 객체 모델
다음 코드 예제에서는 각 Atlas Device SDK에서 Dog
SDK 객체 모델을 만듭니다.
import Foundation import RealmSwift class Dog: Object { true) var _id: ObjectId (primaryKey: var age: Int? var breed: String? var name: String = "" var details: AnyRealmValue }
import io.realm.RealmObject; import org.bson.types.ObjectId; public class Dog extends RealmObject { private ObjectId _id; private Integer age; private String breed; private String name; private RealmAny details; // Standard getters & setters public ObjectId getId() { return _id; } public void setId(ObjectId _id) { this._id = _id; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getBreed() { return breed; } public void setBreed(String breed) { this.breed = breed; } public String getName() { return name; } public void setName(String name) { this.name = name; } public RealmAny getDetails() { return details; } public void setDetails(RealmAny details) { this.details = details; } }
import io.realm.RealmObject; import org.bson.types.ObjectId; open class Dog : RealmObject { var _id: ObjectId = ObjectId(), var age: Int? = null, var breed: String? = null, var name: String = "" var details: RealmValue? = null }
import 'package:realm/realm.dart'; part 'realm_models.realm.dart'; ()class _Dog { () '_id') ( late ObjectId id; int? age; String? breed; late String name; late RealmValue details; }
using System; using System.Collections.Generic; using Realms; using MongoDB.Bson; public class Dog : RealmObject { [ ] [ ] public ObjectId Id { get; set; } [ ] public int? Age { get; set; } [ ] public string Breed { get; set; } [ ] [ ] public string Name { get; set; } [ ] public RealmValue Details { get; set; } }
export const DogSchema = { name: 'Dog', properties: { _id: 'objectId', age: 'int?', breed: 'string?', name: 'string', }, primaryKey: '_id', details: 'mixed', };
export const DogSchema = { class Dog extends Realm.Object<Dog> { _id!: Realm.BSON.ObjectId; age?: number; breed?: string; name!: string; details?: Realm.Mixed; static schema: ObjectSchema = { name: 'Dog', properties: { _id: 'objectId', age: 'int?', breed: 'string?', name: 'string', details: 'mixed?', }, primaryKey: '_id', };
Atlas의 데이터
Dog
데이터 모델에 Device Sync를 사용하는 애플리케이션은 이전 스키마를 기반으로 Atlas에서 MongoDB 문서를 생성합니다.
문서 예시
{ "_id": ObjectId('616f44305a205add93ff1081'), "age": 8, "breed": "Golden Retriever", "name": "Jasper", "details": null }
예시 문서: 혼합 데이터의 중첩 컬렉션
혼합 데이터의 중첩 컬렉션은 혼합 데이터 유형으로 저장된 사전 또는 배열입니다. 이는 다음 예시와 유사할 수 있습니다.
{ "_id": ObjectId('616f44305a205add93ff1081'), "age": 8, "breed": "Golden Retriever", "name": "Jasper", "details": { "vaccinations": ["rabies", "distemper"], "weight": 65.5, "isNeutered": true, "vetVisits": [ { "date": 2002-08-18T04:56:07.000+00:00, "reason": "annual checkup" }, { "date": 2003-08-18T04:56:07.000+00:00, "reason": "annual checkup" } ] } }
참고
28, 20245월 이후에 생성된 앱
2024년 5월 28일 이후에 생성된 App Services Apps 는 혼합 데이터 속성 내에 혼합 데이터 컬렉션(배열 및 사전)을 저장할 수 있습니다. 다른 컬렉션 내에 컬렉션을 중첩할 수 있으므로 엄격한 데이터 모델을 정의하지 않고도 JSON 또는 MongoDB 문서와 같은 복잡한 데이터 구조를 저장할 수 있습니다.
Atlas Device SDK 와 함께 이 기능 을 사용하려면 다음 최소 SDK 버전 중 하나를 사용해야 합니다.
C++ SDK: 버전 미정
Flutter SDK: v2.0.0 이상
Kotlin SDK: v2.0.0 이상
.NET SDK: v12.2.0 이상
Node.js SDK: v12.9.0 이상
React Native SDK: v12.9.0 이상
Swift SDK: v10.51.0 이상
이 기능은 Java SDK에서 지원되지 않습니다 .
지원되는 SDK를 사용하여 기존 앱에서 이 기능을 활성화하는 방법에 대해 자세히 알아보려면 지원팀에 문의하세요.