Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

Contents

IoT와 MQTT

네트워크 영역에 따른 분류

네트워크 영역으로 볼때, IoT는 크게 로컬 네트워크와 광역 네트워크로 나눌 수 있을거다. 같은 로컬 네트워크에 있는 디바이스들은 중앙서버등에 연결할 필요 없이, 주변에 있는 디바이스들과 데이터를 주고 받을 수 있어야 한다. 만약 원격에서 디바이스를 제어하기 원한다면, (인증등의 과정을 거쳐서)중앙에 있는 IoT 인프라에 연결을 해야 할 것이다.

네트워크 영역별로 데이터 통신 특성이 다른 관계로, 각각의 경우에 MQTT를 어떻게 응용할 수 있을지를 고민해 보려 한다.

여기에서 다루려는 네트워크는 다음과 같다.
  1. PAN(Personal Area Network) : Personal Area Network. 개인의 몸을 중심으로 하는 근거리 네트워크다. BlueTooth를 주요 네트워크 프로토콜로 사용한다.
  2. LAN(Local Area Network) : 가정, 소규모 사무실 등 하나의 인터넷 게이트웨이에 묶여있는 네트워크다.
  3. BAN(Building Area Network) : 건물 네트워크다. 하나 이상의 인터넷 게이트웨이로 구성된다. 네트워크가 중앙에서 통제되는 경우로 가정한다. 중앙에서 통제하지 않을 경우는 LAN의 집합으로 봐야 한다.
  4. MAN(Metropolitan Area Network) : WAN과의 구분이 모호해서, MAN을 고민할 필요가 있을지 모르으나 일단 분류는 해 놓는다.
  5. WAN(Wide Area Network) : 인터넷.

LAN

로컬 네트워크는 멀니태스크 채널로 Discovery 가능한 영역 이다. 보통 멀티캐스트 채널을 이용해서, 주변에 있는 디바이스에 자신을 advertise 하거나 반대로 주변에 있는 디바이스를 찾을 수 있다. Discovery가 끝난 후, 데이터를 주고 받을 거다.

로컬 네트워크에서 데이터 교환은 단순한 메시지 교환과 (멀티미디어 데이터와 같은)컨텐츠 교환으로 나눌 수 있을 거다. 기기 종류에 따라서 교환하는 데이터의 종류에 차이가 있을 수 있다. 조명이나 커피포트, 온도계, 에어컨 등은 단순 메시지를 교환할 테고, TV, 오디오, 스피커, CCTV등은 컨텐츠 교환이 필요하다. 기기에 따라서 데이터 통신 방법을 다르게 할 필요가 있다.

단순 메시지 교환

제어 메시지를 보내고, 센서 정보를 받는 종류의 기기들은 MQTT 만으로 데이터 통신이 가능할 거다. 아마도 소형의 기기들일 수 있으므로 zigbee와 같은 non-TCP/IP기반의 프로토콜 사용도 고려해야 한다.MQTT-SN(MQTT for Sensor Networks)의 사용을 고려도 필요하다. 대부분의 MQTT 브로커들이 MQTT-SN을 지원하고 있으니, 구성에 문제는 없을 거다.

MQTT(MQTT-SN)를 이용한 구성 시나리오다.

  • 온도계는 /sensor/temperature 에 온도를 Puslish 한다. 온도가 변할 때만 puslish 하면 될 거다.
  • 스마트폰은 /sensor/temperature 를 subscribe 한다.

LAN 에서의 구성

로컬에서의 기기간 연결은 IoT 게이트웨이가 없는 한은 메쉬(mesh) 네트워크로 구성할 수 밖에 없다. 네트워크에 참여한 노드(디바이스가)스스로 주변 환경을 인식해서, 능동적으로 다른 기기와 연결을 하고 서비스를 제공할 수 있어야 한다.

노드가 독립적으로 작동할 수 있어야 한다는 이야긴데, 모든 노드들이 MQTT Broker를 내장해야 한다. 크게 3개의 컴포넌트가 필요하다.

MQTT Proxy

LAN은 매우 취약하다. 예컨데, Home AP는 기본패스워드를 가지고 있거나 아예 패스워드 설정이 없을 수도 있다. 따라서 LAN은 누구나 접근가능한 걸로 봐야 한다. 로컬 네트워크이고 인증서버도 없기 때문에 oAuth와 같은 유저인증 수단을 사용할 수도 없다.

결국 기기가 자체적인 인증 수단을 가져야만 하는데, MQTT Proxy에 인증 확인 기능을 구현하는게 가장 쉬운 방법이다.
  1. MQTT Client 가 연결 요청을 한다.
    1. PIN(하드웨어 비밀번호), 유저 이름등을 함께 넘긴다.
  2. 연결요청을 받은 proxy는 PIN 번호가 맞는지 확인 한다.
  3. PIN 번호가 맞다면, session을 발급한다. 이 session을 key로 private topic를 만든다.

MQTT SSL

SSL을 이용하면 좀 더 깔끔하게 구성할 수 있다.

앱에서 Public Key를 디바이스로 복사하면 된다. NDEF(NFC Data exchange format)를 이용하면 안전하게 복사할 수 있다.

WAN

기기는 최초에 폐쇠된 네트워크에서 사용한다. 홈 네트워크라면, "쌍방향 메시지 교환이 가능한 리모콘"용도 정도로 보면 될 것 같다. 그러다가 필요에 따라서 IoT 네트워크에 연결을 하게 된다. 연결을 하는 이유는 다양하다.
  1. 인터넷을 이용해서, 원격에서 기기를 제어하고 메시지를 받아볼 수 있다.
  2. 다른 인터넷 서비스들과 연동할 수 있다. 예컨데 IFTTT 같은 서비스 혹은 Email, 메신저 서비스, 클라우드 스토리지와 연동할 수 있다.
  3. IoT 인프라 서비스를 활용할 수 있다. 아직은 초기 단계지만, 빅데이터 서비스를 사용할 수 있을 것이다. 여러 센서 정보들을 수집하고 분석해서, 유저에게 유용한 어떤 정보를 만들어 낼 수 있을 것이다.

인증 수단

LAN에서는 PIN, NFC와 같은 물리적인 수단을 이용해서 인증을 한다. 반면, WAN은 완전히 공개된 논리적인 영역이기 때문에 소프트웨어적인 인증 수단이 필요하다. 아마도 가장 좋은 인증 수단은 oAuth일 것이다. 모바일 기기를 사용하는 유저는 거의 반드시 하나 정도의 oAuth 인증 수단을 가지고 있다. 따라서 유저는 서비스 이용을 위해서 "가입"이라는 귀찮은 과정을 거칠 필요가 없다. 서비스 제공자 입장에서는 "사용자 기반"을 빌려쓸 수 있다는 장점이 있다.

oAuth를 이용한 기기 인증 방식은 원론적으로 "앱"의 인증 방식과 동일하다. 차이가 있다면, 입/출력 인터페이스가 없는 소형기기들을 위해서 인증이 끝난 모바일 앱을 이용해서 "oAuth 인증을 대신"수행 하다는 거다. 대략 아래와 같은 과정을 거칠거다.
  1. 앱을 이용해서 IoT 인프라에 접근한다.
  2. oAuth를 이용해서 인증을 받고, 이 인증정보를 이용해서 IoT 인프라에 유저등록을 한다.
  3. 앱은 IoT 인프라에게 받은 "인증 토큰"을 가지고 있다.
  4. 유저는 LAN 영역에서 기기에게 "인증 토큰"을 전달한다.
  5. 기기는 "인증 토큰"을 가지고 IoT 인프라에 접근한다.
  6. IoT 인프라는 "인증 토큰"을 체크해서 기기가 어느 유저의 인증을 받은 건지를 확인할 수 있다.
oAuth 프로세스에 대한 이해를 하고 있다면, 위의 과정이 이해가 될 것이다. 여기에서는 이정도만 다룬다. 원격에서의 기기 인증은 기회가 되면 자세히 다뤄보겠다.

MQTT를 이용한 메시지 교환

원격에서 MQTT를 이용하는 목적을 먼저 정리해보자.
  1. 모바일기기의 전력사용량도 중요해지는 추세다. 가벼운 MQTT의 사용도 고려해볼 만하다.
  2. LAN과 WAN의 데이터 Push 기술을 통일할 수 있다.
단순화한 구성이다. 구성에서는 App과 Device를 구분하고 있지만, IoT 인프라 입장에서는 App과 Device간 차이가 전혀 없다. 이 둘은 MQTT Broerk에 붙어서 Push 서비스를 받는다. 모바일 앱의 경우에는 Request 채널과 Push 채널을 분리할 수 있을 것이다.(Request 채널은 HTTP로 Push 채널은 MQTT로). Device도 마찬가지로 MQTT로 요청과 응답을 모두 받거나 아니면 채널을 분리할 수 있을 것이다. 통신 채널을 어떻게 구성할지는 기기와 앱의 특성에 따라서 달라질 것이다.

IoT 인프라의 경우 MQTT Broker앞에 Proxy가 있어야 한다. Proxy는 User DB를 이용해서, 유저와 디바이스의 채널 권한등을 확인하는 일을 한다. IoT 인프라를 구성하는 MQTT 서버들은 다수의 연결을 처리해야 하기 때문에, 분산/클러스터 구성을 해야 할 것이다. 분산 클러스터 구성은 MQTT Cluster 구성에서 자세히 다룰 계획이다.

PAN

PAN(personal area network)는 개인정보를 다루는 영역이다. 한 사람의 범위에서 다룰 수 있는 PDA, 스마트폰, 패드, 글라스, 헬스케어 장치.. 기타 웨어러블 디바이스들이 이 네트워크 영역을 구성한다. 대략 10m 정도의 거리를 커버하며, 블루투스나 UWB(Ultra-widebanc), ZigBee, Skinplex, Z-Wave등의 근거리 통신기술을 사용한다.

어떤 통신기술을 사용할지는 어떤 서비스를 사용하느냐에 따라 달라질건데, 아직은 잘 모르겠다. 안경, 시계, 밴드 등이 거의 대부분인데, 쓸만한 용도를 아직 찾지는 못한 느낌이다. 이것 저것 실험하는 단계인 걸로 보인다.

3-4개 정도의 기기로 제한된다면, 블루투스면 될 것 같다. 활동성을 보장해야 하는 웨어러블 기기의 특성상 자체적으로 인터넷 인프라에 연결하기는 힘들 것 같고. 비교적 무거운 기기인 스마트폰이나 스마트 시계를 통해서 인터넷으로 데이터를 전송하면 되지 않을 까 싶다.

개인적으로 PAN에서의 IoT 기기는 의료정보 제공(진단, 진료, 모니터링)쪽으로 전문분야로 시장이 형성될 것 같다. 안경이나 시계류는 스마트폰의 확장이라고 생각한다. 얘들을 센서로 하는 건 가능은 하겠으나 별 의미는 없다고 보고, 인간의 몸에 센서를 붙인다면 건강/의료 목적말고는 딱히 생각나는게 없다.

센서 수집으로 방향을 잡는다면, Zigbee와 MQTT-SN이 좋은 선택이 될 거 같다.

BAN

BAN(Building area network)는 산업정보를 다루는 영역이다. 대표적인 BAN은 빌딩을 구성하는 기기들이 연결되는 네트워크다. 상당히 많은 센서들이 있을 수 있다. 전기설비, 전력, 엘레베이터, 보일러, 냉동기, 공조, 시큐리티, 소방조, 급배수, 파킹, 통신, 조명, 온도, 습도. 이외에도 농업, 공업등의 분야의 건물(혹은 장소)도 BAN 네트워크 구성이 가능할 것이다.