AWS IoT

AWS IoT에서 MQTT, HTTP, WebSocket을 이용한 통신 개요

임베디드 친구 2025. 3. 23. 07:52
728x90
반응형

AWS IoT에서 MQTT, HTTP, WebSocket을 이용한 통신 개요

1. 서론

AWS IoT는 다양한 프로토콜을 지원하여 디바이스와 클라우드 간의 원활한 통신을 가능하게 합니다. 이 중에서 MQTT, HTTP, WebSocket은 가장 널리 사용되는 주요 프로토콜입니다. 각 프로토콜은 서로 다른 특성과 장점을 가지며, 사용자의 요구 사항에 맞게 선택할 수 있습니다.

본 포스팅에서는 AWS IoT에서 지원하는 MQTT, HTTP, WebSocket 프로토콜에 대한 개요와 각각의 특징, 활용 방안에 대해 설명하겠습니다.

2. AWS IoT에서의 프로토콜 개요

AWS IoT Core는 클라우드와 디바이스 간의 연결을 위해 다음과 같은 주요 프로토콜을 지원합니다:

  • MQTT(Message Queuing Telemetry Transport)
  • HTTP(HyperText Transfer Protocol)
  • WebSocket

각 프로토콜은 데이터 송수신 방식과 활용 목적이 다릅니다. 따라서 IoT 애플리케이션에서 적절한 프로토콜을 선택하는 것이 중요합니다.


3. MQTT (Message Queuing Telemetry Transport)

3.1 MQTT 개요

MQTT는 저전력, 저대역폭 환경에서 동작하도록 설계된 경량 메시징 프로토콜입니다. IoT 디바이스가 클라우드와 실시간으로 데이터를 주고받을 때 많이 사용됩니다.

3.2 MQTT의 주요 특징

  • 출판-구독(Publish-Subscribe) 모델: 디바이스는 메시지를 발행(Publish)하고, 구독(Subscribe)하는 방식으로 데이터를 주고받습니다.
  • 경량 프로토콜: 데이터 패킷 크기가 작아 네트워크 대역폭을 절약할 수 있습니다.
  • QoS(Quality of Service) 지원: 0, 1, 2 세 가지 QoS 수준을 제공하여 신뢰성 있는 메시지 전송을 보장할 수 있습니다.
  • 지속적 연결: 디바이스가 네트워크 상태를 유지하며, 재연결 시에도 원활한 메시지 교환이 가능합니다.

3.3 AWS IoT에서의 MQTT 사용 예제

AWS IoT에서는 MQTT 프로토콜을 활용하여 IoT 디바이스와 클라우드 간의 메시지를 교환할 수 있습니다.

import paho.mqtt.client as mqtt

# MQTT 클라이언트 생성
client = mqtt.Client()

# AWS IoT 브로커에 연결
client.connect("your-aws-iot-endpoint", 8883, 60)

# 메시지 발행 (Publish)
client.publish("iot/topic", "Hello, AWS IoT!")

# 메시지 구독 (Subscribe)
def on_message(client, userdata, msg):
    print(f"Received message: {msg.payload.decode()}")

client.subscribe("iot/topic")
client.on_message = on_message

client.loop_forever()

위 코드는 AWS IoT Core의 MQTT 브로커에 연결하고 메시지를 발행 및 구독하는 간단한 예제입니다.


4. HTTP (HyperText Transfer Protocol)

4.1 HTTP 개요

HTTP는 가장 널리 사용되는 웹 통신 프로토콜로, AWS IoT Core에서도 RESTful API를 통해 HTTP 기반의 요청을 지원합니다. 주로 저빈도 데이터 전송이나 설정 변경 시 유용합니다.

4.2 HTTP의 주요 특징

  • 요청-응답(Request-Response) 모델: 클라이언트가 요청(Request)을 보내고, 서버가 응답(Response)하는 방식으로 동작합니다.
  • 보안: TLS(Transport Layer Security)를 통해 안전한 데이터 전송을 제공합니다.
  • 기존 웹 기술과 호환: IoT 디바이스뿐만 아니라 웹 애플리케이션에서도 쉽게 접근할 수 있습니다.
  • 비연결형(Stateless): 매 요청마다 연결을 설정해야 하므로 실시간성이 중요한 환경에서는 비효율적일 수 있습니다.

4.3 AWS IoT에서의 HTTP 사용 예제

AWS IoT에서 HTTP 프로토콜을 활용하여 데이터를 전송하는 방법을 간단한 Python 코드로 살펴보겠습니다.

import requests
import json

# AWS IoT 엔드포인트 URL
url = "https://your-aws-iot-endpoint/things/device_name/shadow"

# HTTP 요청 헤더
headers = {
    "Content-Type": "application/json",
    "x-amz-customauthorizer-name": "your-auth-name"
}

# 데이터 페이로드
payload = json.dumps({"state": {"desired": {"temperature": 25}}})

# HTTP POST 요청 보내기
response = requests.post(url, data=payload, headers=headers)

print(response.status_code)
print(response.json())

이 방식은 배터리 소모가 적고, HTTP API를 사용하는 시스템과 쉽게 연동할 수 있다는 장점이 있습니다.


5. WebSocket

5.1 WebSocket 개요

WebSocket은 클라이언트와 서버 간의 양방향 통신을 지원하는 프로토콜로, AWS IoT Core에서도 지원됩니다. WebSocket을 활용하면 브라우저 또는 다른 애플리케이션과 실시간 연결을 유지할 수 있습니다.

5.2 WebSocket의 주요 특징

  • 양방향 통신(Bidirectional Communication): 서버와 클라이언트 간 지속적인 데이터 전송이 가능합니다.
  • 지속적 연결(Persistent Connection): 연결을 유지하면서 데이터를 송수신할 수 있어 실시간성이 중요한 애플리케이션에 적합합니다.
  • 효율적인 데이터 전송: HTTP보다 오버헤드가 적고 빠른 데이터 전송이 가능합니다.

5.3 AWS IoT에서의 WebSocket 사용 예제

AWS IoT에서 WebSocket을 활용하는 예제 코드를 살펴보겠습니다.

import websocket
import json

def on_message(ws, message):
    print(f"Received: {message}")

def on_open(ws):
    message = json.dumps({"action": "sendmessage", "data": "Hello, AWS IoT!"})
    ws.send(message)

# WebSocket 클라이언트 생성
ws = websocket.WebSocketApp("wss://your-aws-iot-endpoint",
                            on_message=on_message)
ws.on_open = on_open
ws.run_forever()

WebSocket은 실시간 데이터 스트리밍이 필요한 경우 매우 유용하게 활용될 수 있습니다.


6. 결론

AWS IoT Core에서 제공하는 MQTT, HTTP, WebSocket 프로토콜은 각각의 장점과 단점이 있으며, 사용자의 요구 사항에 따라 적절한 방식을 선택해야 합니다.

  • MQTT: 저전력, 저대역폭 환경에서 실시간 통신이 필요한 경우 적합합니다.
  • HTTP: 주기적인 요청이 필요한 경우 또는 기존 웹 애플리케이션과의 연동이 필요한 경우 유용합니다.
  • WebSocket: 브라우저 및 애플리케이션과의 실시간 양방향 통신이 필요할 때 적합합니다.

AWS IoT 애플리케이션을 설계할 때, 위 프로토콜을 적절히 활용하여 효율적인 IoT 시스템을 구축하시기 바랍니다.

반응형