투케이2K

191. (Aws/Amazon) [Aws Iot Core] 섀도우 shadow 페이로드 필드 설명 - desired , reported , metadata , version 본문

Aws (Amazon)

191. (Aws/Amazon) [Aws Iot Core] 섀도우 shadow 페이로드 필드 설명 - desired , reported , metadata , version

투케이2K 2026. 3. 17. 19:06
728x90
반응형

[개발 환경 설정]

개발 환경 : Aws / Amazon Web Services

제 목 : [Aws Iot Core] 섀도우 shadow 페이로드 필드 설명 - desired , reported , metadata , version

 

[설명 정리]

// --------------------------------------------------------------------------------------
[개발 및 환경]
// --------------------------------------------------------------------------------------

- 인프라 : Aws / Amazon Web Services


- 기술 구분 : Aws / Aws Iot Core / shadow / payload


- 사전) 👉 Aws Iot Core 간단 설명 : 

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

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

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


- 사전) 👉 메타 데이터(metadata) 간단 설명 : 

  >> 메타 데이터란 '데이터에 대한 데이터' 를 의미합니다.

  >> 메타 데이터는 실제 값(value) 이 아니라 그 값이 언제, 어떻게, 어떤 출처로 생성·변경되었는지 같은 부가 정보입니다.


- 사전) 👉 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 Shadow 전문 예시 페이로드 첨부 : 

  {
    "state": {
      "desired": {...},
      "reported": {...}
    },
    "metadata": {...},
    "version": 7,
    "timestamp": 1773703510
  }


2. ✅ state.desired 설명 정리 : 

  >> state.desired 는 디바이스에게 원하는 (Target) 상태를 요청한 구문으로 서버 (클라우드) 가 디바이스에게 "이렇게 상태를 맞춰줘" 라고 요청하는 내용입니다.

  >> state.desired 요청 예시 구문 : 

    - topic 예시 : $aws/things/{thingName}/shadow/{shadowName}/update
    
    - payload 예시 : 
      {
        "state": {
          "desired": {
            "command": "STATUS"
          }      
        }
      }

  >> state.desired 는 클라우드가 디바이스에게 원하는 목표 상태를 설정할 때 자동으로 생성됩니다.

    - 서버에서 Shadow Update 요청을 보내는 경우
    - AWS Console → IoT → Shadow 에서 수정 진행
    - Lambda, API Gateway 등에서 Shadow Update 호출 수행


3. ✅ state.reported 설명 정리 : 

  >> state.reported 는 디바이스가 실제로 보고한 현재 상태를 의미합니다.

  >> state.reported 요청 예시 구문 : 

    - topic 예시 : $aws/things/{thingName}/shadow/{shadowName}/update
    
    - payload 예시 : 
      {
        "state": {
          "reported": {
            "command": "STATUS",
            "open": 1
          }      
        }
      }

  >> state.reported 가 생성 되는 시점 정리 : 

    - desired 명령을 수신한 후 결과를 보고할 때 사용
    - 기기 자신의 상태를 클라우드와 동기화하려고 할 때 사용


4. ✅ state.desired 와 state.reported 의 흐름 요약 : 

  >> [1] 서버: desired 생성 : Shadow Update (desired)

  >> [2] 디바이스: desired 읽음 : $aws/things/{thingName}/{shadowName}/get/accepted 구독

  >> [3] 디바이스: 명령 수행 후 reported 생성 : Shadow Update(reported)

  >> [4] desired == reported 일치 : Shadow 상태 동기화됨


5. ✅ metadata 설명 정리 : 

  >> metadata 는 각 필드가 언제 업데이트되었는지에 대한 타임스탬프 정보를 표시하는 필드입니다. (각 필드별로 값이 마지막으로 변경된 시간을 기록)

  >> metadata 예시 구문 : 
  
    "metadata": {
      "desired": {
        "command": { "timestamp": "1773651092" }
      },
      "reported": {
        "command": { "timestamp": "1773651092" },
        "open": { "timestamp": "1773651092" }
      }
    }

  >> metadata 값을 확인해 최근 각 shadow 가 언제 업데이트 되었는지 개발 시 디버깅에 유용하게 활용할 수 있습니다.


6. ✅ version 설명 정리 : 

  >> version 는 Shadow 문서의 수정 이력 버전 번호

  >> version 이 수정 되는 예시 : 

    - Shadow 가 업데이트될 때마다 1씩 증가
    - 동시 업데이트 충돌을 막기 위해 사용됨 (Optimistic concurrency control)
    - 클라이언트가 업데이트 요청 시 특정 version 을 지정 가능

  >> version 예시 : 

    - "version": 7

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






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

[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


[MQTT (Message Queueing Telemetry Transport) 통신 설명]

https://kkh0977.tistory.com/3631

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


[Aws Iot Core] MQTT 구독 연결 및 해제 이벤트 감지 토픽 설명 - $aws/events/subscriptions/subscribed

https://kkh0977.tistory.com/8620

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


[Aws Iot Core] MQTT 세션 연결 및 해제 이벤트 감지 토픽 설명 - $aws/events/presence/connected

https://kkh0977.tistory.com/8569

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


[AWS 콘솔 이벤트 토픽 설명 사이트]

https://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/reserved-topics.html

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