카우치베이스 라이트 2.8 릴리스 는 즉시 사용 가능한 엔터프라이즈급 P2P 데이터베이스 동기화 솔루션에 대한 지원을 발표했습니다. 이 새로운 기능을 사용하면 클라우드 기반 제어 지점 없이도 Couchbase Lite 지원 모바일 및/또는 비모바일 임베디드 앱 간에 직접 동기화할 수 있습니다.
이 글에서는 이 기능에 대한 개요를 제공하고 두 클라이언트 간에 피어 투 피어 동기화를 얼마나 쉽게 설정할 수 있는지 보여드리겠습니다. 자세한 내용은 문서 페이지에서 플랫폼별 API 및 샘플 코드 스니펫을 확인할 수 있습니다.
첫째, 몇 가지 사용 사례 ...
사용 사례
서로 협업할 수 있는 기능이 필요한 연결되지 않은 환경의 앱 사용자는 피어 투 피어 데이터베이스 동기화에 적합한 대상입니다. 다음은 몇 가지 예시입니다.
- 현장 앱 :
건설 현장의 현장 작업자, 재해 복구 지역의 자원봉사자, 광부, 이동 진료소의 의료진은 인터넷 연결 없이도 근거리 통신망을 통해 서로 협업하고 작업을 조정할 수 있습니다. - 여행 :
기내식 주문 업데이트를 담당하는 승무원은 기내에서 다른 승무원에게 자동으로 동기화되는 재고 정보를 업데이트할 수 있습니다. 이렇게 하면 승무원은 마지막 기내식이 제공된 후에는 기내식을 제공하지 않습니다. - 호스피탈리티 :
레스토랑의 식사 주문 워크플로우를 자동화할 수 있습니다. 서버는 고객 테이블 옆을 떠나지 않고도 모바일 디바이스에서 주문을 받아 주방으로 전송하고, 주문 상태를 확인하고, 결제 등을 처리할 수 있습니다. - 해양 :
선박/선박에 탑승한 승무원은 장비 메트릭을 기록하고 다른 승무원과 실시간으로 동기화하여 실시간으로 의사 결정을 내릴 수 있습니다.
일반적인 배포
아래는 연결이 끊긴 환경에서 피어 투 피어 데이터베이스 동기화를 위해 Couchbase를 사용하는 일반적인 배포 예시입니다. 연결이 끊긴 환경 또는 '엣지'는 백엔드 클라우드 기반 서버에 연결하지 않고도 자율적으로 작동할 수 있습니다. 그러나 인터넷에 연결되어 있는 경우, 연결이 끊긴 엣지에서 다음과 같은 변경 사항이 발생할 수 있습니다. 동기화 동기화 게이트웨이를 통해 원격 Couchbase 서버와 연결합니다.
카우치베이스 라이트 클라이언트는 다양한 토폴로지로 구성할 수 있습니다. 한 클라이언트를 기본 제어점 또는 수신기로 지정하고 다른 클라이언트가 지정된 수신기를 통해 서로 통신할 수 있는 스타 토폴로지가 될 수 있습니다. 또는 모든 클라이언트가 동일한 네트워크의 다른 모든 클라이언트에 직접 연결되는 연결된 메시 토폴로지로 클라이언트를 구성할 수도 있습니다.

피어 투 피어 워크플로
피어 투 피어 동기화는 웹소켓 기반이며 IP 기반 네트워크를 통해 작동합니다. 원격 동기화 게이트웨이와 동기화하는 데 사용되는 것과 동일한 프로토콜입니다. 다음은 카우치베이스 라이트와 피어 투 피어 데이터 동기화의 높은 수준의 워크플로입니다. 참여하는 모든 피어는 다음과 같은 역할을 수행합니다. "패시브 피어" 는 일반적인 클라이언트-서버 통신의 서버 및/또는 "활성 피어" 일반적인 클라이언트-서버 통신에서 클라이언트에 비유할 수 있습니다. 앱은 능동적 및 수동적 피어 역할을 모두 수행할 수 있습니다.

- 그리고 웹소켓 리스너 는 동기화할 카우치베이스 라이트 데이터베이스와 함께 패시브 피어에서 초기화됩니다. 포트, 네트워크 인터페이스, TLSIdentity 등을 지정하는 기능을 포함하여 여러 가지 구성 가능한 옵션을 사용할 수 있습니다.
- 구성 가능한 옵션 중 하나
리스너
는 리스너가 활성 피어에서 자격 증명을 받을 때 호출되는 인증자 콜백 함수입니다. 이리스너 인증자
콜백 함수는 앱에서 구현해야 하며 클라이언트 자격 증명을 인증하는 로직을 포함해야 합니다. - 패시브 피어는 서비스를 광고합니다. 이 단계는 전적으로 앱 내에서 처리되며 Couchbase Lite는 여기서 역할을 하지 않습니다. 일반적으로 앱은 다음과 같은 플랫폼별 파티 프레임워크를 활용합니다. NSNetService 를 사용해야 합니다. 실제로 배포에 따라 이 단계는 선택 사항일 수 있습니다. 예를 들어, 장치가 고정 IP 주소로 구성되거나 DNS가 지원되는 경우 클라이언트가 잘 알려진 URL에서 수신 대기 중일 수 있습니다.
- 활성 피어 또는 클라이언트가 연결할 수동 피어를 찾습니다. 다시 말하지만, 이 단계는 전적으로 앱 내에서 처리되며 Couchbase Lite는 여기서 역할을 하지 않습니다. 일반적으로 앱은 다음과 같은 플랫폼별 파티 프레임워크를 활용합니다. NSNetService 를 사용할 수 있습니다. 물론
리스너
가 잘 알려진 주소에서 수신 중인 경우 이 단계는 선택 사항입니다. - 활성 피어가 연결할 피어를 식별하면 다른 엔드포인트에 대한 복제 연결을 설정해야 합니다. 피어 투 피어 동기화를 위한 리플리케이터는 원격 동기화 게이트웨이에 대한 연결을 설정하는 경우와 똑같은 방식으로 구성됩니다.
- 연결 설정의 TLS 핸드셰이크의 일부로 서버 인증서가 인증됩니다. 이 과정은 앱에 투명하게 이루어집니다.
- 서버 인증서가 인증되면 클라이언트 자격 증명이 수신자에게 전송되어 인증이 이루어집니다. 카우치베이스 라이트는 기본 인증과 클라이언트 인증서 기반 인증을 모두 지원합니다. 인증.
- 수신 자격 증명이 등록되어 있는
리스너 인증자
에서 인증을 받습니다. 인증이 완료되면 피어 간에 통신 채널이 설정됩니다. - 그 후, 데이터베이스에 문서가 변경될 때마다 데이터 변경 사항이 자동으로 다른 쪽 끝으로 동기화됩니다. 데이터 전송 방향은 단방향 또는 양방향으로 구성할 수 있습니다.
동기화 기술의 속성
동기화를 올바르게 수행하는 것은 어렵습니다. 몇 가지 고려해야 할 사항이 있으며, 피어 투 피어 동기화가 어떻게 이루어지는지에 대한 치트 시트가 있습니다. P2P 동기화 관련 문서 자세한 내용
기능 | 카우치베이스 라이트 피어투피어 동기화 |
---|---|
보안 | TLS 암호화를 즉시 지원합니다. 인증서 기반 인증. 기본 인증. 앱이 TLS 암호화를 위해 0줄의 코드만 작성하면 됩니다. |
네트워크 복원력 | 기하급수적인 백오프로 재시도합니다. 연속 복제는 무한정 재시도하는 반면, 원샷 복제는 특정 시도 횟수 후 포기합니다. |
효율성 | 델타 동기화 기술을 사용하여 변경된 문서 부분만 동기화하여 데이터 전송 비용을 최적화하세요. |
데이터 충돌 | 기본 제공. 기본적으로 충돌은 사전 정의된 정책을 사용하여 자동으로 해결됩니다. 또한 앱은 충돌을 처리하기 위해 자체 사용자 지정 양방향 병합 기능을 유연하게 지정할 수 있습니다. |
개발자 사용 편의성 | 몇 줄의 코드만으로 피어투피어 동기화를 시작할 수 있습니다. 물론 필요에 따라 사용자 지정할 수 있는 다양한 구성 옵션이 있습니다. |
멀티 플랫폼 지원 | 카우치베이스 라이트는 다양한 모바일 및 비모바일 플랫폼에서 지원됩니다. 피어 투 피어 데이터 동기화 기능을 통해 이기종 플랫폼 간 동기화(예: Android 앱과 iOS 앱 간 동기화)가 가능합니다. |
유연한 토폴로지 | 참여하는 모든 피어는 리스너 또는 리플리케이터 또는 둘 다의 역할을 할 수 있으므로 피어 투 피어 동기화에 참여하는 Couchbase Lite 클라이언트는 스타, 메시 등과 같은 다양한 토폴로지로 구성할 수 있습니다. 선택은 앱의 필요에 따라 달라집니다. |
시작하기 코드
저희의 튜토리얼 페이지 에서 피어 투 피어 동기화 기능을 보여주는 완전한 앱을 확인하세요. 하지만 여기서는 동기화를 시작하는 데 필요한 최소한의 코드만 소개하여 앞서 설명한 워크플로우를 얼마나 쉽게 진행할 수 있는지 직접 확인할 수 있도록 하려고 합니다. 이 스니펫은 iOS용이지만 다른 Couchbase Lite 플랫폼에 매핑하는 것은 간단합니다.
패시브 피어
다음 코드 스니펫은 들어오는 피어 연결을 수신 대기하는 수동 피어에서 리스너를 초기화합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
// 1: 동기화할 카우치베이스 라이트 데이터베이스로 리스너 구성을 초기화합니다. let 리스너 구성 = URL엔드포인트 리스너 구성(데이터베이스: db) // 2: 클라이언트 자격 증명의 유효성을 검사하는 데 사용할 인증자를 첨부합니다. // 이 샘플에서는 기본 인증 자격 증명의 유효성을 검사하기 위해 인증자를 첨부했습니다. 리스너 구성.인증자 = 리스너 암호 인증기.init { (사용자 이름, 비밀번호) -> Bool in 만약 (self.허용 목록 사용자.포함(["비밀번호" : 비밀번호, "name":사용자 이름])) { 반환 true } 반환 false } // 선택적으로 델타 동기화, 서버의 TLSIdentity 등과 같은 다른 구성 옵션을 재정의합니다. // 기본적으로 리스너는 Couchbase LIte에서 생성한 자체 서명 인증서로 구성됩니다. // 이 인증서는 "익명 자체 서명 인증서"라고 합니다. // 3: 리스너 구성으로 리스너 초기화하기 _웹소켓 리스너 = URL엔드포인트 리스너(구성: 리스너 구성) // 4: 리스너를 시작합니다. 이제 리스너가 수신 연결을 수신 대기 중입니다. 시도? 웹소켓 리스너.시작() |
활성 피어
다음 코드 스니펫은 다음에 대한 리플리케이터를 초기화합니다. 보안 피어 투 피어 동기화. 원격 엔드포인트에 복제할 때 사용되는 리플리케이터 로직과 동일합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
// 1: 동기화할 카우치베이스 라이트 데이터베이스로 리플리케이터 구성을 초기화합니다. // 및 웹 소켓 리스너에 해당하는 URL 엔드포인트 let 구성 = 리플리케이터 구성.init(데이터베이스: userDb, 대상: URL엔드포인트.init(URL:targetUl)) // 2: 클라이언트 자격 증명으로 인증자를 설정합니다. 이 경우 기본 인증을 사용하고 있습니다. let 인증자 = 기본 인증자(사용자 이름: 사용자, 비밀번호: 비밀번호) 구성.인증자 = 인증자 // 선택적으로 복제 모드, 충돌 해결기 등과 같은 다른 구성 옵션을 설정합니다. // 3: 리플리케이터 구성으로 리플리케이터 초기화하기 replicatorForUserDb = 리플리케이터.init(구성: 구성) // 4: 서버/ 리스너에 대해 자체 서명된 인증서만 허용하도록 리플리케이터를 설정합니다. // 이는 리스너 측에서 기본 TLSIdentity를 사용하고 있기 때문입니다. // 익명 자체 서명 인증서 config.acceptOnlySelfSignedServerCertificate = true // 5: 복제 시작 replicatorForUserDb?.시작() |
끝입니다! 몇 가지 간단한 단계만 거치면 Couchbase Lite로 안전한 피어투피어 동기화를 시작할 수 있습니다.
2.1의 피어투피어 동기화는 어떻게 되나요?
Couchbase Lite로 작업해 본 적이 있다면 아마도 피어 투 피어 동기화 기능 에 소개된 2.1 릴리스 를 출시했습니다. 2.1 릴리스에서는 다음과 같이 메시지 엔드포인트 연결 앱에서 구현해야 하는 인터페이스 정의. 카우치베이스 라이트 리플리케이터는 이 인터페이스를 통해 앱과 통신하여 동기화해야 하는 데이터 변경 사항을 제공했습니다. 데이터를 수신하는 피어로 전송하는 방법은 전적으로 앱에 달려 있었습니다. 인터페이스를 제공함으로써 앱 개발자는 원하는 통신 프레임워크를 사용할 수 있는 유연성을 확보할 수 있었고, 모든 전송(IP 또는 비IP)에서 사용할 수 있었습니다.
2.8에서는 IP 네트워크를 통한 피어 투 피어 동기화를 위한 기본 구현을 제공하여 작업을 대폭 간소화했습니다. 곧 보시겠지만, 몇 줄의 코드만 입력하면 바로 시작할 수 있습니다. 이 메시지 엔드포인트 연결 인터페이스는 계속 지원됩니다. 따라서 이미 2.1에서 제공된 동기화 솔루션을 구현한 경우에는 새 API를 사용하기 위해 솔루션을 마이그레이션할 필요가 없습니다. 사실, IP 기반이 아닌 네트워크를 통해 동기화하는 경우에는 여전히 이 방법만이 유일한 옵션입니다. 그러나 IP 네트워크를 통해 동기화하는 경우에는 앱 코드를 크게 간소화하고 테스트 및 유지 관리 비용을 절감할 수 있으므로 권장됩니다.
다음 단계
Couchbase는 연결이 끊긴 환경에서 클라이언트가 서로 직접 통신할 수 있는 유일한 P2P 데이터베이스 동기화 솔루션입니다.
다음을 수행할 수 있습니다. 카우치베이스 라이트 다운로드 를 클릭하고 기능을 무료로 사용할 수 있습니다.
자세한 내용을 알아보려면 여기에서 자세한 정보를 확인할 수 있습니다.
– 문서 피어 투 피어
– 튜토리얼: 피어 투 피어
– 솔루션 페이지: 피어 투 피어 솔루션
– 데모로 비디오 연결하기: Couchbase Lite를 사용한 피어 투 피어 동기화
그리고 카우치베이스 포럼 는 질문이 있을 때 연락하기 좋은 곳입니다. 아래에 댓글을 남기거나 다음을 통해 언제든지 문의해 주세요. 트위터 또는 이메일 보내기
카우치베이스가 안드로이드 플랫폼에서 피어 투 피어 모바일 동기화를 포기한 것으로 알고 있습니다. 문서를 살펴 보았지만 작동하도록 할 수 없었습니다. 유일한 데모 예제는 Ios와 Xamarin입니다. 양방향 통신에 대한 간단한 데모 예제를 안드로이드 커뮤니티에 제공하는 것이 왜 그렇게 구현이 간단한지 모르겠습니다. 이제 카우치베이스를 포기할 준비가 되었습니다.