

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

# 클라이언트 디바이스 섀도와 상호 작용 및 동기화
<a name="work-with-client-device-shadows"></a>

[섀도 관리자 구성 요소](shadow-manager-component.md)를 사용하여 클라이언트 디바이스 섀도를 포함한 로컬 섀도를 관리할 수 있습니다. 섀도 관리자를 사용하여 다음을 수행할 수 있습니다.
+ Greengrass 구성 요소의 클라이언트 디바이스 섀도와 상호 작용합니다.
+ 클라이언트 디바이스 섀도우를와 동기화합니다 AWS IoT Core.

**참고**  
섀도 관리자 구성 요소는 AWS IoT Core 기본적으로 섀도우를와 동기화하지 않습니다. 동기화할 클라이언트 디바이스 섀도를 지정하려면 섀도 관리자 구성 요소를 구성해야 합니다.

**Topics**
+ [사전 조건](#client-device-shadows-prerequisites)
+ [섀도 관리자가 클라이언트 디바이스와 통신할 수 있도록 설정](#enable-shadow-manager-client-devices)
+ [구성 요소의 클라이언트 디바이스 섀도와 상호 작용](#interact-with-client-device-shadows)
+ [클라이언트 디바이스 섀도우를와 동기화 AWS IoT Core](#sync-client-device-shadows-with-iot-core)

## 사전 조건
<a name="client-device-shadows-prerequisites"></a>

클라이언트 디바이스 섀도와 상호 작용하고 클라이언트 디바이스 섀도와 동기화하려면 코어 디바이스 AWS IoT Core가 다음 요구 사항을 충족해야 합니다.
+ 코어 디바이스는 [클라이언트 디바이스 지원을 위한 Greengrass 구성 요소](connect-client-devices.md#cloud-discovery-components) 외에도 다음 구성 요소를 실행해야 합니다.
  + [Greengrass nucleus](greengrass-nucleus-component.md) v2.6.0 이상
  + [섀도 관리자](shadow-manager-component.md) v2.2.0 이상
  + [MQTT 브리지](mqtt-bridge-component.md) v2.2.0 이상
+ [클라이언트 디바이스 인증](client-device-auth-component.md) 구성 요소는 클라이언트 디바이스가 [디바이스 섀도 주제](https://docs.aws.amazon.com/iot/latest/developerguide/reserved-topics.html#reserved-topics-shadow)에서 통신할 수 있도록 구성해야 합니다.

## 섀도 관리자가 클라이언트 디바이스와 통신할 수 있도록 설정
<a name="enable-shadow-manager-client-devices"></a>

기본적으로 섀도 관리자 구성 요소는 클라이언트 디바이스 섀도를 관리하지 않습니다. 이 기능을 활성화하려면 클라이언트 디바이스와 섀도 관리자 구성 요소 간에 MQTT 메시지를 전달해야 합니다. 클라이언트 디바이스는 MQTT 메시지를 사용하여 디바이스 섀도 업데이트를 수신하고 전송합니다. 섀도 관리자 구성 요소는 로컬 Greengrass 게시/구독 인터페이스를 구독하므로 [디바이스 섀도 주제](https://docs.aws.amazon.com/iot/latest/developerguide/reserved-topics.html#reserved-topics-shadow)에 대한 MQTT 메시지를 전달하도록 [MQTT 브리지 구성 요소](mqtt-bridge-component.md)를 구성할 수 있습니다.

MQTT 브리지 구성 요소는 각각 메시지 소스와 메시지 대상을 지정하는 주제 매핑의 목록을 사용합니다. 섀도 관리자 구성 요소가 클라이언트 디바이스 섀도를 관리할 수 있도록 하려면 MQTT 브리지 구성 요소를 배포하고 클라이언트 디바이스 섀도에 대한 섀도 주제를 지정합니다. 로컬 MQTT와 로컬 게시/구독 간에 양방향으로 메시지를 전달하도록 브리지를 구성해야 합니다.

<a name="create-mqtt-bridge-deployment-info"></a>코어 디바이스 또는 코어 디바이스 그룹에 MQTT 브리지 구성 요소를 배포하려면 `aws.greengrass.clientdevices.mqtt.Bridge` 구성 요소가 포함된 [배포를 생성](create-deployments.md)합니다. 배포의 MQTT 브리지 구성 요소 구성에서 주제 매핑(`mqttTopicMapping`)을 지정합니다.

다음 예제를 사용하여 클라이언트 디바이스와 섀도 관리자 구성 요소 간의 통신을 활성화하도록 MQTT 브리지 구성 요소를 구성합니다.

**참고**  
 AWS IoT Greengrass 콘솔에서 이러한 구성 예제를 사용할 수 있습니다. AWS IoT Greengrass API를 사용하는 경우 `merge` 구성 업데이트에는 직렬화된 JSON 객체가 필요하므로 다음 JSON 객체를 문자열로 직렬화해야 합니다. 자세한 내용은 [구성 요소 구성 업데이트](update-component-configurations.md) 단원을 참조하십시오.

**Example 예: 모든 클라이언트 디바이스 섀도 관리**  
다음 MQTT 브리지 구성 예제를 사용하면 섀도 관리자가 모든 클라이언트 디바이스에 대한 모든 섀도를 관리할 수 있습니다.  

```
{
  "mqttTopicMapping": {
    "ShadowsLocalMqttToPubsub": {
      "topic": "$aws/things/+/shadow/#",
      "source": "LocalMqtt",
      "target": "Pubsub"
    },
    "ShadowsPubsubToLocalMqtt": {
      "topic": "$aws/things/+/shadow/#",
      "source": "Pubsub",
      "target": "LocalMqtt"
    }
  }
}
```

**Example 예: 클라이언트 디바이스에 대한 섀도 관리**  
다음 MQTT 브리지 구성 예제를 사용하면 섀도 관리자가 `MyClientDevice`라는 이름의 클라이언트 디바이스에 대한 모든 섀도를 관리할 수 있습니다.  

```
{
  "mqttTopicMapping": {
    "ShadowsLocalMqttToPubsub": {
      "topic": "$aws/things/MyClientDevice/shadow/#",
      "source": "LocalMqtt",
      "target": "Pubsub"
    },
    "ShadowsPubsubToLocalMqtt": {
      "topic": "$aws/things/MyClientDevice/shadow/#",
      "source": "Pubsub",
      "target": "LocalMqtt"
    }
  }
}
```

**Example 예: 모든 클라이언트 디바이스에 대해 이름이 지정된 섀도 관리**  
다음 MQTT 브리지 구성 예제를 사용하면 섀도 관리자가 모든 클라이언트 디바이스에 대해 `DeviceConfiguration`이라는 이름의 섀도를 관리할 수 있습니다.  

```
{
  "mqttTopicMapping": {
    "ShadowsLocalMqttToPubsub": {
      "topic": "$aws/things/+/shadow/name/DeviceConfiguration/#",
      "source": "LocalMqtt",
      "target": "Pubsub"
    },
    "ShadowsPubsubToLocalMqtt": {
      "topic": "$aws/things/+/shadow/name/DeviceConfiguration/#",
      "source": "Pubsub",
      "target": "LocalMqtt"
    }
  }
}
```

**Example 예: 모든 클라이언트 디바이스의 이름이 지정되지 않은 섀도 관리**  
다음 MQTT 브리지 구성 예제를 사용하면 섀도 관리자가 모든 클라이언트 디바이스에 대해 이름이 지정되지 않은 섀도를 관리할 수 있지만 이름이 지정된 섀도는 관리할 수 없습니다.  

```
{
  "mqttTopicMapping": {
    "DeleteShadowLocalMqttToPubsub": {
      "topic": "$aws/things/+/shadow/delete",
      "source": "LocalMqtt",
      "target": "Pubsub"
    },
    "DeleteShadowPubsubToLocalMqtt": {
      "topic": "$aws/things/+/shadow/delete/#",
      "source": "Pubsub",
      "target": "LocalMqtt"
    },
    "GetShadowLocalMqttToPubsub": {
      "topic": "$aws/things/+/shadow/get",
      "source": "LocalMqtt",
      "target": "Pubsub"
    },
    "GetShadowPubsubToLocalMqtt": {
      "topic": "$aws/things/+/shadow/get/#",
      "source": "Pubsub",
      "target": "LocalMqtt"
    },
    "UpdateShadowLocalMqttToPubsub": {
      "topic": "$aws/things/+/shadow/update",
      "source": "LocalMqtt",
      "target": "Pubsub"
    },
    "UpdateShadowPubsubToLocalMqtt": {
      "topic": "$aws/things/+/shadow/update/#",
      "source": "Pubsub",
      "target": "LocalMqtt"
    }
  }
}
```

## 구성 요소의 클라이언트 디바이스 섀도와 상호 작용
<a name="interact-with-client-device-shadows"></a>

로컬 섀도 서비스를 사용하여 클라이언트 디바이스의 로컬 섀도 문서를 읽고 수정하는 사용자 지정 구성 요소를 개발할 수 있습니다. 자세한 내용은 [구성 요소에서 섀도와 연동](interact-with-shadows-in-components.md) 단원을 참조하십시오.

## 클라이언트 디바이스 섀도우를와 동기화 AWS IoT Core
<a name="sync-client-device-shadows-with-iot-core"></a>

로컬 클라이언트 디바이스 섀도 상태를 동기화하도록 섀도 관리자 구성 요소를 구성할 수 있습니다 AWS IoT Core. 자세한 내용은 [로컬 디바이스 섀도우를와 동기화 AWS IoT Core](sync-shadows-with-iot-core.md) 단원을 참조하십시오.