본문 바로가기

정리글

LWM2M 했던 것들 정리

현 회사에 들어와서 임베디드 어플리케이션을 이것저것 개발하였다.

 

그중에서 주로 하던 것이 수집한 데이터를 서버로 전송하는 기능을 개발하는 것이다.

 

그 방법에는 여러가지가 있는데, 서로 프로토콜을 만들어서 쓰는 경우가 종종 있는 방법이였고,

 

다른 하나는 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에 기능 하나 추가할때마다 영어 페이지를 왕창 해석하고, 소스 분석을 위해 하루종일 모니터를 들여다보았다.