

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 디바이스 섀도우로 디바이스가 오프라인 상태일 때 디바이스 상태 유지
<a name="iot-shadows-tutorial"></a>

이 자습서에서는 AWS IoT 디바이스 섀도우 서비스를 사용하여 디바이스의 상태 정보를 저장하고 업데이트하는 방법을 보여줍니다. JSON 문서인 섀도우 문서는 디바이스, 로컬 앱 또는 서비스에서 게시한 메시지를 기반으로 디바이스 상태의 변화를 보여줍니다. 이 자습서에서 섀도우 문서는 전구의 색상 변화를 보여줍니다. 이 자습서에서는 디바이스가 인터넷에서 연결이 끊어진 경우에도 섀도우가 이 정보를 저장하는 방법과 디바이스가 다시 온라인 상태가 되어 이 정보를 요청할 때 디바이스에 최신 상태 정보를 다시 전달하는 방법도 보여줍니다.

생성하는 데 필요한 AWS IoT 리소스 및 필요한 하드웨어 설정부터 시작하여 여기에 표시된 순서대로 이 자습서를 시도하는 것이 좋습니다. 그러면 개념을 점진적으로 배우는 데도 도움이 됩니다. 이 자습서에서는와 함께 사용할 Raspberry Pi 디바이스를 구성하고 연결하는 방법을 보여줍니다 AWS IoT. 필요한 하드웨어가 없는 경우 자습서를 사용자의 디바이스에 맞게 적용하거나 [Amazon EC2로 가상 디바이스를 생성](creating-a-virtual-thing.md)하여 자습서를 따라할 수 있습니다.

**자습서 시나리오 개요**  
이 자습서의 시나리오는 전구의 색상을 변경하고 해당 데이터를 예약된 섀도우 주제에 게시하는 로컬 앱 또는 서비스입니다. 이 자습서는 [대화형 시작하기 자습서](interactive-demo.md)에 설명된 디바이스 섀도우 기능과 유사하며 Raspberry Pi 디바이스에서 구현됩니다. 이 섹션의 자습서에서는 단일 클래식 섀도우에 초점을 맞추면서 명명된 섀도우 또는 여러 디바이스를 수용할 수 있는 방법을 보여줍니다.

다음 자습서는 AWS IoT 디바이스 섀도우 서비스를 사용하는 방법을 배우는 데 도움이 됩니다.
+ 

**[튜토리얼: 섀도우 애플리케이션 실행을 위해 Raspberry Pi 준비](create-resources-shadow.md)**  
이 자습서에서는 연결을 위해 Raspberry Pi 디바이스를 설정하는 방법을 보여줍니다 AWS IoT. 또한 AWS IoT 정책 문서와 사물 리소스를 생성하고 인증서를 다운로드한 다음 해당 사물 리소스에 정책을 연결합니다. 이 자습서는 완료하는 데 약 30분 소요됩니다.
+ 

**[자습서: 디바이스 SDK 설치 및 디바이스 섀도우용 샘플 애플리케이션 실행](lightbulb-shadow-application.md)**  
이 자습서에서는 필요한 도구, 소프트웨어 및 AWS IoT Device SDK for Python을 설치한 다음 샘플 섀도우 애플리케이션을 실행하는 방법을 보여줍니다. 이 자습서는 [Raspberry Pi 또는 다른 디바이스 연결](connecting-to-existing-device.md)에 제시된 개념을 기반으로 하며 완료하는 데 20분이 소요됩니다.
+ 

**[자습서: 샘플 앱 및 MQTT 테스트 클라이언트를 사용하여 디바이스 섀도우와 상호 작용](interact-lights-device-shadows.md)**  
이 자습서에서는 `shadow.py` 샘플 앱과 **AWS IoT 콘솔**을 사용하여 AWS IoT 디바이스 섀도우와 전구의 상태 변경 간의 상호 작용을 관찰하는 방법을 보여줍니다. 이 자습서에서는 디바이스 섀도우의 예약된 주제에 MQTT 메시지를 전송하는 방법도 보여줍니다. 이 자습서는 완료하는 데 약 45분이 소요됩니다.

**AWS IoT 디바이스 섀도우 개요**  
디바이스 섀도우는 AWS IoT 레지스트리에서 생성한 [사물 리소스](iot-thing-management.md)로 관리되는 디바이스의 지속적인 가상 표현입니다. 섀도우 문서는 디바이스의 현재 상태 정보를 저장하고 검색하는 데 사용되는 JSON 또는 JavaScript 표기법 문서입니다. 디바이스가 인터넷에 연결되어 있는지 여부에 관계없이 섀도우를 사용하여 MQTT 주제 또는 HTTP REST API를 통해 디바이스의 상태를 가져오고 설정할 수 있습니다.

섀도우 문서에는 디바이스 상태의 이러한 측면을 설명하는 `state` 속성이 포함되어 있습니다.
+ `desired`: 앱은 `desired` 객체를 업데이트하여 디바이스 속성에 대해 원하는 상태를 지정합니다.
+ `reported`: 디바이스는 `reported` 객체에 현재 상태를 보고합니다.
+ `delta`: `delta` 객체에서 원하는 상태와 보고된 상태 간의 차이를 AWS IoT 보고합니다.

다음은 섀도우 문서의 예입니다.

```
{
  "state": {
    "desired": {
      "color": "green"
      },
    "reported": {
      "color": "blue"
      },
    "delta": {
      "color": "green"
      }
   }
}
```

디바이스의 섀도우 문서를 업데이트하려면 [예약된 MQTT 주제](reserved-topics.md#reserved-topics-shadow), HTTP로 `GET`, `UPDATE` 및 `DELETE` 작업을 지원하는 [디바이스 섀도우 REST API](device-shadow-rest-api.md) 및 [AWS IoT CLI](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot-data/index.html)를 사용합니다.

이전 예에서 `desired` 색상을 `yellow`로 변경하려 한다고 가정합니다. 이렇게 하려면 [UpdateThingShadow](device-shadow-rest-api.md#API_UpdateThingShadow) API에 요청을 전송하거나 [업데이트](device-shadow-mqtt.md#update-pub-sub-topic) 주제 `$aws/things/THING_NAME/shadow/update`에 메시지를 게시하세요.

```
{
  "state": {
    "desired": {
      "color": yellow
    }
  }
}
```

업데이트는 요청에 지정된 필드에만 영향을 미칩니다. 디바이스 섀도우를 성공적으로 업데이트한 후는 새 `desired` 상태를 `delta` 주제에 AWS IoT 게시합니다`$aws/things/THING_NAME/shadow/delta`. 이 경우 섀도우 문서는 다음과 같습니다.

```
{
  "state": {
    "desired": {
      "color": yellow
    },
    "reported": {
      "color": green
    },
    "delta": {
      "color": yellow
      }
  }
}
```

그러면 새 상태가 다음 JSON 메시지`$aws/things/THING_NAME/shadow/update`와 함께 `Update` 주제를 사용하여 AWS IoT 디바이스 섀도우에 보고됩니다.

```
{
  "state": {
    "reported": {
      "color": yellow
    }
  }
}
```

현재 상태 정보를 얻으려면 [GetThingShadow](device-shadow-rest-api.md#API_GetThingShadow) API에 요청을 전송하거나 [Get](device-shadow-mqtt.md#get-pub-sub-topic) 주제 `$aws/things/THING_NAME/shadow/get`에 MQTT 메시지를 게시하세요.

디바이스 섀도우 서비스 사용에 대한 자세한 내용은 [AWS IoT 디바이스 섀도우 서비스](iot-device-shadows.md) 단원을 참조하세요.

디바이스, 앱 및 서비스에서 디바이스 섀도우 사용에 대한 자세한 내용은 [디바이스에서 섀도우 사용](device-shadow-comms-device.md) 및 [앱 및 서비스에서 섀도우 사용](device-shadow-comms-app.md) 단원을 참조하세요.

 AWS IoT 섀도우와의 상호 작용에 대한 자세한 내용은 섹션을 참조하세요[섀도우와의 상호 작용](device-shadow-data-flow.md).

MQTT 예약 주제 및 HTTP REST API에 대한 자세한 내용은 [디바이스 섀도우 MQTT 주제](device-shadow-mqtt.md) 및 [디바이스 섀도우 REST API](device-shadow-rest-api.md) 단원을 참조하세요.