CoAP (IoT)
Constrained Application Protocol (RFC 7252) — 저전력 IoT 디바이스의 RESTful 통신 표준. UDP 기반이라 작은 패킷, 적은 전력. 게이트웨이는 디바이스의 리소스 URI 에 GET / PUT 으로 접근합니다.
| 상황 | 어떤 카드를 쓰나요 |
|---|---|
| 저전력 IoT 디바이스 (LoRa-WAN gateway 뒤, 배터리 센서) | CoAP (이 페이지) |
| 일반 IoT 게이트웨이 (HTTP API) | HTTP |
| 산업용 PLC | Modbus/TCP, OPC-UA, MELSEC |
| MQTT broker 경유 | MQTT Client |
등록 폼 입력값
| 입력 칸 | 무엇을 적나요 | 예시 |
|---|---|---|
| IP 주소 | CoAP 디바이스 / 게이트웨이 호스트 | device.local, 10.20.30.40 |
| 포트 | CoAP 표준 5683 (평문) / 5684 (DTLS) | 5683 |
| 수집 주기 | 폴링 주기 (ms) | 5000 (배터리 디바이스는 길게) |
태그의 PLC 주소 표기 — 리소스 경로
태그의 PLC 주소 = CoAP 리소스 URI 경로.
| 형식 | 동작 |
|---|---|
/sensors/temperature | 디바이스의 coap://host:5683/sensors/temperature 에 GET — 응답 텍스트 반환 |
/actuators/led | write 시 PUT (text/plain) — value 가 payload |
sensors/multi/T1 | leading / 없으면 자동 보정 |
read 호출은 synchronous GET — 매 polling cycle 마다 디바이스에 직접 요청합니다. 배터리 디바이스의 경우 polling cycle 을 길게 (5000~60000 ms) 잡아 디바이스 sleep 을 깨우는 빈도를 줄이세요.
자주 쓰는 사례
| 사례 | 어떻게 |
|---|---|
| Eclipse Californium 데모 서버 | coap.me / 5683 + /test, /.well-known/core (리소스 디스커버리) |
| LoRa-WAN gateway → CoAP proxy | gateway 의 CoAP API 포트 + 디바이스별 리소스 경로 |
| 산업용 IoT 센서 | 제조사 매뉴얼의 리소스 경로 (/sensor/X) — 보통 텍스트 응답 |
write (PUT)
태그 페이지 또는 REST API 로 값을 쓰면 디바이스에 PUT 요청 (mediaType text/plain) 이 전송됩니다.
plc_address = /actuators/led
value = ON
→ PUT coap://host:5683/actuators/led payload="ON" Content-Format: text/plain
응답이 success (2.04 Changed 등) 면 write 성공.
흔한 문제와 해결
| 증상 | 원인 | 해결 |
|---|---|---|
| 값이 안 들어옴 (read 빈 문자열) | 디바이스가 리소스 미지원 | coap-client -m get coap://host:5683/.well-known/core 로 리소스 목록 확인 (libcoap-bin 패키지) |
| read 가 매우 느림 | 네트워크 packet loss + CoAP retransmit | polling cycle 늘리기, congestion 확인 |
| DTLS 가 필요한 디바이스 | driver 는 평문 CoAP 만 지원 | 디바이스 앞에 DTLS 종단 게이트웨이를 두고 게이트웨이의 평문 쪽을 읽으세요. dtls 옵션이나 포트 5684 지정으로는 해결되지 않습니다 |