지난 주에 저는 웹캠프 자그레브는 개발자와 디자이너를 위한 훌륭한 컨퍼런스입니다. 저는 '디바이스가 서로 대화하게 하세요'라는 제목으로 프레젠테이션을 했습니다. 데모 부분에서는 같은 네트워크에서 실행 중인 다른 사람과 자동으로 동기화되는 아주 간단한 메시지 앱을 만들었습니다. 슬라이드 및 데모 코드가 켜져 있습니다. github. 프레젠테이션은 촬영이 완료되었으며 곧 온라인에 공개될 예정입니다.

이번 발표의 주제는 IoT(사물 인터넷), M2M(머신 투 머신) 그리고 탈중앙화. 인터넷의 이러한 모든 것들은 일반적으로 데이터(대부분의 경우 매우 사적인 데이터, 예, 정량화된 자기 움직임)를 클라우드 어딘가에 있는 서버로 전송합니다. 이는 기본적으로 더 이상 사용자의 (개인) 데이터가 아니라는 것을 의미합니다. 이것은 매우 슬픈 일입니다. 이것이 제가 이 강연을 하게 된 주된 이유입니다. 하지만 디바이스가 서로 대화해야 하는 다른 좋은 이유도 많이 있습니다. 그리고 이것은 새로운 것이 아닙니다. 현재 우리가 M2M이라고 부르는 것은 수년 동안 업계에서 매우 일반적이었습니다.

하지만 다시 원래 주제로 돌아가 보겠습니다. 이러한 중앙 집중화를 피하는 한 가지 방법은 인터넷의 사물이 인터넷의 사물이 아닌 홈 네트워크의 사물이 되는 것입니다. 이들은 서로 통신을 시작하고, 라즈베리파이 또는 JVM을 지원하는 다른 소형 장치에서 실행되는 Couchbase Lite 인스턴스처럼 사용자가 결정한 곳에서 데이터를 전송해야 합니다.

물론 기기가 서로 대화할 수 있도록 하는 한 가지 방법은 이들 기기에 Couchbase Lite를 설치하고 P2P 동기화를 사용하는 것입니다. 이미 여러 블로그 게시물 이 문제가 있습니다. 그래서 이 문제를 해결하기 위해 자동 동기화를 설정하는 방법을 알려드리겠습니다.

동기화는 복제 링크를 기반으로 합니다. 일반적으로 주소와 자격 증명이 필요합니다. 저는 최대한 마찰을 줄이고 싶어서 자격 증명/보안 부분을 생략했습니다. 그 덕분에 프레젠테이션 데모를 훨씬 쉽게 만들 수 있었습니다. 그렇다면 주소만 있으면 어떻게 자동으로 주소를 받을 수 있을까요?

P2P 동기화가 작동하려면 동기화되는 디바이스가 동일한 네트워크에 있어야 합니다. 다행히도 자동 서비스 검색을 위한 여러 네트워크 프로토콜이 존재합니다. 봉쥬르, 랑데부, 제로컨프, 안드로이드 NSD, mDNS, DLNA, UPnP 등을 들어보셨을 겁니다. 대부분은 DNS 서비스 레지스트리를 기반으로 합니다. DNS는 IP를 호스트에 매핑하는 것 이상의 역할을 할 수 있기 때문입니다. 주소, 이름, 설명이 포함된 서비스 목록도 저장할 수 있습니다.

이것이 제가 데모에서 사용한 것입니다. 저는 간단한 Java 구현을 선택했습니다. JmDNS 라이브러리. 이렇게 하면 Java 네이티브 앱과 Android에서 거의 동일한 임팩트를 사용할 수 있습니다. UDP 브로드캐스팅을 통해 작동합니다. 네트워크에 연결된 다른 사물에 패킷을 보냅니다.

다음은 가장 관련성이 높은 코드를 간략하게 살펴보는 내용입니다.

장치에서 카우치베이스 라이트 리스너를 시작하여 연결을 수신할 수 있도록 합니다.

JmDNS를 사용하여 새 서비스 노출하기

JmDNS를 사용하여 특정 서비스 듣기. DiscoveryListener 리스너는 실제로 동기화를 설정할 수 있는 곳이기 때문에 중요합니다.

가장 깔끔한 구현은 아니지만 아이디어를 얻을 수 있을 것입니다. serviceResolved 메서드를 자세히 살펴보세요. 네트워크에서 새 서비스가 발견되었을 때 호출되는 메서드입니다. 이 메서드는 서비스의 URL을 제공하므로 클래식 복제 링크를 구성할 수 있습니다.

그리고 이는 모든 Couchbase Lite 장치가 쉽게 동기화될 수 있도록 구현하기 쉬운 재미있는 실험 프로젝트입니다. 물론 할 수 있는 일은 훨씬 더 많습니다. 예를 들어 보안 부분을 추가하는 것이죠. 자격 증명을 한 번만 교환하는 첫 번째 수동 동기화를 수행한 다음 다른 모든 작업을 자동으로 수행하는 것을 상상할 수 있습니다. 도움이 되셨기를 바랍니다. 주저하지 마시고 의견을 남겨 주세요!

작성자

게시자 로랑 도귄

Laurent는 파리에 사는 괴짜 금속공학도입니다. 주로 Java로 코드를 작성하고 AsciiDoc으로 구조화된 텍스트를 작성하며 데이터, 리액티브 프로그래밍 및 기타 유행어에 대해 자주 이야기합니다. 또한 Clever Cloud와 Nuxeo의 개발자 옹호자로 활동하며 해당 커뮤니티가 더 크고 강력하게 성장할 수 있도록 자신의 시간과 전문성을 바쳤습니다. 현재 Couchbase에서 개발자 관계를 운영하고 있습니다.

댓글 남기기