현 회사에 들어와서 임베디드 어플리케이션을 이것저것 개발하였다.
그중에서 주로 하던 것이 수집한 데이터를 서버로 전송하는 기능을 개발하는 것이다.
그 방법에는 여러가지가 있는데, 서로 프로토콜을 만들어서 쓰는 경우가 종종 있는 방법이였고,
다른 하나는 LWM2M 프로토콜을 사용하는 방식이었다.
특히, Network Management System, 즉, 모뎀의 통신 상태나 데이터를 가져오는 기능을 만들때 이 LWM2M 을 자주 사용하였다.
솔직히 아직도 잘 안다고 말할수는 없지만, 내가 만든 어플리케이션 이곳저곳에서 많이 사용하였다.
그래서 이 LWM2M(Light Weight Mechine to Mechine)이 무엇이냐고 물어보면, CoAP 기반의 IoT 장치 리소스 관리 프로토콜이라고 간단하게 말할 수 있다.
oneM2M이라는 표준화기구에서 IoT 장치의 통신을 위한 가벼운(light weight) 프로토콜을 목적으로 만들었다.
특히, CoAP을 사용하기에 낮은 대역폭을 가지거나, 전송 속도가 느린 장치에서 사용하기 좋다.
LWM2M이 나오는데 갑자기 CoAP은 또 뭐다냐.
CoAP(Constrained Application Protocol)는 Rest 모델을 기반으로 하는 프로토콜인데, 이때문에 기존의 HTTP와 호환 및 연동이 간편하다.
이 CoAP 덕에 서버는 리소스를 URL로 접근이 가능하다.
CoAP은 UDP 기반의 통신을 하기 때문에, LWM2M은 MQTT 와 달리 TCP가 아닌 UDP 통신을 사용한다.
말그대로 네트워크 상태가 안좋은 상태를 가정하기 때문에 TCP 처럼 상호 확인을 하면 데이터 전송이 힘들어지기 때문이다.
그래서 나는 이 프로토콜을 처음부터 개발하였는가?
그건 아니다. 대부분 오픈소스를 가져와 포팅하고 모딩하여 사용하였다.
지금까지 써온 LWM2M Open Source는 Leshan, wakaama, awa이고, 오픈 소스 이외에 만들어진 소스를 하나 더 사용했었다.
LWM2M 이 만들어진지는 꽤 됐는데, 구글에서 정보를 찾으려면 많이 나오지 않는다.
그래서 나는 LWM2M에 기능 하나 추가할때마다 영어 페이지를 왕창 해석하고, 소스 분석을 위해 하루종일 모니터를 들여다보았다.
'정리글' 카테고리의 다른 글
JAVA Maven 프로젝트에서 JNA 사용 (0) | 2020.09.16 |
---|---|
IIO - Linux Industrial I/O subsystem (0) | 2020.09.02 |
TCP tunneling 을 빙자한 Raw Socket (0) | 2020.06.11 |
mbed OS 에서 메모리 사용량 체크 mbed_stats.h (0) | 2019.12.27 |
시리얼 통신 (0) | 2019.07.03 |