카우치베이스 모바일 는 다양한 규모와 복잡성을 가진 광범위한 오프라인 우선 사용 사례를 지원합니다. 이전 post에서 앱 내 임베디드 NoSQL 데이터 저장소로 Couchbase Lite를 사용하는 일반적인 패턴에 대해 설명한 바 있습니다. 이러한 패턴은 로컬 데이터 저장소에 중점을 두었습니다. 이 블로그 게시물에서는 데이터 동기화와 관련된 몇 가지 일반적인 패턴과 모범 사례에 대해 설명합니다. 동기화 게이트웨이. 이 게시물에서는 Couchbase Mobile의 기본 사항을 잘 알고 있다고 가정합니다. 입문서가 필요한 경우 다음 문서를 참조하세요. 카우치베이스 라이트 그리고 동기화 게이트웨이.
패턴 1: 앱이 백그라운드에 있는 동안 데이터 최신 동기화 유지

모바일 앱의 백그라운드 지원은 플랫폼에 따라 크게 다릅니다. 실제로 Android와 같은 특정 플랫폼에서는 '백그라운드 앱'의 개념이 매우 모호하고 복잡합니다. 따라서 앱이 백그라운드에 있는 동안 데이터를 동기화하는 방법은 플랫폼에 따라 크게 달라집니다. 카우치베이스 라이트가 앱 라이프사이클에 어떻게 반응하는지에 대한 논의는 다음에서 확인할 수 있습니다. iOS, Android 그리고 Windows 문서에서 확인할 수 있습니다.
- 사용 사례
앱을 사용하지 않을 때(또는 포그라운드에서) 데이터를 최신 상태로 유지하면 다음 실행 시 시작 시간을 단축하여 최종 사용자 경험을 개선할 수 있습니다.
- 접근 방식
- 앱이 백그라운드에서 실행되도록 허용된다는 보장은 없다는 점에 유의하세요. 이는 일반적으로 시스템 수준 또는 사용자 수준에서 결정됩니다.
- 앱이 백그라운드 동기화를 처리하는 방식은 플랫폼에 따라 다릅니다.
- 일반적으로 가능하면 앱이 적절한 앱 수명 주기 이벤트에 반응하고 백그라운드로 전환하기 전에 리플리케이터를 닫는 것이 좋습니다.
- iOS
- 앱이 백그라운드로 푸시되면 연속 복제가 오프라인 모드로 전환됩니다.
- 사용 Apple 푸시 알림 서비스(APNS) 를 보내려면 자동 알림 을 눌러 백그라운드에서 앱을 깨우거나 백그라운드 앱 새로 고침 를 사용하여 시스템이 기회주의적으로 앱을 깨우도록 할 수 있습니다.
- 앱이 백그라운드에서 깨어날 때 원샷 복제를 수행하여 데이터를 동기화합니다.
- iOS의 백그라운드 지원에 대한 자세한 내용은 이 문서에서 확인하세요. 블로그 게시물.
- Android
- 앱이 백그라운드에서 작업을 실행해야 하는 경우 사용할 수 있는 몇 가지 옵션이 있습니다.
- 사용 포그라운드 서비스 백그라운드에서 장기간 실행되는 복제를 위한
- 사용 작업 관리자 을 사용하여 백그라운드에서 비동기적으로 실행되도록 원샷 복제를 예약하거나 원격 파이어베이스 클라우드 메시징(FCM) 를 사용하여 원샷 복제를 실행하는 작업 요청을 시작합니다.
- 앱이 백그라운드에서 작업을 실행해야 하는 경우 사용할 수 있는 몇 가지 옵션이 있습니다.
- UWP
- 앱이 백그라운드로 푸시될 때 연속 복제는 오프라인 모드로 전환되지 않습니다. 그러나 앱이 백그라운드로 전환될 때 리플리케이터를 닫는 것이 좋습니다.
- 사용 원시 알림 를 통해 전송 Windows 푸시 알림 서비스(WPNS) 을 눌러 백그라운드에서 앱을 깨우세요.
- 앱이 백그라운드에서 깨어날 때 백그라운드 작업을 예약하여 데이터를 동기화하기 위한 원샷 복제를 수행합니다.
패턴 2: 푸시 후 퍼지

카우치베이스 라이트는 다음을 통해 앱이 문서 또는 문서 집합의 복제 상태에 대한 알림을 받을 수 있는 기능을 지원합니다. 복제 이벤트 기능을 지원합니다. 앱은 이 기능을 활용하여 문서 삭제와 같은 상태에 따라 문서에 적절한 조치를 취할 수 있습니다.
- 사용 사례
거버넌스 규정 준수 또는 로컬 데이터베이스의 부피를 줄이기 위해 서버로 동기화된 후 로컬 클라이언트 저장소에서 문서를 제거하는 것이 바람직할 수 있습니다.
- 접근 방식
패턴 3: 연결이 끊긴 클라이언트에서 서버 측 문서 수명 적용하기

카우치베이스 라이트는 앱이 다음을 통해 로컬 문서에 만료일을 설정할 수 있는 기능을 지원합니다. 만료 날짜 기능을 사용할 수 있습니다. 앱은 이 기능을 활용하여 서버 연결 여부와 관계없이 Couchbase Lite에서 문서를 로컬로 만료할 수 있습니다.
- 사용 사례
서버에서 생성된 문서는 시스템(클라이언트 및 서버)에서 문서를 삭제해야 하는 시기를 지정하는 TTL 또는 만료일과 연결될 수 있습니다. 네트워크에 연결되어 있으면 서버 측에서 삭제된 문서는 클라이언트 측으로 동기화되어 클라이언트 측에서도 삭제됩니다. 그러나 서버에서 문서가 만료될 때 클라이언트는 오프라인 상태일 가능성이 높으므로 이러한 문서를 적시에 클라이언트에서 제거하는 것이 중요할 수 있습니다.
- 접근 방식
- 문서가 만료되는 UTC 시간을 지정하는 사용자 정의 속성을 포함하도록 문서를 모델링하세요. 이를 유효기간.
- 등록하기 복제 이벤트 클라이언트 리플리케이터의 옵저버
- 수신 시
Pull문서에서 이벤트를 발생시키려면 유효기간 값을 사용하여 문서에 TTL을 설정하려면 setExpirationDate() API - 클라이언트에서 문서가 만료되면 네트워크 연결 여부와 관계없이 클라이언트에서 문서가 자동으로 삭제됩니다. 삭제된 문서는 동기화되지 않습니다.
- 서버 측에서는 문서를 독립적으로 제거할 수 있습니다.
- 주의 : 만료일(에 정의된 대로 유효기간 속성)이 업데이트되면 클라이언트가 오프라인 상태에서 이 변경 사항을 클라이언트에게 알리지 않습니다. 따라서 클라이언트가 오프라인 상태일 때 문서가 조기에 삭제될 수 있습니다. 따라서 이 접근 방식은 문서 생성 후 문서의 수명이 변경되지 않는 한 안전합니다. 이러한 경우를 처리하는 다른 접근 방식에 대해 논의하겠습니다.
패턴 4: 서버에 동기화되는 문서 및 동기화 시기 제어하기

카우치베이스 라이트는 앱이 세분화된 설정 기능을 지원합니다. 필터 를 설정하여 서버로 푸시되는 문서를 결정할 수 있습니다. 이 기능을 활용하여 서버에 동기화되는 문서와 시기를 제어할 수 있습니다.
- 사용 사례
이전에는 블로그에서 로컬 전용 데이터를 보관하기 위해 데이터베이스의 별도 인스턴스를 사용하는 방법에 대해 설명했습니다. 이 패턴은 엄격한 데이터 분리가 필요하고 교차 데이터베이스 조인 쿼리가 필요하지 않은 경우에 적합하지만, 다음과 같은 세분화된 제어가 필요한 사용 사례도 있습니다. 언제 로 설정하면 로컬 변경 내용이 동기화됩니다. 이 패턴을 사전 구축된 데이터베이스 패턴의 대안으로 사용하여 문서가 로컬 전용(즉, 동기화되지 않음)이 되도록 강제할 수도 있습니다.
- 접근 방식
- 사용자 정의된 "status" 속성을 사용하여 비즈니스 워크플로를 제어할 수 있습니다. 예를 들어, 다음과 같은 값을 사용합니다. "진행 중" 로 설정하여 변경 사항을 동기화할 준비가 되지 않았음을 나타내고 상태 값은 "committed" 변경 내용을 푸시업해야 하는 경우 문서를 로컬 전용으로 만들어야 하는 경우에는 사용자 정의된 "범위" 속성의 값은 "local" 를 사용하여 문서를 동기화하지 않음을 나타냅니다.
- 적합한 구성 복제 필터 함수를 사용하세요. 필터는 문서 속성을 검사하여(위에 정의된 대로) 문서를 동기화해야 하는지 여부를 결정해야 합니다.
- 푸시할 준비가 된 변경 사항이 있을 때마다 Couchbase Lite 리플리케이터에서 필터 기능이 적용되고 필터 기준을 충족하는 경우에만 문서가 동기화됩니다.
패턴 5: 클라이언트에 동기화된 초기 문서 세트의 우선순위 제어하기

동기화 게이트웨이 채널 앱이 유형, 목적, 액세스 제어 권한 등을 기준으로 데이터를 분리할 수 있도록 허용합니다. 이를 활용하여 우선순위에 따라 데이터를 분리할 수 있습니다.
- 사용 사례
클라이언트가 수신한 문서의 우선순위를 지정하는 기능을 사용하면 클라이언트는 나머지 문서가 동기화될 때까지 기다릴 필요 없이 가장 관련성이 높은 문서 변경사항을 가져오자마자 바로 시작할 수 있습니다. 나머지 우선순위가 낮은 문서 변경사항은 나중에 풀다운됩니다. 이렇게 하면 초기 시작 시 앱 응답 시간이 단축됩니다.
- 접근 방식
- 우선순위에 따라 문서를 다른 채널에 할당하세요. 예를 들어 우선순위가 '낮음', '중간' 또는 '높음'인 채널에 문서를 할당할 수 있습니다.
- 클라이언트 측에서는 초기 실행 시 우선 순위가 가장 높은 채널의 원샷 풀 리플리케이션을 수행합니다. 채널 필터를 사용하세요. 채널의 문서 동기화가 완료되면 완료를 누르면 앱이 나머지 채널에 대한 다른 복제를 시작할 수 있습니다.
- 우선순위가 가장 높은 채널에 대해 연속 리플리케이터를 설정하고 나머지 채널은 원샷 리플리케이션을 사용하여 필요할 때만 가져올 수도 있습니다. 이렇게 하면 우선순위가 가장 높은 채널이 실시간으로 동기화 상태를 유지할 수 있습니다.
다음 단계
이 게시물에서는 동기화 게이트웨이 및 Couchbase 서버와의 데이터 동기화와 관련된 Couchbase Lite의 몇 가지 일반적인 사용 패턴을 다루었습니다. 앞으로도 일반적인 사용 사례를 해결하기 위한 다른 팁과 권장 사항을 설명하는 게시물을 계속 게시할 예정입니다.
질문이나 피드백이 있으시면 아래에 댓글을 남기거나 다음 주소로 언제든지 문의해 주세요. 트위터 또는 이메일 나를 . 나 . 카우치베이스 포럼 를 통해 질문할 수 있습니다.
감사
특히 Couchbase Lite 및 동기화 게이트웨이 개발 팀의 공헌을 인정하고 싶습니다. 아담 프레이저 그리고 짐 보든 블로그 게시물을 검토해 주셔서 감사합니다.