BLOG
AWS는 최근 AWS IoT Core 용 MQTT retained message의 general availability(GA)를 발표했습니다. 이 기능을 사용하면 현재 및 잠재 구독자에게 전달하기 위해 지정된 MQTT 주제당 단일 메시지를 저장할 수 있습니다. retained message를 생성하는 것은 간단한데요, 게시할 때 보관된 플래그를 설정하여 AWS IoT Core 브로커가 메시지를 저장하도록 하기만 하면 됩니다. 이 시점에서 메시지는 모든 현재 구독자에게 전달되고, 향후 해당 주제를 구독하는 모든 새 장치에도 전달됩니다. 또한, 이번에 출시되는 버전에는 보관된 메시지를 관리하는 데 유용한 업데이트된 API가 포함되어 있습니다. 해당 retained message는 AWS IoT Core를 사용할 수 있는 모든 리전에서 사용이 가능합니다. 이번 포스팅에서는 이 기능을 간략히 소개하고, IoT 프로젝트를 설계할 때 염두에 두어야 할 몇 가지 사례를 알려드리고자 합니다. 이와 더불어 AWS IoT 콘솔과 프로그래밍 방식에서 이 기능을 사용하는 방법도 함께 알아보겠습니다.
개요
retained message는 MQTT 3.1.1 사양에 정의되어 있으며, 메시지를 게시할 때 보관된 플래그를 ‘True’로 설정하여 생성합니다. 이 플래그는 AWS IoT 디바이스 SDK와 대부분의 MQTT 3.1.1 호환 클라이언트에서 지원됩니다. retained message는 일반 메시지와 마찬가지로 현재 구독 중인 모든 클라이언트에게 전달되며 해당 토픽을 구독하는 새 클라이언트에게도 자동으로 전송됩니다. 주제당 하나의 보관된 메시지만 저장할 수 있으므로 전송되는 모든 보관된 메시지는 기존의 보관된 메시지가 있는 경우 이를 대체하게 됩니다.
AWS IoT Core는 메시지가 마지막으로 업데이트되거나 액세스된 후 최대 3년 동안 보관된 메시지를 저장합니다. 빈 페이로드가 있는 새 보유 메시지를 게시하면 특정 주제에서 현재 보관된 메시지를 제거할 수 있습니다.
AWS IoT 콘솔 : 이 페이지는 현재 리전에서 보관된 모든 메시지를 보고 업데이트할 수 있는 “관리” 탭에서 찾을 수 있습니다. 새로운 ListRetainedMessages, GetRetainedMessage 및 업데이트된 Publish API를 사용하여 HTTP를 통해 관리할 수도 있습니다.
보관된 메시지의 사용 사례
1. 장치에 대한 구성 설정 배포
retained message를 사용하는 이유 중 하나는 여러 개의 장치에 대한 구성 설정을 저장할 수 있기 때문입니다. 이는 새로 프로비저닝된 장치가 처음 온라인 상태가 된 후 bootstrapping 프로세스를 완료할 때 또는 장치가 IoT 애플리케이션에 연결되고 해당 기능에 대한 정보가 필요한 경우에 검색 메시지로 유용합니다. 장치 또는 다른 클라이언트도 필요에 따라 보존 메시지를 최신 구성 설정으로 업데이트할 수 있습니다. 각 장치에 고유한 구성 항목이 있는 장치 별 기준으로 이 접근 방식을 사용할 경우 AWS IoT Core용 Device Shadow를 고려하는 것이 좋습니다.
그러나 한 가지 차이점은 Device Shadow 업데이트를 구독할 때와 의도적으로 현재 상태를 요청할 때 보존 메시지가 자동으로 전달된다는 것입니다. 둘 사이의 주요한 차이점을 이해하기 위해서 특정 사용 사례에 적합한 도구를 선택하는 데 도움이 되는 표가 포함된 MQTT 보유 메시지 사용을 확인해보세요.
retained message를 사용하는 또 다른 이유는 공유 구성을 여러 장치에 브로드캐스팅하기 위해서입니다. 예를 들어 장치 그룹에 보낼 구성이 있는 경우 해당 장치가 공유 주제를 구독하도록 하면 해당 특정 주제에 대한 현재 및 모든 잠재 구독자가 공유 구성의 최신 버전을 갖게 됩니다. 고유한 장치 구성은 여전히 Device Shadow에서 관리되거나 고유한 주제에 대해 유지될 수 있는 반면, 공유 또는 그룹 설정은 공유 주제 내에서 유지될 수 있습니다. 즉, 사용자는 여러 장치가 구독하는 주제에 메시지를 게시하고, 두 개의 온라인 장치가 메시지를 수신합니다. 유지 플래그를 ‘True’로 설정하면 AWS IoT Core 브로커가 해당 주제를 구독하는 향후 디바이스를 위해 메시지를 저장합니다. 이후 세 번째 장치가 현재 오프라인 상태인 경우 사용자가 보낸 메시지가 유지되므로 오프라인 장치가 연결되고 해당 주제를 구독하면 자동으로 메시지를 수신하게 되는 것입니다.
2. 마지막으로 알려진 장치 상태 추적
보관된 메시지를 사용하는 또 다른 방법은 하나 이상의 장치의 현재 상태를 저장하는 것입니다. 예를 들어 디바이스는 현재 상태를 고유한 주제에 대해 주기적으로 게시하고 최신 상태가 AWS IoT Core 브로커에 의해 항상 저장되도록 매번 유지 플래그를 ‘True’로 설정할 수 있습니다. 클라우드 서비스 또는 고객 대면 애플리케이션과 같은 다른 클라이언트가 장치 상태를 필요로 하는 경우 장치가 업데이트를 게시할 때까지 기다리지 않고 특정 주제를 구독하고 자동으로 수신할 수 있습니다. 첫 번째 장치 구성 예제와 마찬가지로 장치별로 고유한 보유 메시지 주제를 사용하여 상태를 유지 관리하는 이 특정 패턴은 Device Shadow와 유사성을 공유하므로 MQTT 보유 메시지 사용 의 비교 표에서 이를 확인할 수 있습니다. 이 표를 통해 특정 사용 사례에 가장 적합한 옵션을 선택하는 데 도움을 받을 수 있습니다.
장치의 현재 연결 상태를 유지하려면 ‘Will Retain’ 플래그를 사용하여 장치가 비정상적으로 연결 해제된 경우 현재 및 미래의 가입자가 해당 장치의 현재 연결 상태를 알 수 있도록 특정 주제의 보유 메시지가 업데이트되도록 합니다. 이렇게 하면 장치가 비정상적으로 연결이 끊긴 경우, 다시 연결하기 전에 해당 주제를 구독하는 다른 장치에 현재 오프라인 상태라는 알림이 자동으로 전송됩니다.
AWS IoT 콘솔에서 retained message 사용하기
AWS IoT 콘솔 내에서 보관된 메시지를 테스트하기 위해 MQTT 테스트 클라이언트와 관리 섹션에서 찾을 수 있는 새로운 보관된 메시지 페이지의 조합을 사용합니다. 이 경우 보관된 메시지에는 이 기능에 대한 액세스를 제어할 수 있는 연결된 AWS IoT Core 정책 작업이 있다는 점에 유의해야 합니다.
retained message에 대한 액세스 권한을 부여하는 방법의 예시는 Example AWS IoT policies를 통해 확인할 수 있습니다. 먼저 MQTT 테스트 클라이언트를 사용하여 유지된 메시지를 테스트 주제에 게시합니다. 그런 다음 Retained Messages 탭에서 해당 메시지를 보고 업데이트하는 방법을 살펴보겠습니다. 마지막으로 MQTT 테스트 클라이언트로 돌아가서 해당 테스트 주제를 구독하고 브라우저에서 바로 보유된 메시지의 전달을 확인합니다.
1단계: MQTT 테스트 클라이언트로 테스트 메시지 게시하기
- AWS Management 콘솔에 로그인하고 상단의 서비스를 선택하여 AWS IoT Core로 이동합니다.
- 좌측의 탐색 탭에서 Test를 선택한 후 MQTT test client를 진행합니다.
- 주제에 Publish탭을 선택하고 테스트에 사용할 주제 이름을 입력합니다. 우리가 스마트 홈 제품을 만들고 특정 설정 또는 프리미엄 구독 서비스의 사용 선택과 같은 장치 설정에 영향을 미치는 계정 설정을 저장하는 주제를 고객별로 설정하려고 한다고 가정해 보겠습니다.
- 주제로 “users/settings/user01″을 입력합니다.
- 메시지에 고객의 현재 계정 유형을 포함하려면 {“account_type” : “standard”}를 입력하세요.
- Additional configuration을확장하고 이 주제에 대한 Retain message 확인란을 선택합니다.
- Publish를 선택하세요.
2단계: retained message 페이지에서 보관된 메시지 보기
1. 이제 보관된 메시지를 게시했으므로 왼쪽 탐색 메뉴에서 Manage를 선택한 다음 Retained messages를 선택합니다.
여기에 현재 메시지가 보관된 주제 목록이 표시됩니다.
2. 1단계에서 메시지를 게시한 주제를 선택합니다. 여기에서 현재 주제에 저장되고 있는 보관된 메시지를 볼 수 있습니다.
3단계: MQTT 테스트 클라이언트에서 구독하기
이제 테스트 메시지가 성공적으로 유지되었음을 확인했으므로 작동하는 모습을 보겠습니다.
- 왼쪽 탐색의Test 섹션에서 MQTT test client를 선택합니다.
- 주제 Subscribe 탭을선택합니다.
- Topic filter에 “users/settings/user01”를 입력합니다.
- Subscribe을선택합니다. 화면에 보관된 메시지가 팝업으로 표시되어야 합니다.
프로젝트 내에서 retained message 사용하기
보관된 메시지는 MQTT 3.1.1 사양의 표준 기능이므로 디바이스 및 애플리케이션 로직 내에서 보관된 메시지 게시는 AWS IoT Device SDK 및 대부분의 MQTT 클라이언트에서 지원됩니다. AWS IoT Core에 대한 보존 메시지가 표준 기능과 다른 점은 특정 주제에 저장된 보존 메시지를 수신하려면 와일드카드(예: #,*)를 사용하지 않고 주제 필터를 정확히 일치시켜야 한다는 것입니다.
AWS IoT Device SDK를 사용하여 retained message 게시하기
Python용 AWS IoT Device SDK v2를 사용하여 retained message를 게시하는 방법의 예를 살펴보겠습니다. 아래는 메시지 게시를 담당하는 MQTT Pub/Sub 샘플 의 스니펫입니다.
mqtt_connection.publish(
topic=args.topic,
payload=message_json,
qos=mqtt.QoS.AT_LEAST_ONCE)
Python
이 예는 기본적으로 QoS 1로 설정되어 있지만 QoS 0은 retained message에도 지원됩니다. 유지 플래그 설정과 관련된 사항은 API 문서에서 확인할 수 있는데요, publish class를 사용할 때 ‘retain=bool’ 매개변수만 추가하면 됩니다.
따라서 Python용 AWS IoT Device SDK v2를 사용하여 보관된 메시지를 게시하려면 다음과 같이 해당 파라미터를 스니펫 끝에 추가해야 합니다.
mqtt_connection.publish(
topic=args.topic,
payload=message_json,
qos=mqtt.QoS.AT_LEAST_ONCE,
retain=True)
구독자는 동일한 플래그를 확인하여 보유된 메시지를 표준 메시지와 구별할 수 있습니다. 이를 테스트하려면 “hello from python”이라는 주제로 “users/settings/user01″에 보관된 새 메시지를 게시해야 합니다. 예제는 다음 명령줄을 사용하여 실행할 수 있습니다.
Bash
python3 pubsub.py –endpoint YOUR-ENDPOINT \
–port 8883 \
–cert YOUR-CERT \
–key YOUR-KEY \
–root-ca ROOT-CA \
–client-id YOUR-CLIENT-ID \
–topic users/settings/user01 \
–count 1 \
–message ‘hello from python!’
AWS IoT 콘솔에서 이제 이 새 메시지가 Retained messages 섹션에 반영되었는지 확인합니다. 이 예제에서 Python을 살펴보았지만 기본적으로 유지 플래그도 지원하는 다른 AWS IoT 디바이스 SDK 도 확인해보세요.
결론
AWS IoT Core용 MQTT 보관 메시지를 사용하면 현재 및 잠재 구독자에게 자동으로 전달할 주제에 대한 메시지를 저장할 수 있습니다. Retained messgae 생성 및 관리는 AWS IoT 콘솔 내에서 또는 AWS IoT Device SDK 와 새로운 ListRetainedMessages , GetRetainedMessage 및 업데이트된 Publish API를 통해 수행할 수 있습니다 . 관련 설정 및 서비스 제한에 관한 정보는 AWS IoT Core 엔드포인트 및 할당량에서 확인할 수 있습니다. 이 기능은 현재 AWS IoT Core를 사용할 수 있는 모든 리전에서 사용할 수 있으며, 더욱 자세한 정보는 MQTT 보관 메시지 사용 설명서를 확인해주세요!
원문URL: https://aws.amazon.com/ko/blogs/iot/getting-started-mqtt-retained-messages-aws-iot-core/
메가존 클라우드 TechBlog는 AWS BLOG 영문 게재 글이나 관련 기사 중에서 한국 사용자들에게 유용한 정보 및 콘텐츠를 우선적으로 번역하여 내부 엔지니어 검수를 받아 정기적으로 게재하고 있습니다. 추가로 번역 및 게재를 희망하는 글에 대해서 관리자에게 메일 또는 SNS 페이지에 댓글을 남겨주시면, 우선적으로 번역해서 전달해드리도록 하겠습니다.