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가 같이 있다. 그래서 멋모르고 그냥 복붙 하면 이해하기 어려울 수 있다.
coap
.request(
resource /* string */,
method /* "get" | "post" | "put" | "delete" */,
[payload /* Buffer */,
[options /* RequestOptions */]]
)
.then(response => { /* handle response */})
.catch(err => { /* handle error */ })
;
이게 npm에 있는 CoAP Client에 있는 request이다. http와 사실 별 다를바는 없다고 하는데 아직까지는 확실하진 않다. 물론 Node.js 한정 일지는 모르겠다. HTTP 대로 해봤지만 method도 변경이 되지 않았고 payload 또한 전송이 안됐다. 아래의 그림처럼 보내도 GET으로 간다.
그래서 아래 코드처럼 세팅을 했다.
const coap = require("coap"),
req = coap.request('coap://127.0.0.1:5683')
req.write(JSON.stringify(body))
req.on("response", function (res) {
res.pipe(process.stdout)
})
req.end()
req.write 안에 객체를 JSON 타입으로 변환하여 넣어주면 된다.
그럼 Client는 끝이고 req.on 부터는 자신이 보낸 request의 respone의 수신부라고 생각하면 된다.
'IT > Node.js' 카테고리의 다른 글
[Node.js] MQTT Client (0) | 2021.05.21 |
---|---|
[Node.js] CoAP Server Listener (0) | 2021.05.20 |
[Node.js] Redis Key 만료 - N초 후 삭제 (expire) (0) | 2021.05.13 |
[Node.js] Redis Error: node_redis: The GET command contains a invalid argument type. (0) | 2021.05.13 |
[Node.js] Redis err (0) | 2021.04.23 |