투케이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:57
728x90

[개발 환경 설정]

개발 환경 : 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
반응형
Comments