

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

# 동적 사물 그룹
<a name="dynamic-thing-groups"></a>

동적 사물 그룹은 레지스트리의 특정 검색 쿼리에서 생성됩니다. 디바이스 연결, 디바이스 섀도우 생성 및 AWS IoT Device Defender 위반 데이터와 같은 검색 쿼리 파라미터는 이를 지원합니다. 동적 사물 그룹은 디바이스의 데이터를 인덱싱, 검색 및 집계하기 위해 플릿 인덱싱을 활성화해야 합니다. 이를 생성하기 전에 플릿 인덱싱 검색 쿼리를 사용해 동적 사물 그룹의 사물을 미리 볼 수 있습니다. 자세한 내용은 [플릿 인덱싱](iot-indexing.md) 및 [쿼리 구문](query-syntax.md) 섹션을 참조하세요.

**참고**  
동적 사물 그룹 실행은 레지스트리 실행에서 측정됩니다. 자세한 내용은 [AWS IoT Core 측정 추가 정보](https://aws.amazon.com/iot-core/pricing/additional-details/)를 참조하세요.

동적 사물 그룹은 정적 사물 그룹과 다음과 같은 차이가 있습니다.
+ 사물 멤버십이 명시적으로 정의되지 않았습니다. 동적 사물 그룹을 생성하려면 그룹 멤버십을 정의하기 위해 [검색 쿼리 문자열](example-queries.md)을 정의해야 합니다.
+ 동적 사물 그룹은 계층 구조의 일부일 수 없습니다.
+ 동적 사물 그룹에는 정책을 적용할 수 없습니다.
+ 동적 사물 그룹은 일련의 다른 명령을 사용해 생성, 업데이트 및 삭제합니다. 다른 모든 작업의 경우 두 유형의 사물 그룹에 동일한 명령을 사용합니다.
+ 당 동적 그룹 수는 AWS 계정 [제한됩니다](https://docs.aws.amazon.com//general/latest/gr/iot_device_management.html#thing-group-limits).
+ 그룹 이름에 개인 식별 정보를 사용하면 안 됩니다. 사물 그룹 이름은 암호화되지 않은 통신 및 보고서에 나타날 수 있습니다.

정적 사물 그룹에 대한 자세한 내용은 [정적 사물 그룹](thing-groups.md) 단원을 참조하세요.

## 동적 사물 그룹의 사용 사례
<a name="dynamic-thing-group-use-cases"></a>

다음 사용 사례에 동적 사물 그룹을 사용할 수 있습니다.

### 동적 사물 그룹을 작업의 대상으로 지정
<a name="dynamic-thing-group-use-cases-jobs"></a>

동적 사물 그룹을 대상으로 하는 연속 작업을 생성하면 원하는 기준을 충족할 때 디바이스를 자동으로 대상으로 지정할 수 있습니다. 기준은 연결 상태이거나 소프트웨어 버전 또는 모델과 같은 레지스트리 또는 섀도우에 저장된 모든 기준일 수 있습니다. 동적 사물 그룹에 사물이 나타나지 않으면 작업에서 작업 문서를 받지 못합니다.

예를 들어 업데이트 프로세스 중 중단 위험을 최소화하기 위해 디바이스 플릿에 펌웨어 업데이트가 필요하고 배터리 수명이 80% 이상인 디바이스의 펌웨어만 업데이트하려는 경우입니다. 배터리 수명이 80%를 초과하는 디바이스만 포함하는 80PercentBatteryLife라는 동적 사물 그룹을 생성하고 이를 작업의 대상으로 사용할 수 있습니다. 배터리 수명 기준을 충족하는 디바이스만 펌웨어 업데이트를 받게 됩니다. 디바이스의 배터리 수명이 80%라는 기준에 도달하면 해당 디바이스는 동적 사물 그룹에 자동으로 추가되어 펌웨어 업데이트를 받습니다.

펌웨어 또는 운영 체제가 다른 여러 디바이스 모델이 있을 수 있으므로 새 소프트웨어 업데이트 버전이 다를 수 있습니다. 이는 연속 작업이 있는 동적 그룹의 가장 일반적인 사용 사례로, 각 디바이스 모델, 펌웨어 및 OS 조합에 대해 동적 그룹을 생성할 수 있습니다. 그런 다음 정의된 기준에 따라 디바이스가 자동으로 이러한 그룹의 멤버가 되면 소프트웨어 업데이트를 푸시하도록 이러한 각 동적 그룹에 연속 작업을 설정할 수 있습니다.

사물 그룹을 작업 대상으로 지정하는 방법에 대한 자세한 내용은 [CreateJob](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateJob.html)을 참조하세요.

### 동적 그룹 멤버십 변경 사항을 사용하여 원하는 작업 수행
<a name="dynamic-thing-group-use-cases-actions"></a>

디바이스가 동적 사물 그룹에 추가되거나 동적 사물 그룹에서 제거될 때마다 [레지스트리 이벤트](https://docs.aws.amazon.com//iot/latest/developerguide/registry-events.html) 업데이트의 일부로 MQTT 주제로 알림이 전송됩니다. 동적 그룹 멤버십 업데이트를 기반으로 AWS 서비스와 상호 작용하도록 [AWS IoT Core 규칙을](https://docs.aws.amazon.com//iot/latest/developerguide/iot-rules.html) 구성하고 원하는 작업을 수행할 수 있습니다. 예시 작업에는 Amazon DynamoDB에 쓰거나, Lambda 함수를 간접적으로 호출하거나 Amazon SNS 주제에 알림을 보내는 경우를 포함합니다.

### 자동 위반 탐지를 위해 동적 사물 그룹에 디바이스 추가
<a name="dynamic-thing-group-use-cases-dd"></a>

AWS IoT Device Defender 고객 감지는 동적 사물 그룹에 [보안 프로필을](https://docs.aws.amazon.com//iot/latest/developerguide/device-defender-detect.html) 정의할 수 있습니다. 동적 사물 그룹의 디바이스는 그룹에 정의된 보안 프로필에 의해 위반이 있는지 자동으로 감지됩니다.

### 세분화된 로깅이 있는 디바이스를 관찰하기 위해 동적 사물 그룹에 대한 로그 수준 설정
<a name="dynamic-thing-group-use-cases-log"></a>

동적 사물 그룹에 로그 수준을 지정할 수 있습니다. 이는 특정 기준을 충족하는 디바이스에 대해서만 로깅 수준 및 세부 정보를 사용자 지정하려는 경우에 유용합니다. 예를 들어 특정 펌웨어 버전의 디바이스가 특정 규칙의 게시된 주제에 오류를 유발한다고 의심되는 경우 이러한 문제를 디버깅하도록 세부 로깅을 설정할 수 있습니다. 이 경우 이 펌웨어 버전이 있는 모든 디바이스에 대해 동적 그룹을 생성할 수 있습니다. 이 그룹은 가 레지스트리 속성 또는 디바이스 섀도우로 저장된다고 가정합니다. 그런 다음 로깅 대상을 이 동적 사물 그룹으로 정의하여 디버그 수준을 설정할 수 있습니다. 세분화된 로깅에 대한 자세한 내용은 [ CloudWatch Logs AWS IoT 를 사용하여 모니터링을 참조하세요](https://docs.aws.amazon.com//iot/latest/developerguide/cloud-watch-logs.html#fine-grained-logging). 특정 사물 그룹에 대한 로깅 수준을 지정하는 방법에 대한 자세한 내용은 [AWS IoT의 리소스별 로깅 구성](https://docs.aws.amazon.com//iot/latest/developerguide/configure-logging.html#fine-logging-cli)을 참조하세요.

## 동적 사물 그룹 생성
<a name="create-dynamic-thing-group"></a>

**CreateDynamicThingGroup** 명령을 사용하여 동적 사물 그룹을 생성합니다. 80PercentBatteryLife 시나리오에 대한 동적 사물 그룹을 생성하려면 **create-dynamic-thing-group** CLI 명령을 사용합니다.

```
$ aws iot create-dynamic-thing-group --thing-group-name "80PercentBatteryLife" --query-string "attributes.batterylife80"
```

**참고**  
그룹 이름에 개인 식별 정보를 사용하면 안 됩니다.

**CreateDynamicThingGroup** 명령은 응답을 반환합니다. 응답은 인덱스 이름, 쿼리 문자열, 쿼리 버전, 사물 그룹 이름, 사물 그룹 ID 및 사물 그룹의 Amazon 리소스 이름(ARN)을 포함합니다.

```
{
    "indexName": "AWS_Things", 
    "queryVersion": "2017-09-30", 
    "thingGroupName": "80PercentBatteryLife", 
    "thingGroupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/80PercentBatteryLife", 
    "queryString": "attributes.batterylife80\n", 
    "thingGroupId": "abcdefgh12345678ijklmnop12345678qrstuvwx"
}
```

동적 사물 그룹의 생성은 한 번에 이루어지지 않습니다. 동적 사물 그룹 채우기를 완료하는 데에는 시간이 걸립니다. 동적 사물 그룹이 생성되면 그룹의 상태가 `BUILDING`으로 설정됩니다. 채우기가 완료되면 상태가 `ACTIVE`로 바뀝니다. 동적 사물 그룹의 상태를 확인하려면 [DescribeThingGroup](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeThingGroup.html) 명령을 사용하세요.

## 동적 사물 그룹 설명
<a name="describe-dynamic-thing-group"></a>

다음과 같이 **DescribeThingGroup** 명령을 사용하여 동적 사물 그룹에 대한 정보를 가져올 수 있습니다.

```
$ aws iot describe-thing-group --thing-group-name "80PercentBatteryLife"
```

**DescribeThingGroup** 명령은 다음과 같이 지정한 그룹에 대한 정보를 반환합니다.

```
{
    "status": "ACTIVE", 
    "indexName": "AWS_Things", 
    "thingGroupName": "80PercentBatteryLife", 
    "thingGroupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/80PercentBatteryLife", 
    "queryString": "attributes.batterylife80\n", 
    "version": 1, 
    "thingGroupMetadata": {
        "creationDate": 1548716921.289
    }, 
    "thingGroupProperties": {}, 
    "queryVersion": "2017-09-30", 
    "thingGroupId": "84dd9b5b-2b98-4c65-84e4-be0e1ecf4fd8"
}
```

동적 사물 그룹에 대해 **DescribeThingGroup**을 설정하면 동적 사물 그룹에 고유한 속성이 반환됩니다. 반환 속성의 예는 queryString과 상태입니다.

동적 사물 그룹의 상태 값은 다음과 같습니다.

`ACTIVE`  
동적 사물 그룹을 사용할 준비가 되었습니다.

`BUILDING`  
동적 사물 그룹이 생성 중이고 사물 멤버십이 처리 중입니다.

`REBUILDING`  
그룹의 검색 쿼리 조정 후 동적 사물 그룹의 멤버십을 업데이트하는 중입니다.

**참고**  
동적 사물 그룹을 생성하면 상태에 상관 없이 해당 그룹을 사용합니다. `ACTIVE` 상태인 동적 사물 그룹에만 동적 사물 그룹에 대한 검색 쿼리와 일치하는 사물이 모두 포함됩니다. `BUILDING` 및 `REBUILDING` 상태인 동적 사물 그룹에는 검색 쿼리와 일치하는 사물 중 일부가 포함되지 않을 수 있습니다.

## 동적 사물 그룹 업데이트
<a name="update-dynamic-thing-group"></a>

그룹의 검색 쿼리를 포함한 동적 사물 그룹의 속성은 **UpdateDynamicThingGroup** 명령을 사용해 업데이트합니다. 다음 명령은 두 속성을 업데이트합니다. 하나는 사물 그룹 설명이고 다른 하나는 멤버십 기준을 배터리 수명을 85 이상으로 변경하는 쿼리 문자열입니다.

```
$ aws iot update-dynamic-thing-group --thing-group-name "80PercentBatteryLife" --thing-group-properties "thingGroupDescription=\"This thing group contains devices with a battery life greater than 85 percent.\"" --query-string "attributes.batterylife85"
```

**UpdateDynamicThingGroup** 명령은 업데이트 이후 그룹의 버전 번호가 포함된 응답을 반환합니다.

```
{
    "version": 2
}
```

동적 사물 그룹의 업데이트는 한 번에 수행되지 않습니다. 동적 사물 그룹 채우기를 완료하는 데에는 시간이 걸립니다. 동적 사물 그룹이 업데이트할 때 해당 그룹이 멤버십을 업데이트하는 동안 그룹의 상태가 `REBUILDING`으로 변경됩니다. 채우기가 완료되면 상태가 `ACTIVE`로 바뀝니다. 동적 사물 그룹의 상태를 확인하려면 [DescribeThingGroup](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeThingGroup.html) 명령을 사용하세요.

## 동적 사물 그룹 삭제
<a name="delete-dynamic-thing-group"></a>

동적 사물 그룹은 **DeleteDynamicThingGroup** 명령을 사용하여 삭제합니다.

```
$ aws iot delete-dynamic-thing-group --thing-group-name "80PercentBatteryLife"
```

**DeleteDynamicThingGroup** 명령은 출력을 생성하지 않습니다.

 사물이 속한 그룹을 나열하는 명령(예: **ListGroupsForThing**)이 클라우드 레코드가 업데이트되는 동안에도 계속해서 그룹을 표시할 수 있는지 살펴봐야 합니다.

## 동적 및 정적 사물 그룹 제한
<a name="dynamic-static-thing-group-limitations"></a>

동적 사물 그룹은 정적 사물 그룹과 다음 제한을 공유합니다.
+ 사물 그룹이 가질 수 있는 속성의 수는 [제한](https://docs.aws.amazon.com//general/latest/gr/iot_device_management.html#thing-group-limits)되어 있습니다.
+ 사물이 속할 수 있는 그룹의 수는 [제한](https://docs.aws.amazon.com//general/latest/gr/iot_device_management.html#thing-group-limits)되어 있습니다.
+ 그룹 이름은 변경할 수 없습니다.
+ 사물 그룹 이름은 û, é, ñ 같은 국제 문자를 포함할 수 없습니다.

## 동적 사물 그룹 제한 사항
<a name="dynamic-thing-group-limitations"></a>

동적 사물 그룹에는 다음과 같은 제한이 있습니다.

### 플릿 인덱싱
<a name="indexing-backfill-conflict"></a>

플릿 인덱싱 서비스를 활성화하면 디바이스 플릿에서 검색 쿼리를 수행할 수 있습니다. 플릿 인덱싱 채우기가 완료된 후 동적 사물 그룹을 생성하고 관리할 수 있습니다. 채우기 프로세스의 완료 시간은 AWS 클라우드에 등록된 디바이스 플릿의 크기에 따라 직접 영향을 받습니다. 동적 사물 그룹에 대해 플릿 인덱싱 서비스를 활성화하면 동적 사물 그룹을 모두 삭제해야 이 서비스를 비활성화할 수 있습니다.

**참고**  
플릿 인덱스를 쿼리할 권한이 있는 경우 전체 플릿에서 사물 데이터에 액세스할 수 있습니다.

### 동적 사물 그룹의 수는 제한되어 있습니다.
<a name="dynamic-thing-groups-limited"></a>

동적 사물 그룹의 수는 [제한](https://docs.aws.amazon.com//general/latest/gr/iot_device_management.html#thing-group-limits)되어 있습니다.

### 성공한 명령은 오류를 로깅할 수 있습니다.
<a name="log-errors"></a>

동적 사물 그룹을 생성하거나 업데이트할 때 일부 사물은 동적 사물 그룹에 추가할 수 있지만 아직 추가되지 않았을 수 있습니다. 이 시나리오는 오류를 로깅하고 [`AddThingToDynamicThingGroupsFailed` 지표](metrics_dimensions.md#iot-metrics)를 생성하는 동안 성공적인 생성 또는 업데이트 명령을 유발합니다. 단일 지표는 여러 로그 항목을 나타낼 수 있습니다.

CloudWatch 로그의 [오류 로그 항목](https://docs.aws.amazon.com/iot/latest/apireference/cwl-format.html#dynamic-group-logs)은 다음과 같은 경우에 생성됩니다.
+ 적격 사물은 동적 사물 그룹에 추가할 수 없습니다.
+ 동적 사물 그룹에서 사물을 제거하여 다른 그룹에 추가합니다.

사물을 동적 사물 그룹에 추가할 수 있게 되면 다음 사항을 고려합니다.
+ 사물이 이미 가능한 많은 그룹에 있습니까? ([제한](https://docs.aws.amazon.com//general/latest/gr/iot_device_management.html#thing-limits) 참조)
  + **아니오:** 사물이 동적 사물 그룹에 추가됩니다.
  + **예:** 사물이 동적 사물 그룹의 멤버입니까?
    + **아니오:** 사물을 동적 사물 그룹에 추가할 수 없고, 오류가 로깅되며 [`AddThingToDynamicThingGroupsFailed` 지표](metrics_dimensions.md#iot-metrics)가 생성됩니다.
    + **예:** 참가할 동적 사물 그룹이 사물이 이미 멤버인 동적 사물 그룹보다 오래되었습니까?
      + **아니오:** 사물을 동적 사물 그룹에 추가할 수 없고, 오류가 로깅되며 [`AddThingToDynamicThingGroupsFailed` 지표](metrics_dimensions.md#iot-metrics)가 생성됩니다.
      + **예:** 최근 동적 사물 그룹에서 사물을 제거하고 오류를 로깅하고 사물을 동적 사물 그룹에 추가합니다. 이렇게 하면 사물이 제거된 동적 사물 그룹에 대한 오류 및 [`AddThingToDynamicThingGroupsFailed` 지표](metrics_dimensions.md#iot-metrics)가 생성됩니다.

동적 사물 그룹의 사물이 더 이상 검색 쿼리를 충족하지 않으면 동적 사물 그룹에서 제거됩니다. 마찬가지로 동적 사물 그룹의 검색 쿼리를 충족하도록 사물이 업데이트되면 이전에 설명한 대로 그룹에 추가됩니다. 이러한 추가 및 제거는 정상이며 오류 로그 항목을 생성하지 않습니다.

### `overrideDynamicGroups`를 활성화하면 정적 그룹이 동적 그룹보다 우선합니다.
<a name="membership-limit"></a>

사물이 속할 수 있는 그룹의 수는 [제한](https://docs.aws.amazon.com//general/latest/gr/iot_device_management.html#thing-limits)되어 있습니다. [AddThingToThingGroup](https://docs.aws.amazon.com/iot/latest/apireference/API_AddThingToThingGroup.html) 또는 [UpdateThingGroupsForThing](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateThingGroupsForThing.html) 명령을 사용하여 사물 멤버십을 업데이트할 때 `--overrideDynamicGroups` 파라미터를 추가하면 정적 사물 그룹이 동적 사물 그룹보다 우선합니다.

정적 사물 그룹에 사물을 추가할 때 다음 사항을 고려합니다.
+ 사물이 이미 최대 그룹 수에 속해 있습니까?
  + **아니오:** 사물이 정적 사물 그룹에 추가됩니다.
  + **예:** 사물이 동적 그룹에 있습니까?
    + **아니요(NO):** 사물을 사물 그룹에 추가할 수 없습니다. 이 명령은 예외를 발생시킵니다.
    + **예:** **--overrideDynamicGroups**가 활성화되었습니까?
      + **아니요(NO):** 사물을 사물 그룹에 추가할 수 없습니다. 이 명령은 예외를 발생시킵니다.
      + **예:** 가장 최근에 생성된 동적 사물 그룹에서 사물이 제거되고 오류가 로깅되며 사물이 제거된 동적 사물 그룹에 대한 [`AddThingToDynamicThingGroupsFailed` 지표](metrics_dimensions.md#iot-metrics)가 생성됩니다. 그런 다음 사물이 정적 사물 그룹에 추가됩니다.

### 이전 동적 사물 그룹이 최신 사물 그룹보다 우선합니다.
<a name="group-priorities"></a>

사물이 속할 수 있는 그룹의 수는 [제한](https://docs.aws.amazon.com//general/latest/gr/iot_device_management.html#thing-limits)되어 있습니다. 생성 또는 업데이트 작업이 사물에 대한 추가 그룹 자격을 생성하고 해당 사물이 그룹 한도에 도달하면 다른 동적 사물 그룹에서 제거되어 이 추가를 활성화할 수 있습니다. 발생 방법에 대한 자세한 내용은 [성공한 명령은 오류를 로깅할 수 있습니다.](#log-errors) 및 [`overrideDynamicGroups`를 활성화하면 정적 그룹이 동적 그룹보다 우선합니다.](#membership-limit)에서 예제를 참조하세요.

사물이 동적 사물 그룹에서 제거되면 오류가 로깅되고 이벤트가 발생합니다.

### 정책을 동적 항목 그룹에 적용할 수 없습니다.
<a name="apply-policy"></a>

 동적 사물 그룹에 정책을 적용하려고 하면 예외가 생성됩니다.

### 동적 사물 그룹 멤버십은 일관성을 가짐
<a name="update-conflict"></a>

레지스트리에 대해서는 사물의 최종 상태만 평가됩니다. 상태가 빠르게 업데이트되는 경우에는 중간 상태를 건너뛸 수 있습니다. 중간 상태에 따라 멤버십이 달라지는 동적 사물 그룹에는 규칙 또는 작업을 연결하지 마세요.