그렇지만 Router 부분이 다르다. HTTP Express에선 아래처럼 router 에서 method를 설정하며 경로를 설정할 수 있지만 CoAP은 조금 다르다.
HTTP Router
CoAP은 createServer()를 한 후 coap.on을 하면 서버의 수신부가 된다. 이후부터는 HTTP랑 동일하며 method 및 다른 설정을 할 수가 없었다. 나도 왠만한 방법을 다 해봤지만 궁금해지기 시작했다. 그래서 현재는 req.payload를 사용하여 데이터를 주고받고 있다. 현재 상태에서 해볼만 한건 다 해본것 같다. 혹시 Node.js 에서 CoAP 프로토콜을 잘 사용하시는 분 댓글로 남겨주세요...
CoAP은 무선 센서 네트워크 노드처럼 자원에 제약이 있는 장치들에서 사용할 목적으로 고안된 서비스 계층 프로토콜이다. CoAP은 단순한 웹 연동을 위해 HTTP로 쉽게 변환되도록 설계되어 있으며 멀티캐스트 지원과 같은 특수한 요건을 충족하면서도 부하가 매우 낮으며 단순한 편이다. 멀티캐스트, 낮은 부하, 단순성은 심도 있게 임베디드 되는 경향이 있고 전통적인 인터넷 장치보다 훨씬 더 적은 메모리와 전력 공급을 지니는 경향이 있는 사물인터넷(IoT) 및 사물통신(M2M) 장치에 매우 중요하다. 즉, 효율성이 매우 중요하다. CoAP은 UDP 또는 UDP 유사 프로토콜을 지원하는 대부분의 장치에서 구동할 수 있다. - 위키백과
즉 IoT 등의 저전력을 요구하는 장치에서 사용되는 듯 하다.
CoAP은 HTTP의 간소화라고 하는데 아직까지 Node.js에선 제대로 풀이가 되지 않은 것 같다.
우선 npm이랑 깃을 며칠동안 봤다. method 설정이 안 된다. 기본값인 GET으로만 된다. 물론 Listener, Clinet 다 마찬가지다. CoAP은 HTTP의 간소화 버전이라 대부분의 Header가 빠진다. 기본적인 내용을 읽어봤지만 굳이 내가 기억할 필요는 없는 것 같아 기억하진 않는다... CoAP은 Body가 아닌 Payload를 사용한다. 물론 Buffer를 사용해야 한다는데 내가 사용하는 CoAP은 Buffer 사용시 전송이 되지 않았다. 그래서 JSON 타입으로 데이터를 보냈다.
패킷 방식도 있는데 아직 해보진 않았다.
npm에 CoAP이 있고 CoAP Client가 있었는데 둘 다 해본 결과 별 다르지 않다. CoAP은 Listener와 함께 Client에서 사용할 request가 같이 있다. 그래서 멋모르고 그냥 복붙 하면 이해하기 어려울 수 있다.
이게 npm에 있는 CoAP Client에 있는 request이다. http와 사실 별 다를바는 없다고 하는데 아직까지는 확실하진 않다. 물론 Node.js 한정 일지는 모르겠다. HTTP 대로 해봤지만 method도 변경이 되지 않았고 payload 또한 전송이 안됐다. 아래의 그림처럼 보내도 GET으로 간다.