(IoT에서) 프로토콜은 기계와 인터넷 간의 대화를 가능하게 하는 공용 언어 및 규칙 집합입니다. A 지점에서 B 지점으로 데이터를 전송합니다.
HTTP - HyperText Transfer Protocol (하이퍼텍스트 전송 프로토콜)
무상태(stateless)이므로 데이터 전송마다 연결이 필요합니다. 데이터를 읽기 위해 하나의 연결이 필요하고, 데이터를 쓰기 위해 또 하나의 연결이 필요합니다. 대량의 데이터를 처리할 수 있지만 가볍거나 빠르지는 않습니다. 하나의 클라이언트가 하나의 서버에 한 번에 하나씩만 요청할 수 있습니다.
REST - Representational State Transfer (표현 상태 전이)
REST는 정확히는 프로토콜이 아니며, 아키텍처의 한 형식입니다. RESTful API는 데이터를 요청하는 GET, 데이터를 전송하는 PUT, 데이터를 생성하는 POST 그리고 데이터를 삭제하는 DELETE의 4가지 HTTP 메서드를 사용하여 자원을 처리합니다. URL(Uniform Resource Locator, 통합 자원 위치 지시기)을 사용하며, /를 추가하여 하위 계층 내려갈 수 있습니다.
XML - eXtensible Markup Language (확장 가능한 마크업 언어)
인터넷에 연결된 시스템끼리 데이터를 쉽게 주고 받을 목적으로 만들어 졌습니다. 구분 분석의 복잡성과 장황함 때문에 거의 사용되지 않습니다.
JSON - JavaScript Object Notation (자바스크립트 객체 표기법)
최근 가장 자주 사용되는 프로토콜 중 하나입니다. 가벼우며, 사람이 읽고 쓰거나 기계가 구문을 분석하고 생성하기 쉽습니다. 자바스크립트 언어 표준에 기반하고 있지만 자바스크립트를 사용하지 않고 아무 언어나 사용할 수 있습니다.
MQTT - Message Queuing Telemetry Transport (메시지 큐잉 텔레메트리 트랜스포트)
발행 및 구독 메시징 프로토콜입니다. 네트워크 대역폭과 장치 자원 요구사항을 최소화하면서도 신뢰성과 전달 보증을 확보합니다. 사용하기 쉽고 가볍습니다.
브로커와 클라이언트
MQTT에는 브로커와 클라이언트가 있습니다. 브로커는 신뢰할 수 있는 존재로 여겨지며, 연결이 일시적으로 끊어지더라도 네트워크가 작동하는 한 언제나 이용 가능해야 합니다. 브로커는 하나이지만 클라이언트는 여러 개가 있을 수 있습니다. 클라이언트는 토픽(topic)을 발행 및 구독하며, 윈도우에서 사용되듯이 / 분리 기호를 사용하여 단계를 구분합니다. 와일드카드 옵션이 있으며, +는 단일 레벨 와일드카드로 한 단계의 문자열만 대체하며, #는 다중 레벨 와일드카드로 나머지 하위 단계 모두를 대체할 수 있습니다.
CoAP - Constrained Application Protocol (제한된 응용 프로토콜)
REST와 유사하지만 더 가볍습니다. 무상태일 뿐만 아니라 세션이 없어서, 언제든지 데이터를 전송하고 요청할 수 있습니다. REST와 비슷할 정도로 쉽게 웹 응용 프로그램 간에 데이터를 전송할 수 있습니다.
기타 정보
프로토콜에 대한 보다 자세한 내용은 Adafruit과 디지키의 IoT 시리즈 중 에피소드 2와 2A를 참고해 보시거나, Adafruit에서 에피소드 2를 세분화한 페이지를 참고해 보시기 바랍니다.