623. CoAP (Constrained Application Protocol) - HTTP의 다이어트 버전
핵심 인사이트: 전 세계 웹을 굴리는 HTTP는 너무 무겁다. 글자 하나를 보내려고 해도
GET / HTTP/1.1...같은 무거운 머리말(Header)이 줄줄이 붙는다. 10원짜리 초저전력 IoT 센서에게 HTTP를 쓰라는 건 개미에게 쌀가마니를 들게 하는 격이다. CoAP는 웹(HTTP)의 껍데기만 남기고 알맹이를 극한으로 쥐어짠 '개미용 HTTP'다.
Ⅰ. CoAP의 개념과 개발 목적
- 개념: IETF에서 표준화한 사물인터넷(IoT) 전용 초경량 애플리케이션 계층 통신 프로토콜입니다.
- 목적: CPU 성능과 메모리, 배터리가 극도로 제한된(Constrained) 스마트홈 센서나 소형 노드들이, 기존 인터넷 웹 표준(RESTful, HTTP)의 문법을 거의 그대로 쓰면서도 전력을 아끼며 통신할 수 있도록 HTTP를 극도로 다이어트시킨 프로토콜입니다.
Ⅱ. HTTP와의 결정적 차이점 (어떻게 다이어트 했나?) 🌟
1. TCP 대신 UDP 사용
- HTTP는 연결을 맺기 위해 무겁게 3-way 핸드셰이크를 하는 TCP를 씁니다.
- CoAP는 가볍고 연결 절차가 없는 UDP를 사용합니다. 덕분에 패킷 낭비와 배터리 소모가 급감합니다. (단, UDP는 데이터가 날아갈 수 있으므로, 중요 메시지는 CoAP가 자체적으로 수신 확인(Confirmable Message)을 해주는 안전장치를 둠)
2. 텍스트 대신 이진(Binary) 헤더 압축
- HTTP 헤더는 사람이 읽을 수 있는 텍스트(ASCII)라 크기가 큽니다.
- CoAP 헤더는 텍스트를 버리고 기계만 아는 딱 4바이트짜리 이진(Binary) 포맷으로 압축하여 데이터 낭비를 극단적으로 줄였습니다.
3. 브로커(중개자) 없는 1:1 통신 구조
- 어제 배운 MQTT는 무조건 중간에 '우체국(브로커)' 서버가 있어야 했습니다.
- CoAP는 기존 웹(HTTP)처럼 클라이언트(센서)와 서버가 브로커 없이 1:1로 직접(Client-Server) 붙어서 통신합니다.
Ⅲ. RESTful 아키텍처의 완벽 지원
다이어트를 했음에도 불구하고 놀랍게도 HTTP의 영혼(REST)을 그대로 유지합니다.
- 스마트폰이 CoAP를 지원하는 전구에게
GET /light를 날리면 전구 상태가 오고,PUT /light (value=on)을 날리면 전구가 켜집니다. URI 주소를 쓰고 GET, POST, PUT, DELETE 메서드를 100% 동일하게 씁니다. - 덕분에 중간에 간단한 변환기(HTTP-CoAP Proxy) 하나만 두면, 일반 인터넷 웹 브라우저(HTTP)로도 우리 집 CoAP 센서들을 마치 웹페이지 보듯 부드럽게 조회하고 제어할 수 있습니다.
Ⅳ. 보안 (DTLS 지원)
- HTTP가 암호화를 위해 TLS(SSL)를 쓰듯, CoAP는 UDP 전용으로 가볍게 만든 **DTLS (Datagram TLS)**를 사용하여 데이터를 안전하게 암호화합니다.
📢 섹션 요약 비유: HTTP가 완벽한 문법과 정장(무거운 TCP와 텍스트 헤더)을 입고 우체국에 가서 정식 편지를 부치는 방식이라면, CoAP는 가벼운 반바지(UDP)를 입고 우표 자리에 딱 '4바이트 바코드'만 붙인 초소형 우편 엽서를 편지함에 쏙 넣는 방식입니다. 둘 다 주소(URI)를 찾아가는 편지(RESTful)라는 본질은 같지만, 엽서(CoAP)가 훨씬 가볍고 싸게 먹힙니다.