강좌 전체보기

.

 

 

홈 오토메이션 서비스 기획 중 사용자 앱을 구현할 차례입니다.

 

 

모바일 앱 작성

 

우리가 만든 홈 오토메이션 서버는 웹을 통해 사용자 UI를 제공합니다. 따라서 브라우저를 사용하면 접속이 가능하기 때문에 모바일 앱을 굳이 사용할 필요는 없습니다. 대신 모바일 앱 작성시 주의해야 할 사항들만 언급하겠습니다.

 

웹 뷰(Web View)

우리가 만든 node.js 서버는 웹 서버로 동작하면서 사용자가 브라우저를 통해 볼 수 있는 웹 페이지들을 제공합니다.

따라서 모바일 앱을 작성할 때 Web View 를 이용하면 우리가 만든 서버로 접속해서 기능들을 사용할 수 있습니다. 이 경우 앱이 담당해야 할 많은 기능들을 웹 뷰가 대신해주므로 앱 구현이 간단해집니다.

그리고 서버와 interaction 이 필요한 부분이 있다면 javascript-interface 를 이용하면 됩니다. Javascript-interface 는 웹 페이지의 자바스크립트 코드가 안드로이드의 특정 함수를 호출할 수 있도록 해주는 기능입니다. 따라서 서버에서 보내 준 웹 페이지 자체와 안드로이드 앱이 서로 연동해서 동작하도록 만들 수 있습니다.

 

API 호출

우리가 설치한 서버에는 http://서버IP:3010/recent_data 로 POST 요청을 보내면 해당 채널에 저장된 데이터들을 원하는 개수만큼 추출할 수 있습니다. POST 요청을 보낼 때는 아래 JSON 데이터를 함께 보내면 됩니다.

{
   "channel":2,
   "auth_code":"ercwed",
   "num":2
}

이런식으로 보통 서버가 제공하는 API 를 사용하는 것이 가장 일반적인 모바일 앱 동작 방식입니다. 이미 서버에는 센서장치가 보내주는 데이터가 쌓여 있을겁니다. 따라서 이 데이터를 적당히 가공해서 모바일 앱이 사용할 수 있도록 API 를 제공해주면 홈 오토메이션 서비스가 더 세련되게 바뀔겁니다.

이런 HTTP call 을 관리하기 위해서는 Retrofit 같은 라이브러리를 사용하는 것이 좋습니다.

 

MQTT

모바일 앱에서 MQTT 기능을 구현하면 여러모로 좋은 점이 많습니다. MQTT 를 적극적으로 사용하면 센서장치에서 수집해서 보내주는 데이터를 모바일이 바로 받아서 처리할 수도 있고, 모바일 장치가 센서장치에 직접 메시지를 보낼 수도 있습니다. 또한 서버에서 모바일 앱으로 push 메시지를 보낼 수도 있습니다.

하지만 이런 여러 장점에도 모바일 앱에서 MQTT 를 사용하기 어려운 이유가 있습니다. MQTT 는 소켓 통신을 기반으로 하기 때문에 항상 서버에 소켓 통신으로 연결되어 있어야 합니다. 하지만 일반적인 모바일 앱은 배터리 관리, 프로세스 관리 등의 차원에서 framework 에서 백그라운드로 계속 동작하는 것을 막는 경우가 많습니다. 따라서 앱이 백그라운드로 동작하면 MQTT 동작을 100% 확신할 수가 없어집니다.

따라서 사용자가 앱이 사용하는 동안만, 일시적으로 MQTT를 연결해서 동작하도록 서비스를 만들어주는 것이 좋습니다. 안드로이드에서 MQTT를 사용하는 예제는 아래 소스를 참고하세요.

 

Bluetooth

이번 예제에서는 사용하지 않았지만, 만약 사용자가 특정 지역에 왔을 때 센서장치와 상호 작용하도록 만들고 싶은 경우가 있습니다. 이 때는 WiFi 보다는 블루투스가 더 유용하게 사용될 수 있습니다. 근래들어 Beacon, BLE 를 이용한 다양한 서비스가 등장했는데 이는 모두 모바일이 중심이 되어 센서장치와 상호 작용하고 그 결과를 서버와 공유하는 형태로 동작합니다. 대부분의 모바일 폰은 블루투스를 기본으로 탑재하고 있기 때문에 블루투스 기반 서비스, 기능을 구성하기 좋습니다.

안드로이드 폰의 경우 BLE를 사용하기 위해서는 v4.3 이상이 되어야 했지만, 근래의 폰들은 대부분 해당되며 3년 이상 오래된 폰들은 점유율이 미약하기 때문에 BLE 이용에 제약이 거의 없어진 상태입니다.

BLE 앱 예제 소스는 아래 링크를 참고하세요.

 

NFC

근거리 통신 방법인 NFC/RFID 도 앱에서 사용가능한 통신 방법 중 하나입니다. 단, NFC 를 일반 앱이 사용하기에는 제약사항이 많아서 부담스러운 면이 많습니다. 예를 들어 안드로이드 폰의 경우 NFC 를 탑재하지 않은 단말도 많기 때문에 무조건 NFC 기반으로 서비스를 기획하기 힘듭니다. iOS 의 경우 일반 앱이 NFC 사용이 어렵습니다.

대신 NFC를 사용할 수 있는 상황이라면, 결제 등의 시나리오를 구현할 수 있는 강력한 툴을 얻게 되는 것입니다.

 

 

 

참고자료

 

 

주의!!! [사물 인터넷 네트워크와 서비스 구축 강좌] 시리즈 관련 문서들은 무단으로 내용의 일부 또는 전체를 게시하여서는 안됩니다. 계속 내용이 업데이트 되는 문서이며, 문서에 인용된 자료의 경우 원작자의 라이센스 문제가 있을 수 있습니다.

 

강좌 전체보기

.