최근 사물인터넷(IoT)이 대세로 떠오르고 있습니다. 시계, 텔레비전, 온도 조절기 등 모든 기계 장치를 제작하고 인터넷을 통해 통신할 수 있는 것이 현대의 시대입니다. 이러한 현대에서 변하지 않는 한 가지는 데이터 전송과 저장의 필요성입니다. IoT 디바이스에서 이를 어떻게 수행할 수 있을까요?

카우치베이스 서버 는 방대한 양의 엔터프라이즈 데이터를 저장하기 위해 존재하며 카우치베이스 모바일 는 모바일 장치에 로컬로 데이터를 저장하고 가능한 경우 Couchbase Server에 동기화하기 위해 존재합니다. IoT는 어디에 적합할까요? IoT 디바이스는 서버가 아니며 기술적으로 모바일 디바이스가 아닙니다.

많은 IoT 기기에서 Java 애플리케이션을 실행할 수 있다는 사실을 알고 계셨나요? 실제로 Java용 Couchbase Lite SDK가 있습니다. 이것은 Android 또는 iOS SDK가 아닙니다. 일반 Java 애플리케이션을 위한 SDK입니다. 이를 통해 IoT에 사용할 수 있습니다.

프로젝트 범위

이제 이것이 가능하다는 것을 알았으니 멋진 IoT 예제를 생각해보고 실행해 보겠습니다. 다음 시나리오에서 iBeacon 예제를 살펴보겠습니다.

집을 비운 동안 반려동물을 추적하고 싶다고 가정해 봅시다. 반려동물이 집안 곳곳에서 하루 중 몇 시에 어디로 가는지 파악하고 싶을 것입니다. 그래서 반려동물의 목걸이에 iBeacon을 부착하고 집 주변에 몇 개의 IoT 스캐너를 설치하기로 결정했습니다.

따라서 iBeacon을 연결하고 IoT 게이트웨이를 설치하면 IoT 디바이스가 지속적으로 iBeacon을 스캔할 수 있습니다. iBeacon이 범위 내에 들어오면 위치 및 비콘 정보와 함께 타임스탬프가 저장되어 서버에 업로드될 수 있습니다. 나중에 히트 맵을 사용하여 나만의 대시보드를 만들어 데이터를 더 잘 이해할 수 있습니다.

그렇다면 이 프로젝트를 시도하려면 무엇이 필요할까요?

요구 사항

하드웨어뿐만 아니라 소프트웨어 영역에도 몇 가지 요구 사항이 있습니다. 아래에서 확인할 수 있습니다:

하드웨어 요구 사항이 있지만 하드웨어 브랜드는 약간 유연합니다. 제가 인텔 IoT 게이트웨이와 짐벌 근접 비콘을 모두 나열한 이유는 가격이 매우 저렴할 뿐만 아니라 애플리케이션을 구축할 때 사용한 제품이기 때문입니다. 이 예제를 최대한 활용하려면 비콘과 게이트웨이를 여러 개 사용하는 것이 가장 좋지만 프로토타이핑에는 하나만 사용해도 충분합니다.

이 프로젝트의 진행 방식은 다음과 같습니다.

이 프로젝트의 전체 소스 코드는 다음에서 확인할 수 있습니다. GitHub.

Couchbase로 데이터 저장하기

IoT 및 비콘 작업을 시작하기 전에 데이터 모델을 정의하고 Java 애플리케이션을 구축하는 것이 좋습니다. 많은 시나리오 중 하나인 이 시나리오에서는 Java 애플리케이션이 비콘을 검색하지 않습니다. 이 애플리케이션은 데이터 저장만 담당합니다.

카우치베이스 비콘 데이터 모델

아이비콘에 익숙하지 않으시다면, 아이비콘은 몇 가지 문자열과 정수 값만 전송할 수 있습니다. 다른 디바이스에 연결할 수도 없고 다른 디바이스를 볼 수도 없습니다. 그저 전송만 할 뿐입니다. 즉, 전송되는 값은 다음과 같습니다:

  • UUID
  • 전공
  • 미성년자
  • 전원

그리고 UUID, 전공미성년자 는 특정 비콘에 대한 고유한 정보를 제공합니다. 이 세 가지 값은 나중에 쿼리할 때 유용한 복합 키를 형성할 수 있습니다.

비콘이 감지될 때마다 비콘 데이터를 어떻게 저장할지 생각해 봅시다.

비콘이 감지될 때마다 새로운 JSON 문서를 만들 수 있습니다. 개별 문서는 다음과 같이 보일 수 있습니다:

위의 접근 방식이 잘못된 것은 아닙니다. 하지만 얼마나 많은 비콘을 배포하느냐에 따라 엄청난 양의 문서가 발생할 수 있습니다. 다시 말하지만, Couchbase는 이 문제를 처리하도록 설계되었으므로 선호도의 문제입니다. 저는 실제로 특정 비콘에 대한 모든 비콘 트랜잭션을 이와 같이 동일한 문서에 보관하는 것을 선호합니다:

두 번째 시나리오에서는 비콘이 발견될 때마다 복합 키를 기반으로 Couchbase를 쿼리한 다음 상태 데이터를 상태 배열에 추가합니다.

Maven 종속성 추가하기

이 Java 프로젝트는 Maven을 기반으로 하므로 pom.xml 파일에 특정 종속성을 충족해야 합니다. 프로젝트에 Couchbase Lite Java SDK를 포함하려면 Maven 파일에 다음 종속성을 추가하세요:

위의 종속성을 사용하면 Couchbase 문서를 IoT 장치에 로컬로 저장하고 Couchbase 동기화 게이트웨이와 동기화할 수 있습니다.

비콘 클래스 만들기

아이비콘으로 작업할 것이므로 자바 비콘 클래스를 만드는 것이 좋습니다. 이 클래스는 비콘 데이터를 저장하고 쿼리 발생 시 데이터를 로드하는 역할을 담당해야 합니다. 로딩이 어떤 것인지부터 살펴보겠습니다:

저장 기능에서는 먼저 문서가 있는지 확인하기 위해 문서를 로드합니다. 비콘 정보에 대한 문서가 존재한다면 그 문서에 추가하고, 그렇지 않다면 새 문서를 만들면 됩니다. 처음부터 새로 만들든 기존 문서 데이터에서 만들든 Couchbase 문서를 재구성한 후에는 다음을 통해 저장합니다. putProperties 함수를 호출하며, 이 시점에서 비콘 데이터를 저장하고 로컬 카우치베이스 라이트 데이터베이스에서 읽을 수 있습니다.

카우치베이스 동기화 게이트웨이와 동기화하기

하나 이상의 IoT 스캔 게이트웨이를 사용하게 될 가능성이 높습니다. 따라서 (임베디드 문서 모델의) 비콘 데이터를 IoT 디바이스 간에 동기화해야 합니다. 이제 저장 및 로드 코드를 한 단계 더 발전시킬 수 있습니다. 다음 코드를 살펴보세요:

이 코드는 다른 클래스(가급적이면 여러분의 메인 함수를 호출합니다. 기본적으로 로컬 데이터베이스에 대한 연결을 초기화하고, 원격으로 실행 중인 동기화 게이트웨이 인스턴스에 푸시 및 풀 복제기를 구성하고, 저장 및 동기화 프로세스를 시작합니다. 좀 더 구체적으로 말하면, 복제 프로세스는 한 번만 수행됩니다. 애플리케이션을 실행하면 먼저 서버에서 릴리스된 비콘 문서를 모두 가져옵니다. 리플리케이터에서 변경 리스너를 사용하면 변경 사항 다운로드가 완료된 후에만 저장을 기다릴 수 있습니다. 푸시 후 Java 애플리케이션이 열려 있는 상태로 유지되는 것을 방지하기 위해 완료 시 애플리케이션을 닫는 리스너를 추가합니다.

SQLite 종속성 오류 해결

Maven을 사용하여 이 애플리케이션을 빌드할 때는 문제가 없어야 합니다. 그러나 배포하는 IoT 디바이스에 따라 라이브러리 종속성 문제가 있을 수 있습니다. 다양한 아키텍처가 유통되고 있습니다. 오류의 예는 다음과 같습니다:

이 문제는 JAR 아카이브를 추출하고 디렉터리 중 하나의 이름을 바꾼 다음 다시 JAR로 패키징하면 쉽게 해결할 수 있습니다. 좀 더 구체적으로 설명하자면, 다음 명령을 실행하여 JAR 파일을 추출합니다:

추출한 문서와 파일에서 이름을 변경합니다. /네이티브/리눅스/x86 디렉토리를 /네이티브/리눅스/i386. 이 작업이 완료되면 JAR 파일을 다시 패키징하고 다시 배포할 수 있습니다.

위의 명령은 JAR 파일을 다시 패키징합니다.

아이비콘 스캔 및 상태 추적하기

앞서 언급한 것처럼 Java 애플리케이션은 아이비콘을 감지할 책임이 없습니다. 데이터 저장만 담당합니다. 대신 Linux 운영 체제에 사전 설치되어 있는 몇 가지 도구를 사용하겠습니다.

Linux 도구로 스캔

대부분의 Linux 배포판에는 hcitool 그리고 hcidump 애플리케이션. 애플리케이션 hcitool 를 사용하면 범위 내에 있는 블루투스 장치를 검색할 수 있습니다. 다음과 같이 실행하면 됩니다:

위는 스캔에서 발견된 디바이스에 대한 기본 정보를 반환합니다. 그런 다음 hcidump 도구를 사용하여 검색된 블루투스 데이터에 대한 모든 것을 표시할 수 있습니다. 이와 같은 도구는 원시 데이터를 표시합니다:

문제는 데이터가 매우 원시적이라는 점입니다. 현재 형태로는 작업할 수 없습니다. iBeacon 데이터를 이해하는데 사용할 수 없습니다.

래디우스 네트웍스의 도구로 프로세스 간소화하기

여기에서 다음과 같은 스크립트를 작성할 수 있습니다. 래디우스 네트워크 가 등장합니다. 라는 스크립트가 있습니다. 아이비콘 스캔 를 사용하여 hcitool 그리고 hcidump를 파싱하여 깨끗하게 정리했습니다. 아래에서 확인할 수 있습니다:

이 스크립트는 한 줄을 제외하고는 Radius Networks에서 작성했음을 밝힙니다:

스크립트에서 파싱한 정보를 가져와 Java 애플리케이션으로 파이프하여 저장합니다. 이 스크립트는 수동으로 중지할 때까지 계속 실행됩니다.위는 이 프로젝트가 실제로 작동하는 샘플 애니메이션입니다.

결론

그렇게 나쁘지 않았나요? 방금 iBeacon을 스캔하고 정보를 Couchbase에 저장하는 간단한 사물 인터넷(IoT) 프로젝트를 만들었습니다. Couchbase Lite Java SDK는 Couchbase Lite Android SDK와 거의 동일합니다. 이를 통해 Java를 지원하는 거의 모든 것에 Java 애플리케이션을 적용할 수 있으며, 전체 작동 예제 프로젝트는 다음에서 확인할 수 있습니다. GitHub.

작성자

게시자 Nic Raboy, 개발자 옹호자, Couchbase

닉 라보이는 최신 웹 및 모바일 개발 기술을 옹호하는 사람입니다. 그는 Java, JavaScript, Golang 및 Angular, NativeScript, Apache Cordova와 같은 다양한 프레임워크에 대한 경험이 있습니다. Nic은 웹 및 모바일 개발을 보다 쉽게 이해할 수 있도록 자신의 개발 경험에 대해 글을 쓰고 있습니다.

댓글 남기기