

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

# 디바이스 섀도우 MQTT 주제
<a name="device-shadow-mqtt"></a>

디바이스 섀도우 서비스는 디바이스 및 앱이 디바이스(섀도우)의 상태 정보를 가져오거나 업데이트하거나 삭제할 수 있도록 예약된 MQTT 주제를 사용합니다.

섀도우 주제에 대해 게시 또는 구독하려면 주제 기반 인증이 필요합니다. AWS IoT 은(는) 기존 주제 구조에 새 주제를 추가할 권리를 보유합니다. 그러므로 섀도우 주제에 대한 와일드 카드 구독은 삼가도록 권장합니다. 예를 들어가 새 섀도우 주제를 AWS IoT 도입함에 따라이 주제 필터와 일치하는 주제 수가 증가할 수 `$aws/things/thingName/shadow/#` 있으므로와 같은 주제 필터를 구독하지 마세요. 이러한 주제에 게시되는 메시지의 예는 [섀도우와의 상호 작용](device-shadow-data-flow.md) 섹션을 참조하세요.

섀도우는 명명되거나 명명되지 않을(클래식) 수 있습니다. 각 섀도우에 사용되는 주제는 주제 접두사만 다릅니다. 이 표에서는 각 섀도우 유형에서 사용하는 주제 접두사를 보여줍니다.


| *ShadowTopicPrefix* 값 | 섀도우 유형 | 
| --- | --- | 
| \$1aws/things/thingName/shadow | 명명되지 않은(클래식) 섀도우 | 
| \$1aws/things/thingName/shadow/name/shadowName | 명명된 섀도우 | 

전체 주제를 생성하려면 참조할 섀도우 유형에 대해 `ShadowTopicPrefix`를 선택하고 `thingName` 및 `shadowName`(해당하는 경우)을 해당 값으로 바꾸고 다음 섹션에 표시된 대로 주제 스텁을 추가합니다.

다음은 섀도우와 상호 작용하기 위해 사용되는 MQTT 주제입니다.

**Topics**
+ [/get](#get-pub-sub-topic)
+ [/get/accepted](#get-accepted-pub-sub-topic)
+ [/get/rejected](#get-rejected-pub-sub-topic)
+ [/update](#update-pub-sub-topic)
+ [/update/delta](#update-delta-pub-sub-topic)
+ [/update/accepted](#update-accepted-pub-sub-topic)
+ [/update/documents](#update-documents-pub-sub-topic)
+ [/update/rejected](#update-rejected-pub-sub-topic)
+ [/delete](#delete-pub-sub-topic)
+ [/delete/accepted](#delete-accepted-pub-sub-topic)
+ [/delete/rejected](#delete-rejected-pub-sub-topic)

## /get
<a name="get-pub-sub-topic"></a>

디바이스 섀도우를 가져오려면 이 주제에 빈 메시지를 게시합니다.

```
ShadowTopicPrefix/get
```

AWS IoT 는 [/get/accepted](#get-accepted-pub-sub-topic) 또는에 게시하여 응답합니다[/get/rejected](#get-rejected-pub-sub-topic).

### 예제 정책
<a name="get-policy"></a>

다음은 필요한 정책의 예입니다.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/thingName/shadow/get"
            ]
        }
    ]
}
```

## /get/accepted
<a name="get-accepted-pub-sub-topic"></a>

AWS IoT 는 디바이스의 섀도우를 반환할 때이 주제에 응답 섀도우 문서를 게시합니다.

```
ShadowTopicPrefix/get/accepted
```

자세한 내용은 [응답 상태 문서](device-shadow-document.md#device-shadow-example-response-json) 단원을 참조하십시오.

### 예제 정책
<a name="get-accepted-policy"></a>

다음은 필요한 정책의 예입니다.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Subscribe"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/things/thingName/shadow/get/accepted"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Receive"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/thingName/shadow/get/accepted"
            ]
        }
    ]
}
```

## /get/rejected
<a name="get-rejected-pub-sub-topic"></a>

AWS IoT 는 디바이스의 섀도우를 반환할 수 없을 때이 주제에 오류 응답 문서를 게시합니다.

```
ShadowTopicPrefix/get/rejected
```

자세한 내용은 [오류 응답 문서](device-shadow-document.md#device-shadow-example-error-json) 단원을 참조하십시오.

### 예제 정책
<a name="get-rejected-policy"></a>

다음은 필요한 정책의 예입니다.

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iot:Subscribe"
      ],
      "Resource": [
        "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/things/thingName/shadow/get/rejected"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "iot:Receive"
      ],
      "Resource": [
        "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/thingName/shadow/get/rejected"
      ]
    }
  ]
}
```

## /update
<a name="update-pub-sub-topic"></a>

디바이스 섀도우를 업데이트하려면 이 주제에 요청 상태 문서를 게시합니다.

```
ShadowTopicPrefix/update
```

메시지 본문에 [부분 요청 상태 문서](device-shadow-document.md#device-shadow-example-request-json)가 포함되어 있습니다.

디바이스의 상태를 업데이트하려고 시도하는 클라이언트는 다음과 같은 `desired` 속성을 가진 JSON 요청 상태 문서를 전송합니다.

```
{
  "state": {
    "desired": {
      "color": "red",
      "power": "on"
    }
  }
}
```

섀도우를 업데이트하는 디바이스는 다음과 같은 `reported` 속성을 가진 JSON 요청 상태 문서를 전송합니다.

```
{
  "state": {
    "reported": {
      "color": "red",
      "power": "on"
    }
  }
}
```

AWS IoT 는 [/update/accepted](#update-accepted-pub-sub-topic) 또는에 게시하여 응답합니다[/update/rejected](#update-rejected-pub-sub-topic).

### 예제 정책
<a name="update-policy"></a>

다음은 필요한 정책의 예입니다.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/thingName/shadow/update"
            ]
        }
    ]
}
```

## /update/delta
<a name="update-delta-pub-sub-topic"></a>

AWS IoT 는 디바이스의 섀도우에 대한 변경을 수락하고 응답 상태 문서에 `desired` 및 상태에 대한 다양한 값이 포함되어 있을 때이 주제에 응답 `reported` 상태 문서를 게시합니다.

```
ShadowTopicPrefix/update/delta
```

메시지 버퍼에 [/delta response state document](device-shadow-document.md#device-shadow-example-response-json-delta)가 포함되어 있습니다.

### 메시지 본문 세부 정보
<a name="update-delta-rules"></a>
+ `update/delta`에 게시되는 메시지에는 `desired` 및 `reported` 섹션이 서로 다른 경우에만 원하는 속성이 포함됩니다. 이 메시지는 이러한 속성이 현재 업데이트 메시지에 포함되어 있든지, 또는 이미 AWS IoT에 저장되어 있든지 상관없이 모두 포함합니다. `desired` 및 `reported` 섹션이 서로 다르지 않은 속성은 포함하지 않습니다.
+ 속성이 `reported` 섹션에는 있지만 `desired` 섹션에는 동일한 속성이 없는 경우 이 속성은 포함되지 않습니다.
+ 속성이 `desired` 섹션에는 있지만 `reported` 섹션에는 동일한 속성이 없는 경우 이 속성은 포함됩니다.
+ 속성이 `reported` 섹션에서 삭제되었지만 `desired` 섹션에는 계속 존재하는 경우 이 속성은 포함됩니다.

### 예제 정책
<a name="update-delta-policy"></a>

다음은 필요한 정책의 예입니다.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Subscribe"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/things/thingName/shadow/update/delta"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Receive"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/thingName/shadow/update/delta"
            ]
        }
    ]
}
```

## /update/accepted
<a name="update-accepted-pub-sub-topic"></a>

AWS IoT 는 디바이스 섀도우에 대한 변경을 수락할 때이 주제에 응답 상태 문서를 게시합니다.

```
ShadowTopicPrefix/update/accepted
```

메시지 버퍼에 [/accepted response state document](device-shadow-document.md#device-shadow-example-response-json-accepted)가 포함되어 있습니다.

### 예제 정책
<a name="update-accepted-policy"></a>

다음은 필요한 정책의 예입니다.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Subscribe"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/things/thingName/shadow/update/accepted"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Receive"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/thingName/shadow/update/accepted"
            ]
        }
    ]
}
```

## /update/documents
<a name="update-documents-pub-sub-topic"></a>

AWS IoT 는 섀도우에 대한 업데이트가 성공적으로 수행될 때마다 상태 문서를이 주제에 게시합니다.

```
ShadowTopicPrefix/update/documents
```

메시지 본문에 [/documents response state document](device-shadow-document.md#device-shadow-example-response-json-documents)가 포함되어 있습니다.

### 예제 정책
<a name="update-documents-policy"></a>

다음은 필요한 정책의 예입니다.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Subscribe"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/things/thingName/shadow/update/documents"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Receive"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/thingName/shadow/update/documents"
            ]
        }
    ]
}
```

## /update/rejected
<a name="update-rejected-pub-sub-topic"></a>

AWS IoT 는 디바이스 섀도우에 대한 변경을 거부할 때 오류 응답 문서를이 주제에 게시합니다.

```
ShadowTopicPrefix/update/rejected
```

메시지 본문에 [오류 응답 문서](device-shadow-document.md#device-shadow-example-error-json)가 포함되어 있습니다.

### 예제 정책
<a name="update-rejected-policy"></a>

다음은 필요한 정책의 예입니다.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Subscribe"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/things/thingName/shadow/update/rejected"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Receive"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/thingName/shadow/update/rejected"
            ]
        }
    ]
}
```

## /delete
<a name="delete-pub-sub-topic"></a>

디바이스 섀도우를 삭제하려면 삭제 주제에 빈 메시지를 게시합니다.

```
ShadowTopicPrefix/delete
```

메시지의 내용은 무시됩니다.

섀도우를 삭제해도 버전 번호가 0으로 재설정되지는 않습니다.

AWS IoT 는 [/delete/accepted](#delete-accepted-pub-sub-topic) 또는에 게시하여 응답합니다[/delete/rejected](#delete-rejected-pub-sub-topic).

### 예제 정책
<a name="delete-policy"></a>

다음은 필요한 정책의 예입니다.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/thingName/shadow/delete"
            ]
        }
    ]
}
```

## /delete/accepted
<a name="delete-accepted-pub-sub-topic"></a>

AWS IoT 는 디바이스의 섀도우가 삭제될 때이 주제에 메시지를 게시합니다.

```
ShadowTopicPrefix/delete/accepted
```

### 예제 정책
<a name="delete-accepted-policy"></a>

다음은 필요한 정책의 예입니다.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Subscribe"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/things/thingName/shadow/delete/accepted"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Receive"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/thingName/shadow/delete/accepted"
            ]
        }
    ]
}
```

## /delete/rejected
<a name="delete-rejected-pub-sub-topic"></a>

AWS IoT 는 디바이스의 섀도우를 삭제할 수 없을 때이 주제에 오류 응답 문서를 게시합니다.

```
ShadowTopicPrefix/delete/rejected
```

메시지 본문에 [오류 응답 문서](device-shadow-document.md#device-shadow-example-error-json)가 포함되어 있습니다.

### 예제 정책
<a name="delete-rejected-policy"></a>

다음은 필요한 정책의 예입니다.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Subscribe"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/things/thingName/shadow/delete/rejected"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Receive"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/thingName/shadow/delete/rejected"
            ]
        }
    ]
}
```