Notice
Recent Posts
Recent Comments
Link
투케이2K
176. (Aws/Amazon) [AWS IoT Device Gateway] iotdevicegateway 설명 정리 - IoT 디바이스 및 IoT Core 통신 연결 서비스 본문
Aws (Amazon)
176. (Aws/Amazon) [AWS IoT Device Gateway] iotdevicegateway 설명 정리 - IoT 디바이스 및 IoT Core 통신 연결 서비스
투케이2K 2026. 1. 24. 08:57728x90
[개발 환경 설정]
개발 환경 : Aws / Amazon Web Services

[설명 정리]
// --------------------------------------------------------------------------------------
[개발 및 환경]
// --------------------------------------------------------------------------------------
- 인프라 : Aws / Amazon Web Services
- 기술 구분 : Aws / Aws Iot Core / MQTT / iotdevicegateway
- 사전) Aws Iot Core 간단 설명 :
>> AWS IoT 는 IoT 디바이스를 다른 디바이스 및 AWS 클라우드 서비스에 연결하는 클라우드 서비스를 제공합니다.
>> 디바이스가에 연결할 수 있는 경우 AWS IoT는 AWS 가 제공하는 클라우드 서비스에 디바이스를 AWS IoT 연결할 수 있습니다.
>> AWS IoT Core 메시지 브로커는 MQTT 및 MQTT over WSS 프로토콜을 사용하여 메시지를 게시하고 구독하는 디바이스 및 클라이언트를 지원합니다.
- HTTPS 프로토콜을 사용하여 메시지를 게시하는 디바이스와 클라이언트도 지원합니다.
- 사전) MQTT (Message Queuing Telemetry Transport) 설명 :
>> MQTT 는 경량 메시지 프로토콜로, 주로 IoT(사물인터넷) 환경에서 사용됩니다
>> MQTT 목적 : 제한된 네트워크 환경(저속, 불안정)에서 효율적으로 메시지를 주고받기 위해 설계
>> MQTT 기반 : TCP/IP 위에서 동작
>> MQTT 패턴 : Publish/Subscribe 모델을 사용
- Publisher : 메시지를 발행하는 클라이언트
- Subscriber : 특정 주제(topic)를 구독하는 클라이언트
- Broker: 메시지를 중개하는 서버 (예: Mosquitto)
>> MQTT 주요 특징 :
- 경량성 : 헤더가 매우 작음(2바이트부터 시작)
- QoS (Quality of Service) :
$ QoS 0: 최대 한 번 전달(보장 없음)
$ QoS 1: 최소 한 번 전달(중복 가능)
$ QoS 2: 정확히 한 번 전달(가장 안전)
- 지속 연결 : KeepAlive로 연결 상태 유지
- Last Will and Testament (LWT) : 클라이언트 비정상 종료 시 브로커가 메시지 발행
- 토픽 기반 라우팅 : 계층적 구조(/home/temperature 등)
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[설 명]
// --------------------------------------------------------------------------------------
1. AWS IoT Device Gateway 는 IoT 디바이스가 AWS IoT Core 와 통신할 수 있도록 해주는 접속 관문 (Endpoint) 입니다.
2. ✅ AWS IoT Device Gateway 주요 기능 정리 :
>> MQTT, MQTT over WebSocket(WSS), HTTPS 등의 프로토콜 지원
>> 디바이스 인증/인가 처리
>> 메시지를 브로커(Topics)에 Publish/Subscribe
>> 수백만대의 디바이스 연결을 확장성 있게 처리
3. AWS IoT Device Gateway 를 통해 WebSocket (웹소켓) 으로 MQTT 연결 지원 여부
>> AWS IoT Core 는 MQTT 및 WebSocket Secure(WSS) 프로토콜을 사용하여 메시지를 게시하고 구독하는 디바이스 및 클라이언트와 HTTPS 프로토콜을 사용하여 메시지를 게시하는 디바이스 및 클라이언트를 지원합니다
>> 지원) MQTT (프로토콜) : X.509 인증서 (인증 방식) : 8883 포트
>> 지원) MQTT over WebSocket (WSS) (프로토콜) : AWS Signature Version 4 (SigV4) 또는 Custom Auth (인증 방식) : 443 포트
4. ✅ AWS IoT Device Gateway 를 통한 WebSocket (WSS) MQTT 연결의 필요 조건
>> SigV4 인증 필요 : 브라우저·서버에서 WebSocket을 통해 MQTT로 연결하려면 AWS SigV4 로 서명한 URL을 생성해야 합니다.
>> 포트 443 사용 : 웹에서 WSS를 통해 접속할 때는 HTTPS와 동일하게 포트 443을 사용합니다.
>> 지정 규칙 경로 (path) 로 접속 시도 : wss://<your-endpoint>.iot.<region>.amazonaws.com/mqtt
5. AWS IoT Device Gateway 를 통한 웹 소켓 연결 예시 자바스크립트 소스 코드
<script src="https://cdn.jsdelivr.net/npm/paho-mqtt@1.1.0/paho-mqtt.min.js"></script>
<script type="module">
// --------------------------------------------------
// [모듈 import]
import aws4 from "https://esm.sh/aws4fetch@1.0.17";
const { AwsClient } = aws4;
// --------------------------------------------------
// [전역 변수 선언]
const endpoint = 'a1..pd9-ats.iot.ap-northeast-1.amazonaws.com'; // [AWS iot:Data-ATS 도메인]
const region = 'ap-northeast-1'; // [AWS 리전]
const accessKey = 'AK..7Q'; // [IAM 액세스 키]
const secretKey = 'Zz..xj'; // [IAM 시크릿 키]
var mqttClient = null;
// --------------------------------------------------
// [로직 처리 수행]
window.onload = async function() {
// --------------------------------------
// AWS : SigV4 인증 URL 생성
// --------------------------------------
const aws = new AwsClient({
accessKeyId: accessKey,
secretAccessKey: secretKey,
service: "iotdevicegateway", // ✅ 중요!
region: region,
});
const url = `wss://${endpoint}/mqtt`; // [AWS iot:Data-ATS 도메인]
// [SigV4 서명된 URL 생성]
const signed = await aws.sign(url, {
method: "GET",
signQuery: true // ✅ signQuery: true 옵션 추가
});
// --------------------------------------
// Set : Client Id
// --------------------------------------
const clientId = "clientId-" + Math.random();
// --------------------------------------
// Set : Paho.Client
// --------------------------------------
mqttClient = new Paho.Client(signed.url, "clientId-" + Math.random()); // ✅ AWS WebSocket : wss:// 443 자동 할당
// --------------------------------------
// Set : callback handlers
// --------------------------------------
mqttClient.onConnectionLost = onConnectionLost;
mqttClient.onMessageArrived = onMessageArrived;
// --------------------------------------
// Connect : mqttClient
// --------------------------------------
mqttClient.connect({
useSSL: true, // ✅ SSL/TLS 사용 여부 : 반드시 true 설정
mqttVersion: 4, // MQTT 프로토콜 버전 (MQTT v3.1.1)
timeout: 20, // 연결 시도 타임아웃 (초) → 기본값은 30초
keepAliveInterval: 30, // ✅ Ping 주기 (초) → 기본값은 60초
cleanSession: true, // ✅ 이전 세션 구독 정보 삭제
/*
invocationContext: { // 연결 시 컨텍스트 객체 → 콜백에서 context로 접근 가능
clientId: "mqtt-client"
},
// */
onSuccess:onConnect, // 연결에 따른 콜백
onFailure: (err) => console.error("Connection failed : ", err) // 연결에 따른 에러 메시지
});
};
// --------------------------------------------------
</script>
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[참고 사이트]
// --------------------------------------------------------------------------------------
[Web/JavaScript] paho-mqtt 라이브러리 및 aws4fetch 사용해 AWS IOT Core MQTT 구독 , 메시지 발생 수행
https://kkh0977.tistory.com/8418
https://blog.naver.com/kkh0977/224085422841
[MQTT (Message Queueing Telemetry Transport) 통신 설명]
https://kkh0977.tistory.com/3631
https://blog.naver.com/kkh0977/222971771381?trackingCode=blog_bloghome_searchlist
[AWS 사이트 : IoT Core가 MQTT 및 MQTT over WebSocket Secure(WSS) 를 지원한다고 명시 설명]
https://docs.aws.amazon.com/iot/latest/developerguide/protocols.html
[Aws Iot Core] Fleet provisioning 플릿 프로비저닝 수행 방법 정리 - 클레임 인증서 , 신뢰할 수 있는 사용자
https://blog.naver.com/kkh0977/223779257161?trackingCode=blog_bloghome_searchlist
[Aws Iot Core] Aws 프로비저닝 수행 및 섀도우 Shadow 토픽 Topic 구독 시 와일드 카드 (wild card) 설명 정리
https://blog.naver.com/kkh0977/223825295723?trackingCode=blog_bloghome_searchlist
[android] Aws Iot Core MQTT 연결 수행 후 Timer 타이머 사용해 주기적 connect 연결 상태 변경 및 해제 감지 로직
https://blog.naver.com/kkh0977/224043610334?trackingCode=blog_bloghome_searchlist
[Aws Iot Core] MQTT 세션 연결 및 해제 이벤트 감지 토픽 설명 - $aws/events/presence/connected
https://blog.naver.com/kkh0977/224149233152
// --------------------------------------------------------------------------------------
728x90
반응형
'Aws (Amazon)' 카테고리의 다른 글
Comments
