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% 똑같은 웹의 맛이 나기 때문에, 전 세계 웹 개발자들이 아무 이질감 없이 모기만 한 사물인터넷 기기를 스마트폰으로 쉽게 껐다 켤 수 있게 만들어준 궁극의 다이어트 마법입니다.