1039. CoAP 프로토콜 및 REST 인터페이스 - 제한된 환경 사물인터넷 UDP 기반 초경량 HTTP 대체 규약 웹 소켓 융합 통신 모델

핵심 인사이트: 1038번 MQTT가 "HTTP 찢어버려! 중간에 브로커 우체국 세워서 푸시 알람으로 다 바꿔!"라고 반란을 일으켰다. 그런데 인터넷 웹 개발자(HTTP)들이 빡쳤다. "야! 전 세계 인터넷 인프라가 브라우저(HTTP) 웹 방식인데, 우체국(브로커)을 새로 또 세우라고? 그냥 쓰던 HTTP 웹 방식을 유지하면서, 무거운 껍데기만 쏙 빼고 다이어트시켜서 센서에 박으면 되잖아!" 브로커 없이 인터넷 웹 주소(URL)로 직접 사물을 켜고 끄는 친숙한 클라이언트-서버 방식, 하지만 모기를 위해 깃털처럼 가벼워진 HTTP의 쌍둥이 동생, CoAP다.

Ⅰ. 웹 개발자들의 반격: 왜 REST/HTTP를 못 버리나?

  • 전 세계 개발자는 GET http://myhome/light를 날리면 전구 상태를 읽어오고, PUT을 날리면 전구가 켜지는 RESTful API(466번) 웹 방식에 미치도록 익숙해져 있습니다.
  • 그런데 일반 HTTP 프로토콜은 문자열(Text) 기반이라 헤더 껍데기만 수백 바이트이고, 무거운 무결성 연결(TCP 3-way Handshake)을 쓰기 때문에, 동전 배터리로 1년 버티는 화재경보기 센서에 욱여넣으면 기계가 타버립니다.

Ⅱ. CoAP (Constrained Application Protocol)의 등장 🌟

  • 개념: CPU 메모리가 10KB밖에 안 되고 배터리도 없는 '극도로 제한된 사물인터넷(Constrained Node)' 환경에서, 기존 인터넷 웹 표준인 REST(HTTP) 구조를 그대로 유지하면서 통신 껍데기를 이진수(Binary)로 극단적으로 다이어트시킨 초경량 IoT 웹 프로토콜입니다. (IETF CoRE 워킹 그룹이 제정)

Ⅲ. CoAP의 3대 다이어트 흑마법 🌟 핵심 🌟

어떻게 HTTP와 똑같이 움직이면서 무게는 1/100로 줄였을까요?

1. TCP를 버리고 UDP(비연결형) 탑승

  • 무거운 TCP(확인 전화 후 접속)를 쓰레기통에 처넣습니다.
  • 그냥 목적지 IP를 향해 인사 없이 패킷을 휙 던지고 도망가는 빠르고 가벼운 UDP(969번) 위에서 돌아갑니다. 통신 오버헤드와 배터리 소모가 폭발적으로 줄어듭니다.

2. 바이너리 헤더 다이어트

  • HTTP 헤더는 인간이 읽을 수 있는 긴 영단어(Content-Type: application/json)로 도배되어 수백 바이트를 낭비합니다.
  • CoAP 헤더: 인간이 읽는 걸 포기하고, 오직 컴퓨터만 아는 딱 4바이트짜리 압축된 이진수(Binary) 코드로 헤더 껍데기를 확 줄여버렸습니다.

3. UDP의 결함 메우기: 자체 신뢰성 (Confirmable) 모드

  • UDP로 막 던지면 가다가 패킷이 증발해도 모릅니다. 센서 불이 안 켜지면 곤란합니다.
  • CoAP 패킷 껍데기에 CON (Confirmable, 확인 요망) 이라는 체크박스를 체크해서 보냅니다.
  • 이걸 받은 전구 센서는 불을 켠 뒤, 무조건 "잘 받았고 켰음(ACK)" 이라는 영수증 패킷을 되돌려 보내줍니다. 무거운 TCP 뼈대를 쓰지 않고도 애플리케이션 계층에서 자체적으로 필수적인 배달 확인증(QoS) 메커니즘을 땜질해 놓은 천재적인 구조입니다. (반대로 중요하지 않은 온도는 NON 체크박스로 막 던집니다.)

Ⅳ. HTTP와의 완벽한 번역 호환성 (Proxy)

  • 스마트폰 브라우저는 무거운 HTTP(REST)로 명령을 쏩니다. ➜ GET /temp
  • 집의 공유기(CoAP 프록시 변환기)가 이를 0.1초 만에 눈에 보이지 않게 가벼운 CoAP 바이너리 덩어리로 압축 번역합니다.
  • ➜ 센서는 무거운 걸 받지 않고 가벼운 CoAP로만 대답합니다. 개발자 입장에서는 센서가 마치 일반 웹 서버(HTTP)인 것처럼 너무나 편하게 코딩(GET/PUT/POST)할 수 있는 완벽한 웹 융합 체계가 열립니다.

📢 섹션 요약 비유: 기존 HTTP 통신은 피자 1판을 시켰는데 **'무게 100kg짜리 철가방 보온통(거대한 TCP/Text 헤더)'**에 넣어서 벤츠를 타고 배달하는 사치스러운 배달부입니다. 동전 배터리로 연명하는 산골짜기 센서는 이 철가방을 열 힘조차 없어 깔려 죽습니다. 앞서 배운 1038번 MQTT가 "직접 배달하지 말고 중간에 우체국(브로커)을 지어!"라고 판을 엎었다면, CoAP는 기존 1:1 다이렉트 배달 방식(REST)을 끝까지 고집하면서 철가방만 뜯어고친 쌍둥이입니다. 무거운 철가방을 다 버리고, 피자를 **'10g짜리 초경량 비닐봉지(바이너리 UDP)'**에 담아 오토바이를 타고 센서 집 앞마당에 휙 던져버리고 도망갑니다. 센서가 봉지를 까보면 그 안에 든 내용물(GET, POST 명령)은 고급 철가방(HTTP)에 들었던 것과 100% 똑같은 웹의 맛이 나기 때문에, 전 세계 웹 개발자들이 아무 이질감 없이 모기만 한 사물인터넷 기기를 스마트폰으로 쉽게 껐다 켤 수 있게 만들어준 궁극의 다이어트 마법입니다.