투케이2K

194. (TWOK/LOGIC) [Aws] IoT 디바이스 기기 프로비저닝 수행 후 발급 받은 사물 인증서 사용해 다중 동시 연결 및 Shadow MQTT 테스트 로직 정리 본문

투케이2K 로직정리

194. (TWOK/LOGIC) [Aws] IoT 디바이스 기기 프로비저닝 수행 후 발급 받은 사물 인증서 사용해 다중 동시 연결 및 Shadow MQTT 테스트 로직 정리

투케이2K 2026. 6. 2. 19:29
728x90
반응형

[로직 정리]

정리 로직 : AWS / IoT / MQTT

제 목 : [Aws] IoT 디바이스 기기 프로비저닝 수행 후 발급 받은 사물 인증서 사용해 다중 동시 연결 및 Shadow MQTT 테스트 로직 정리

 

[설 명]

// --------------------------------------------------------------------------------------
[사전) 설정 및 정보 확인 사항]
// --------------------------------------------------------------------------------------

1. 제 목 : [Aws] IoT 디바이스 기기 프로비저닝 수행 후 발급 받은 사물 인증서 사용해 다중 동시 연결 및 Shadow MQTT 테스트 로직 정리


2. 테스트 환경 : Aws / IoT / Device / 프로비저닝 / MQTT


3. 사전) 👉 AWS IoT Core 간단 설명 : 

  >> AWS IoT 는 IoT 디바이스를 다른 디바이스 및 AWS 클라우드 서비스에 연결하는 클라우드 서비스를 제공합니다.

  >> 디바이스가에 연결할 수 있는 경우 AWS IoT는 AWS 가 제공하는 클라우드 서비스에 디바이스를 AWS IoT 연결할 수 있습니다.

  >> AWS IoT Core 메시지 브로커는 MQTT 및 MQTT over WSS 프로토콜을 사용하여 메시지를 게시하고 구독하는 디바이스 및 클라이언트를 지원합니다. 
  
    - HTTPS 프로토콜을 사용하여 메시지를 게시하는 디바이스와 클라이언트도 지원합니다.


4. 사전) 👉 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 IAM 계정 AccessKey , SecretKey 정보를 사용해 3자 입장에서 MQTT 메시지 송수신 테스트를 진행했지만, 더이상 해당 마스터 IAM 계정 정보를 사용하지 못하는 이슈 발생


2. IAM 계정 정보 없이 디바이스 기기와 MQTT 메시지 송수신 테스트 가능하게 기능 개발 요청



------------------------------------------------------
🟦 로직 정리) 1안 - 기기가 발급한 사물인증서 제공 받은 후 MQTT 테스트 수행
------------------------------------------------------
👉 기기가 발급한 사물인증서를 공유 사용하는 방식
------------------------------------------------------

1. 디바이스 기기는 클레임 인증서 내장 방식을 통해 Aws IoT Core 플릿 프로비저닝 동작 수행


2. 클레임 인증서를 통해서 임시 사물 인증서 발급 요청 후 내부에 저장 수행


3. 기기는 지정 된 포맷 형식에 맞게 템플릿 등록 요청 수행


4. 템플릿 등록 요청이 완료 되면 발급 받은 Response ThingName 내부에 저장 수행

  >> 이과정이 완료 되면 상위에서 임시로 발급 받은 사물 인증서에 정책 매핑이 완료 됨


5. 정책 매핑이 완료 된 사물인증서를 사용해서 디바이스 기기 AWS IoT Core 연결 및 MQTT 메시지 송수신 대기 수행


6. 내부에 저장 된 사물인증서 certificate.pem 파일과 privateKey 파일을 txt 형식으로 외부로 추출 수행


7. 앱 및 CS 프로그램에서 해당 인증서 파일을 읽어 AWS IoT Core 연결 및 MQTT 메시지 송수신 대기 수행

  >> 🟥 사용 시 주의점 : 각 클라이언트는 Client ID가 반드시 달라야 함



------------------------------------------------------
🟦 로직 정리) 2안 - 동일한 ThingName 으로 에뮬레이터 프로비저닝 수행 후 발급 받은 사물인증서로 MQTT 테스트 수행
------------------------------------------------------
👉 기기가 발급한 사물인증서를 말고 새로운 앱 및 CS 프로그램이 테스트용 사물인증서 발급해서 연동 테스트
------------------------------------------------------

1. 기기는 이미 플릿 프로비저닝 완료 후 기기 사물인증서를 사용해 AWS IoT Core 연결 및 MQTT 메시지 송수신 대기 수행


2. 앱 및 CS 프로그램은 클레임 인증서 내장 방식을 통해 Aws IoT Core 플릿 프로비저닝 동작 수행


3. 클레임 인증서를 통해서 임시 사물 인증서 발급 요청 후 내부에 저장 수행


4. 앱 및 CS 프로그램은 지정 된 포맷 형식에 맞게 템플릿 등록 요청 수행


5. 템플릿 등록 요청이 완료 되면 발급 받은 Response ThingName 내부에 저장 수행

  >> 이과정이 완료 되면 상위에서 임시로 발급 받은 사물 인증서에 정책 매핑이 완료 됨


6. 앱 및 CS 프로그램에서는 정책 매핑이 완료 된 사물인증서를 사용해서 AWS IoT Core 연결 및 MQTT 메시지 송수신 대기 수행

  >> 🟥 사용 시 주의점 : 각 클라이언트는 Client ID가 반드시 달라야 함



------------------------------------------------------
🟦 참고 사항) 
------------------------------------------------------

1. 특정 사물에 생성 된 [하나의 사물 인증서] 로 다중 연결 가능 여부 정리

  >> AWS IoT Core 는 인증서를 기반으로 TLS 연결을 인증합니다.

  >> 👉 동일한 cert.pem / private.key 를 여러 클라이언트에서 사용하더라도 동시에 여러 MQTT connection 이 생성됩니다. (기술적으로 문제 없이 동작합니다 / Pub/Sub 도 테스트 가능)

  >> 👉 사용 시 주의점 : 

    - 각 클라이언트는 Client ID가 반드시 달라야 함

    - Client ID가 같으면 → 기존 연결이 끊기고 새 연결로 대체됨

    - 요약 표시 : 

      Client A -> clientId: device1
      Client B -> clientId: device2
      → ✅ OK (동시 연결 가능)

      Client A -> clientId: device1
      Client B -> clientId: device1
      → ❌ 기존 연결 끊김


2. 특정 사물에 생성 된 [다른 사물 인증서] 로 동시 연결 가능 여부 정리

  >> 👉 같은 Thing 에 여러 인증서가 붙어 있어도 각 인증서로 동시에 여러 MQTT 연결이 가능하며, 서로 Pub/Sub 테스트도 문제없이 가능합니다.

    - Thing = 단순 logical entity

    - 실제 인증은 “인증서 기준” 으로 이루어짐

    - 구조 요약 : 

      Thing (논리적 디바이스)
        ├─ Cert A
        ├─ Cert B
        ├─ Cert C

  >> 👉 사용 시 주의점 : 

    - 각 클라이언트는 Client ID가 반드시 달라야 함

    - Client ID가 같으면 → 기존 연결이 끊기고 새 연결로 대체됨

    - 요약 표시 : 

      Cert A → ClientId: device-A
      Cert B → ClientId: device-B
      Cert C → ClientId: device-C
      → ✅ OK (동시 연결 가능)
      
      Cert A → clientId: test1
      Cert B → clientId: test1
      → ❌ 기존 연결 끊김

// --------------------------------------------------------------------------------------






// --------------------------------------------------------------------------------------
[참고 사이트]
// --------------------------------------------------------------------------------------

▶️ [업무 이슈] AWS IoT Core MQTT 메시지 테스트 시 IAM 계정 AccessKey, SecretKey 미사용 이슈 - 사물 인증서 사용

https://kkh0977.tistory.com/8874

https://blog.naver.com/kkh0977/224303030095


▶️ [Aws Iot Core] 플릿 프로비저닝 으로 발급 된 사물 인증서 를 사용해 다중 동시 연결 설명 정리 - Thing Cert Connect

https://kkh0977.tistory.com/8873

https://blog.naver.com/kkh0977/224303021696


▶️ [Aws Iot Core] Fleet provisioning 플릿 프로비저닝 설명 및 동작 프로세스 정리

https://kkh0977.tistory.com/7439

https://blog.naver.com/kkh0977/223691943757?trackingCode=blog_bloghome_searchlist


▶️ [Aws Iot Core] Fleet provisioning 플릿 프로비저닝 수행 방법 정리 - 클레임 인증서 , 신뢰할 수 있는 사용자

https://kkh0977.tistory.com/7761

https://blog.naver.com/kkh0977/223779257161?trackingCode=blog_bloghome_searchlist

// --------------------------------------------------------------------------------------
 
728x90
반응형
Comments