동기화된 Realm에 쓰기 - .NET SDK
이 페이지의 내용
개요
Flexible Sync를 사용하여 동기화된 영역에 데이터를 쓸 때는 로컬 영역에 쓸 때와 동일한 API를 사용합니다. 그러나 행동에는 유의해야 할 몇 가지 차이점이 있습니다.
동기화된 영역에 쓰는 경우 쓰기 작업이 다음 두 가지 모두 와 일치해야 합니다.
동기화 구독 쿼리
App Services App의 권한
구독 쿼리 및 권한 표현식 과 일치하지 않는 데이터를 쓰기 (write) 하면 쓰기 (write) 가 되돌려지고 CompensatingWriteException 이 발생합니다. App Services 로그 에서 쓰기 (write) 가 거부된 이유에 대한 자세한 내용을 확인할 수 있습니다.
쓰기 보상
클라이언트가 객체에 '불법적인' 쓰기를 시도하면 다음과 같은 상황이 발생합니다.
클라이언트 영역에는 '불법적인' 쓰기에 대한 개념이 없기 때문에 영역이 App Services 백 엔드로 변경 집합을 해결할 때까지 처음에는 쓰기가 성공합니다.
동기화되면 서버는 규칙과 권한을 적용합니다. 서버는 사용자에게 쓰기를 수행할 수 있는 권한 부여가 없다고 판단합니다.
서버는 "보상 쓰기(compensating write)"라고 하는 되돌리기 작업을 클라이언트에 다시 보냅니다.
클라이언트의 Realm은 잘못된 쓰기 작업을 되돌리고
CompensatingWriteException
을(를) 발생시킵니다.
불법적인 쓰기와 해당 보상 쓰기 사이의 객체에 대한 모든 클라이언트 사이드 쓰기는 손실됩니다.
실제로 이는 객체가 영역에 기록된 후 서버가 보상 쓰기를 클라이언트에 다시 보낸 후에 사라지는 것처럼 보일 수 있습니다.
CompensatingWriteException
가 발생하면 CompensatingWriteInfo 객체의 열거 가능이 포함됩니다. 각 CompensatingWriteInfo
객체에는 객체 유형, 해당 프라이머리 키, 서버가 보상 쓰기를 수행한 이유를 설명하는 속성이 포함되어 있습니다.
동기화할 데이터 확인
동기화된 영역에 쓸 수 있는 데이터를 제어하는 규칙은 영역을 열 때 사용하는 Realm Mobile Sync 구성, App Services 권한 및 Flexible Sync 구독 쿼리의 교차점입니다.
이러한 구성 요소가 함께 작동하는 방식에 대한 예를 살펴보겠습니다.
Realm Mobile Sync 구성
Realm Mobile Sync는 다음과 같은 쿼리 가능 필드로 구성됩니다.
_id
(항상 포함됨)ownerId
App Services 권한
App Services App에는 사용자가 자신의 데이터만 읽고 쓸 수 있도록 구성된 권한이 있습니다.
{ "name": "owner-read-write", "apply_when": {}, "document_filters": { "read": { "ownerId": "%%user.id" }, "write": { "ownerId": "%%user.id" } }, "read": true, "write": true }
Flexible Sync 구독
클라이언트의 flexible sync 구독에는 객체에 Status
값이 'completed'이어야 한다고 명시되어 있습니다.
realm.Subscriptions.Update(() => { var completedItemsQuery = realm .All<MyTask>() .Where(i => i.Status == "completed"); realm.Subscriptions .Add(completedItemsQuery, new SubscriptionOptions() { Name = "completedItems" }); });
결과: 어떤 데이터가 동기화되나요?
구독 쿼리와 권한의 조합은 동기화된 영역이 다음과 같은 객체만 동기화한다는 것을 의미합니다.
ownerId
는 로그인한 사용자의user.id
와 일치합니다(권한에 있음).Status
속성의 값이 'completed'입니다(구독 쿼리에서).
ownerId
이 로그인한 사용자의 user.id
와 일치하지 않거나 Status
속성의 값이 'completed'인 Atlas collection 객체는 이 영역에 동기화할 수 없습니다. 이러한 객체를 작성하려고 하면 CompensatingWriteException
가 발생합니다.
자세한 내용은
권한 거부 오류, 쓰기 오류 보상 및 기타 Device Sync 오류 유형에 대해 자세히 알아보려면 Atlas App Services 문서에서 동기화 오류 를 참조하세요.
앱의 권한을 구성하는 방법에 대해 자세히 알아보려면 Atlas App Services 문서에서 역할 기반 권한 및 Device Sync 권한 가이드 를 참조하세요.