

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

# 디바이스 어드바이저
<a name="device-advisor"></a>

[Device Advisor](https://aws.amazon.com/iot-core/features/)는 디바이스 소프트웨어 개발 중에 IoT 디바이스의 유효성을 검사하기 위한 클라우드 기반의 완전 관리형 테스트 기능입니다. Device Advisor는 프로덕션에 디바이스를 배포하기 AWS IoT Core전에 IoT 디바이스의 안정적이고 안전한 연결을 검증하는 데 사용할 수 있는 사전 구축된 테스트를 제공합니다. Device Advisor의 미리 빌드된 테스트는 [TLS](https://docs.aws.amazon.com//iot/latest/developerguide/protocols.html), [MQTT](https://docs.aws.amazon.com//iot/latest/developerguide/protocols.html), [디바이스 섀도우](https://docs.aws.amazon.com//iot/latest/developerguide/iot-device-shadows.html) 및 [IoT 작업](https://docs.aws.amazon.com//iot/latest/developerguide/iot-jobs.html) 사용에 대한 모범 사례에 대해 디바이스 소프트웨어를 검증하는 데 도움이 됩니다. 서명된 자격 보고서를 다운로드하고 AWS 파트너 네트워크에 제출함으로써 디바이스를 보내고 테스트를 기다릴 필요 없이 [AWS 파트너 디바이스 카탈로그](https://devices.amazonaws.com/)를 위한 디바이스 검증을 받을 수 있습니다.

**참고**  
Device Advisor는 us-east-1, us-west-2, ap-northeast-1 및 eu-west-1 리전에서 지원됩니다.  
Device Advisor는 MQTT 및 MQTT over WebSocket Secure(WSS) 프로토콜을 사용하여 메시지를 게시하고 구독하는 디바이스와 클라이언트를 지원합니다. 모든 프로토콜은 IPv4 및 IPv6을 지원합니다.  
Device Advisor는 현재 RSA 서버 인증서를 지원합니다.

에 연결하도록 구축된 모든 디바이스는 Device Advisor를 활용할 AWS IoT Core 수 있습니다. [AWS IoT 콘솔](https://us-east-1.console.aws.amazon.com/iot/home?region=us-east-1#/deviceadvisor/intro)에서 또는 AWS CLI 또는 SDK를 사용하여 Device Advisor에 액세스할 수 있습니다. 디바이스를 테스트할 준비가 되면에 등록 AWS IoT Core 하고 Device Advisor 엔드포인트로 디바이스 소프트웨어를 구성합니다. 그런 다음 미리 빌드된 테스트를 선택하고, 구성하고, 디바이스에서 테스트를 실행하고, 자세한 로그 또는 검증 보고서와 함께 테스트 결과를 가져옵니다.

Device Advisor는 AWS 클라우드의 테스트 엔드포인트입니다. Device Advisor가 제공하는 테스트 엔드포인트에 연결하도록 디바이스를 구성하여 테스트할 수 있습니다. 테스트 엔드포인트에 연결하도록 디바이스를 구성한 후 Device Advisor 콘솔을 방문하거나 AWS SDK를 사용하여 디바이스에서 실행할 테스트를 선택할 수 있습니다. 그런 다음 Device Advisor는 리소스 프로비저닝, 테스트 프로세스 예약, 상태 시스템 관리, 디바이스 동작 기록, 결과 로깅, 테스트 보고서 형식으로 최종 결과 제공 등 테스트의 전체 수명 주기를 관리합니다.

**TLS 프로토콜**

전송 계층 보안(TLS) 프로토콜은 인터넷과 같은 안전하지 않은 네트워크를 통해 기밀 데이터를 암호화하는 데 사용됩니다. TLS 프로토콜은 보안 소켓 계층(SSL) 프로토콜의 후속 프로토콜입니다.

Device Advisor는 다음 TLS 프로토콜을 지원합니다.
+ TLS 1.3(권장)
+ TLS 1.2

**프로토콜, 포트 매핑 및 인증**

디바이스 통신 프로토콜은 디바이스 또는 클라이언트가 디바이스 엔드포인트를 사용하여 메시지 브로커에 연결하는 데 사용됩니다. 다음 테이블에는 Device Advisor 엔드포인트가 지원하는 프로토콜과 사용되는 인증 방법 및 포트가 나열되어 있습니다.


**프로토콜, 인증 및 포트 매핑**  

| 프로토콜 | 지원되는 작업 | Authentication | 포트 | ALPN 프로토콜 이름 | 
| --- | --- | --- | --- | --- | 
| MQTT over WebSocket | 게시, 구독 | 서명 버전 4 | 443 | 해당 사항 없음 | 
| MQTT | 게시, 구독 | X.509 클라이언트 인증서 | 8883 | `x-amzn-mqtt-ca` | 
| MQTT | 게시, 구독 | X.509 클라이언트 인증서 | 443 | 해당 사항 없음 | 

**Topics**
+ [설정](device-advisor-setting-up.md)
+ [콘솔에서 Device Advisor 시작하기](da-console-guide.md)
+ [Device Advisor 워크플로](device-advisor-workflow.md)
+ [Device Advisor 세부 콘솔 워크플로](device-advisor-console-tutorial.md)
+ [장기간 테스트 콘솔 워크플로](device-advisor-long-duration-console-tutorial.md)
+ [Device Advisor VPC 엔드포인트(AWS PrivateLink)](device-advisor-vpc-endpoint.md)
+ [Device Advisor 테스트 케이스](device-advisor-tests.md)

# 설정
<a name="device-advisor-setting-up"></a>

Device Advisor를 처음 사용하는 경우, 먼저 다음 작업을 완료해야 합니다.

## IoT 사물 생성
<a name="da-create-thing-certificate"></a>

먼저 IoT 사물을 생성하고 이 사물에 인증서를 첨부합니다. 사물을 생성하는 방법에 대한 자습서는 [사물 객체 생성](https://docs.aws.amazon.com/iot/latest/developerguide/create-iot-resources.html#create-aws-thing)을 참조하세요.

## 디바이스 역할로 사용할 IAM 역할 생성
<a name="da-iam-role"></a>

**참고**  
Device Advisor 콘솔을 사용하여 디바이스 역할을 빠르게 생성할 수 있습니다. Device Advisor 콘솔을 사용하여 디바이스 역할을 설정하는 방법은 [콘솔에서 Device Advisor 시작하기](https://docs.aws.amazon.com/iot/latest/developerguide/da-console-guide.html)를 참조하세요.

1. [AWS Identity and Access Management 콘솔](https://console.aws.amazon.com/iam/home?region=us-west-2#/home)로 이동하여 Device Advisor 테스트에 사용하는에 로그인 AWS 계정 합니다.

1. 왼쪽 탐색 창에서 **정책(Policies)**을 선택합니다.

1. **정책 생성**을 선택합니다.

1. **정책 생성(Create policy)**에서 다음을 수행합니다.

   1. **서비스(Service)**에서 **IoT**를 선택합니다.

   1. **작업**에서 다음 작업 중 하나를 수행합니다.
      + (권장) 이전 섹션에서 생성한 IoT 사물 또는 인증서에 첨부된 정책을 기반으로 작업을 선택합니다.
      + **필터 작업** 상자에서 다음 작업을 검색하고 선택합니다.
        + `Connect`
        + `Publish`
        + `Subscribe`
        + `Receive`
        + `RetainPublish`

   1. **리소스**에서 클라이언트, 주제 및 주제 리소스를 제한합니다. 이러한 리소스를 제한하는 것은 보안 모범 사례입니다. 리소스를 제한하려면 다음 작업을 수행하세요.

      1. **CONNECT 작업에 대한 클라이언트 리소스 ARN 지정(Specify client resource ARN for the Connect action)**을 선택합니다.

      1. **ARN 추가**를 선택하고 다음 중 하나를 수행합니다.
**참고**  
*clientId*는 디바이스가 Device Advisor와 상호 작용하기 위해 사용하는 MQTT 클라이언트 ID입니다.
         + 시각적 ARN 편집기에서 **리전**, **accountID**, **clientID**를 지정합니다.
         + 테스트 케이스를 실행하려는 IoT 주제의 Amazon 리소스 이름(ARN)을 수동으로 입력합니다.

      1. **추가**를 선택합니다.

      1. **수신 및 1개 추가 작업에 대한 주제 리소스 ARN 지정**을 선택합니다.

      1. **ARN 추가**를 선택하고 다음 중 하나를 수행합니다.
**참고**  
*주제 이름*은 디바이스가 메시지를 게시하는 대상 MQTT 주제입니다.
         + 시각적 ARN 편집기에서 **리전**, **accountID**, **주제 이름**을 지정합니다.
         + 테스트 케이스를 실행하려는 IoT 주제의 ARN을 수동으로 입력합니다.

      1. **추가(Add)**를 선택합니다.

      1. **구독 작업에 대한 topicFilter 리소스 ARN 지정**을 선택합니다.

      1. **ARN 추가**를 선택하고 다음 중 하나를 수행합니다.
**참고**  
*주제 이름*은 디바이스가 구독하는 MQTT 주제입니다.
         + 시각적 ARN 편집기에서 **리전**, **accountID**, **주제 이름**을 지정합니다.
         + 테스트 케이스를 실행하려는 IoT 주제의 ARN을 수동으로 입력합니다.

      1. **추가**를 선택합니다.

1. **다음: 태그**를 선택합니다.

1. **다음: 검토**를 선택합니다.

1. **정책 검토**에 정책의 **이름**을 입력합니다.

1. **정책 생성**을 선택합니다.

1. 왼쪽 탐색 창에서 **역할**을 선택합니다.

1. **역할 생성**을 선택합니다.

1. **신뢰할 수 있는 엔터티 선택**에서 **사용자 지정 신뢰 정책**을 선택합니다.

1. **사용자 지정 신뢰 정책** 상자에 다음 신뢰 정책을 입력합니다. 혼동된 대리자 문제를 방지하기 위하여 전역 조건 컨텍스트 키 `[aws:SourceArn](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn)` 및 `[aws:SourceAccount](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount)`를 정책에 추가합니다.
**중요**  
`aws:SourceArn`이 `format: arn:aws:iotdeviceadvisor:region:account-id:*.`를 준수해야 합니다. `region`이 AWS IoT 리전과 일치하고 `account-id`가 고객 계정 ID와 일치해야 합니다. 자세한 설명은 [교차 서비스 혼동된 대리자 예방](https://docs.aws.amazon.com/iot/latest/developerguide/security-best-practices.html#cross-service-confused-deputy-prevention-DA)을 참조하세요.  
****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "AllowAwsIoTCoreDeviceAdvisor",
               "Effect": "Allow",
               "Principal": {
                   "Service": "iotdeviceadvisor.amazonaws.com"
           },
               "Action": "sts:AssumeRole",
               "Condition": {
                   "StringEquals": {
                       "aws:SourceAccount": "123456789012"
               },
                   "ArnLike": {
                       "aws:SourceArn": "arn:aws:iotdeviceadvisor:*:123456789012:suitedefinition/*"
               }
           }
           }
       ]
   }
   ```

1. **다음**을 선택합니다.

1. 4단계에서 생성한 정책을 선택합니다.

1. (선택 사항) **권한 경계 설정**에서 **권한 경계를 사용하여 최대 역할 권한 제어**를 선택한 후 방금 생성한 정책을 선택합니다.

1. **다음**을 선택합니다.

1. **역할 이름** 및 **역할 설명**을 입력합니다.

1. **역할 생성**을 선택합니다.

## IAM 사용자가 Device Advisor를 사용할 수 있도록 사용자 정의 관리형 정책 생성
<a name="da-managed-policy"></a>

1. [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)에서 IAM 콘솔로 이동합니다. 메시지가 표시되면 AWS 자격 증명을 입력하여 로그인합니다.

1. 왼쪽 탐색 창에서 **정책**을 선택합니다.

1. **정책 생성**을 선택한 후 **JSON** 탭을 선택합니다.

1. Device Advisor를 사용하는 데 필요한 권한을 추가합니다. 정책 문서는 [보안 모범 사례](https://docs.aws.amazon.com/iot/latest/developerguide/security-best-practices.html#device-advisor-perms) 주제에서 찾을 수 있습니다.

1. **정책 검토**를 선택합니다.

1. **이름** 및 **설명**을 입력합니다.

1. **정책 생성**을 선택하세요.

## Device Advisor를 사용할 IAM 사용자 생성
<a name="da-iam-user"></a>

**참고**  
Device Advisor 테스트를 실행할 때 사용할 IAM 사용자를 생성하는 것이 좋습니다. 관리자 사용자로부터 Device Advisor 테스트를 실행하면 보안 위험이 발생할 수 있으므로 권장하지 않습니다.

1. IAM 콘솔([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/))로 이동합니다. 메시지가 표시되면 AWS 자격 증명을 입력하여 로그인합니다.

1. 왼쪽 탐색 창에서 **사용자**를 선택합니다.

1. **사용자 추가**를 선택합니다.

1. **사용자 이름**을 입력합니다.

1. 사용자는 AWS 외부에서와 상호 작용하려는 경우 프로그래밍 방식의 액세스가 필요합니다 AWS Management Console. 프로그래밍 방식 액세스를 부여하는 방법은에 액세스하는 사용자 유형에 따라 다릅니다 AWS.

   사용자에게 프로그래밍 방식 액세스 권한을 부여하려면 다음 옵션 중 하나를 선택합니다.  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/device-advisor-setting-up.html)

1. **다음: 권한**을 선택합니다.

1. 액세스 권한을 제공하려면 사용자, 그룹 또는 역할에 권한을 추가하세요.
   + 의 사용자 및 그룹 AWS IAM Identity Center:

     권한 세트를 생성합니다. *AWS IAM Identity Center 사용자 안내서*에서 [권한 세트 생성](https://docs.aws.amazon.com//singlesignon/latest/userguide/howtocreatepermissionset.html)의 지침을 따릅니다.
   + ID 제공업체를 통해 IAM에서 관리되는 사용자:

     ID 페더레이션을 위한 역할을 생성합니다. *IAM 사용자 설명서*의 [Create a role for a third-party identity provider (federation)](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-idp.html)의 지침을 따릅니다.
   + IAM 사용자:
     + 사용자가 맡을 수 있는 역할을 생성합니다. *IAM 사용자 설명서*에서 [Create a role for an IAM user](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-user.html)의 지침을 따릅니다.
     + (권장되지 않음) 정책을 사용자에게 직접 연결하거나 사용자를 사용자 그룹에 추가합니다. *IAM 사용 설명서*에서 [사용자(콘솔)에 권한 추가](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console)의 지침을 따릅니다.

1. 생성한 사용자 지정 관리형 정책의 이름을 검색 상자에 입력합니다. 그런 다음 **정책 이름** 확인란을 선택합니다.

1. **다음: 태그**를 선택합니다.

1. **다음: 검토**를 선택합니다.

1. **사용자 생성**을 선택합니다.

1. **닫기**를 선택합니다.

Device Advisor를 사용하려면 사용자를 대신하여 AWS 리소스(사물, 인증서 및 엔드포인트)에 액세스해야 합니다. IAM 사용자에게 필요한 권한이 있어야 합니다. 또한 IAM 사용자에게 필요한 권한 정책을 연결하는 경우 Device Advisor는 Amazon CloudWatch에 로그를 게시합니다.

## 디바이스 구성
<a name="da-configure-device"></a>

Device Advisor에서는 SNI(서버 이름 표시) TLS 확장을 사용하여 TLS 구성을 적용합니다. 디바이스는 Device Advisor 테스트 엔드포인트와 동일한 서버 이름을 연결하고 전달할 때 이 확장을 사용해야 합니다.

Device Advisor는 테스트가 `Running` 상태일 때 TLS 연결을 허용합니다. 각 테스트 실행 전후에는 TLS 연결을 거부합니다. 이러한 이유로 Device Advisor에서 완전히 자동화된 테스트 경험을 위해 디바이스 연결 재시도 메커니즘을 사용할 것을 권장합니다. TLS 연결, MQTT 연결 및 MQTT 게시와 같이 둘 이상의 테스트 케이스가 포함된 테스트 제품군을 실행할 수 있습니다. 테스트 케이스 여러 개를 실행하는 경우 디바이스가 5초마다 테스트 엔드포인트에 연결을 시도하도록 하는 것이 좋습니다. 그런 다음 여러 테스트 케이스를 순서대로 실행하도록 자동화할 수 있습니다.

**참고**  
디바이스 소프트웨어를 테스트할 수 있도록 준비하려면 AWS IoT Core에 연결할 수 있는 SDK를 사용하는 것이 좋습니다. 그런 다음 AWS 계정에 제공된 Device Advisor 테스트 엔드포인트로 SDK를 업데이트해야 합니다.

Device Advisor는 계정 수준 엔드포인트와 디바이스 수준 엔드포인트라는 두 가지 유형의 엔드포인트를 지원합니다. 사용 사례에 가장 적합한 엔드포인트를 선택합니다. 서로 다른 디바이스에 대해 여러 테스트 제품군을 동시에 실행하려면 디바이스 수준 엔드포인트를 사용합니다.

다음 명령을 실행하여 디바이스 수준 엔드포인트를 가져옵니다.

X.509 클라이언트 인증서를 사용하는 MQTT 고객의 경우:

```
aws iotdeviceadvisor get-endpoint --thing-arn your-thing-arn
```

또는

```
aws iotdeviceadvisor get-endpoint --certificate-arn your-certificate-arn
```

서명 버전 4를 사용하는 MQTT over WebSocket 고객의 경우:

```
aws iotdeviceadvisor get-endpoint --device-role-arn your-device-role-arn --authentication-method SignatureVersion4
```

한 번에 하나의 테스트 제품군을 실행하려면 계정 수준 엔드포인트를 선택합니다. 다음 명령을 실행하여 계정 수준 엔드포인트를 가져옵니다.

```
aws iotdeviceadvisor get-endpoint
```

# 콘솔에서 Device Advisor 시작하기
<a name="da-console-guide"></a>

이 자습서는 콘솔 AWS IoT Core Device Advisor 에서를 시작하는 데 도움이 됩니다. Device Advisor는 필수 테스트 및 서명된 자격 보고서와 같은 기능을 제공합니다. 이 테스트 및 보고서를 사용하여 [AWS IoT Core 자격 프로그램](https://aws.amazon.com/partners/dqp/)에 자세히 설명된 대로 [AWS 파트너 디바이스 카탈로그](https://devices.amazonaws.com/)에서 디바이스에 자격을 부여하고 나열할 수 있습니다.

Device Advisor 사용에 대한 자세한 내용은 [Device Advisor 워크플로](device-advisor-workflow.md) 및 [Device Advisor 세부 콘솔 워크플로](device-advisor-console-tutorial.md) 섹션을 참조하세요.

이 자습서를 완료하려면 [설정](device-advisor-setting-up.md)에 설명된 단계를 따릅니다.

**참고**  
Device Advisor는 AWS 리전다음에서 지원됩니다.  
미국 동부(버지니아 북부)
미국 서부(오레곤)
아시아 태평양(도쿄)
유럽(아일랜드)

**시작하기**

1. [AWS IoT 콘솔](https://console.aws.amazon.com//iot) 탐색 창의 **테스트**에서 **Device Advisor**를 선택합니다. 그런 다음 콘솔에서 **설명 시작** 버튼을 선택합니다.  
![\[Device Advisor는 IoT 디바이스가 와의 안전한 상호 작용을 검증하고, 소프트웨어 문제를 식별하고 AWS IoT Core, 테스트 결과를 얻을 수 있는 완전 관리형 테스트 기능입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/da-console-gs.png)

1. **Device Advisor 시작하기** 페이지에서는 디바이스에 대해 테스트 제품군을 만들고 테스트를 실행하는 데 필요한 단계에 대한 개요를 제공합니다. 여기에서 계정의 Device Advisor 테스트 엔드포인트를 찾을 수도 있습니다. 이 테스트 엔드포인트에 연결하기 위해 테스트에 사용되는 디바이스의 펌웨어 또는 소프트웨어를 구성해야 합니다.

   이 자습서를 완료하려면 먼저 [사물 및 인증서를 생성](https://docs.aws.amazon.com/iot/latest/developerguide/device-advisor-setting-up.html#da-create-thing-certificate)해야 합니다. **작동 방식**에 있는 정보를 검토한 후 **다음**을 선택합니다.  
![\[IoT 디바이스의 연결을 테스트하는 단계: 프로토콜을 선택하고, 테스트 제품군을 생성하고, 디바이스 설정을 구성합니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/da-console-gs1.png)

1.  **1단계: 프로토콜 선택**에서 나열된 옵션 중에서 프로토콜을 선택합니다. 그리고 **다음**을 선택합니다.  
![\[IoT 디바이스를 테스트하기 위한 통신 프로토콜(MQTT 3.1.1, MQTT 3.1.1 over WebSocket, MQTT 5, MQTT 5 over WebSocket)을 선택하는 옵션을 보여주는 Device Advisor 인터페이스입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/da-console-protocol.png)

1. **2단계(Step 2)**에서 사용자 정의 테스트 스위트를 만들고 구성합니다. 사용자 지정 테스트 스위트에는 하나 이상의 테스트 그룹이 있어야 하며 각 테스트 그룹에는 하나 이상의 테스트 케이스가 있어야 합니다. 사용자가 시작할 수 있도록 **MQTT 연결** 테스트 케이스를 추가했습니다.

   **테스트 스위트 속성(Test suite properties)**을 선택합니다.  
![\[Device Advisors의 '테스트 제품군 생성' 화면에서 사용자는 MQTT 프로토콜을 사용하여 IoT 디바이스를 테스트하기 위한 테스트 그룹 및 사례를 생성하고 구성할 수 있습니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/da-console-test-suite-create.png)

   테스트 제품군을 만들 때 테스트 제품군 속성을 제공합니다. 다음 스위트 수준 속성을 구성할 수 있습니다.
   + **테스트 제품군 이름(Test suite name)**: 테스트 제품군 이름을 입력합니다.
   + **제한 시간**(선택 사항): 현재 테스트 제품군의 각 테스트 케이스에 대한 제한 시간(초)입니다. 제한 시간 값을 지정하지 않으면 기본값이 사용됩니다.
   + **태그(Tags)**(선택 사항): 테스트 제품군에 태그를 추가합니다.

   완료했으면 **Update properties**(속성 업데이트)를 선택합니다.  
![\[이름, 제한 시간 및 태그 추가 기능을 포함하여 테스트 제품군의 속성을 업데이트하는 양식입니다. '속성 업데이트' 버튼이 포함되어 있습니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/da-console-test-suite-properties.png)

1. (선택 사항) 테스트 그룹 이름 옆에 있는 **편집** 버튼을 선택하여 테스트 제품군 그룹 구성을 업데이트할 수 있습니다.
   + **이름(Name)**: 테스트 스위트 그룹의 사용자 정의 이름을 입력합니다.
   + **제한 시간**(선택 사항): 현재 테스트 제품군의 각 테스트 케이스에 대한 제한 시간(초)입니다. 제한 시간 값을 지정하지 않으면 기본값이 사용됩니다.

   마쳤으면 **완료**를 선택하여 계속합니다.  
![\['테스트 그룹 1'이라는 테스트 그룹이 제한 시간을 구성하고 더 많은 테스트 그룹을 추가하는 옵션과 함께 표시됩니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/da-console-test-suite-config.png)

1. (선택 사항) 테스트 케이스 이름 옆에 있는 **편집** 버튼을 선택하여 테스트 케이스의 테스트 케이스 구성을 업데이트할 수 있습니다.
   + **이름(Name)**: 테스트 스위트 그룹의 사용자 정의 이름을 입력합니다.
   + **제한 시간**(선택 사항): 선택한 테스트 케이스의 제한 시간(초)입니다. 제한 시간 값을 지정하지 않으면 기본값이 사용됩니다.

   마쳤으면 **완료**를 선택하여 계속합니다.  
![\[IoT 디바이스 테스트를 위한 테스트 제품군, 테스트 그룹 및 개별 테스트 케이스를 구성하는 옵션을 보여주는 ‘테스트 제품군 생성’ 인터페이스입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/da-console-test-case-config.png)

1. (선택 사항) 테스트 제품군에 테스트 그룹을 더 추가하려면 **테스트 그룹 추가**를 선택하고 5단계의 지침을 따릅니다.

1. (선택 사항) 더 많은 테스트 케이스를 추가하려면 **테스트 케이스** 섹션의 테스트 케이스를 테스트 그룹 중 하나로 끌어옵니다.  
![\[사용자가 IoT 디바이스의 MQTT 프로토콜 테스트에 대한 테스트 그룹 및 테스트 케이스를 구성할 수 있는 ‘테스트 제품군 생성’ 인터페이스입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/da-console-drag.png)

1. 테스트 그룹 및 테스트 케이스의 순서를 변경할 수 있습니다. 변경하려면 나열된 테스트 케이스를 목록 위나 아래로 드래그합니다. Device Advisor는 테스트를 나열된 순서대로 실행합니다.

   테스트 스위트를 구성한 후 **다음(Next)**을 선택합니다.

1. **3단계**에서 Device Advisor를 사용하여 테스트할 AWS IoT 사물 또는 인증서를 선택합니다. 기존 사물이나 인증서가 없는 경우 [설정](https://docs.aws.amazon.com/iot/latest/developerguide/device-advisor-setting-up.html)을 참조하세요.  
![\[프로토콜 선택, 테스트 제품군 생성, 디바이스 설정 구성, 테스트 실행 및 결과 검토를 포함하는 구성 옵션입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/da-device-settings.png)

1. Device Advisor가 테스트 디바이스를 대신하여 AWS IoT MQTT 작업을 수행하는 데 사용하는 디바이스 역할을 구성할 수 있습니다. **MQTT 연결** 테스트 케이스의 경우에만 **연결** 작업이 자동으로 선택됩니다. 테스트 제품군을 실행하려면 디바이스 역할에 이 권한이 필요하기 때문입니다. 다른 테스트 케이스의 경우 해당하는 작업이 선택됩니다.

   선택한 각 작업에 대한 리소스 값을 제공합니다. 예를 들어 **연결** 작업의 경우 디바이스가 Device Advisor 엔드포인트에 연결하기 위해 사용하는 클라이언트 ID를 제공합니다. 여러 값을 쉼표로 구분하여 제공하고 값 앞에 와일드카드(\$1) 문자를 사용할 수 있습니다. 예를 들어, `MyTopic`으로 시작하는 주제에 대한 게시 권한을 제공하려면 리소스 값으로 **MyTopic\$1**을 입력합니다.  
![\[MQTT 주제 및 클라이언트 ID를 연결하고, 게시하고, 구독하고, 관리하기 위한 권한을 정의하는 디바이스 역할을 선택하는 Device Advisor 인터페이스입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/da-console-device-role.png)

   [설정](https://docs.aws.amazon.com/iot/latest/developerguide/device-advisor-setting-up.html)에서 이전에 만든 디바이스 역할을 사용하려면 **기존 역할 선택**을 선택합니다. 그런 다음 **역할 선택**에서 디바이스 역할을 선택합니다.  
![\[새 역할을 생성하거나 ‘DeviceAdvisorServiceRole’이라는 기존 역할을 선택하는 옵션이 있는 디바이스 역할을 선택하는 웹 양식 인터페이스입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/da-console-select-device-role.png)

   제공된 두 옵션 중 하나를 사용하여 디바이스 역할을 구성하고 **다음**을 선택합니다.

1. **테스트 엔드포인트** 섹션에서 사용 사례에 가장 적합한 엔드포인트를 선택합니다. 여러 테스트 제품군을 동일한와 동시에 실행하려면 **디바이스 수준 엔드포인트**를 AWS 계정선택합니다. 한 번에 하나의 테스트 제품군을 실행하려면 **계정 수준 엔드포인트**를 선택합니다.  
![\[엔드포인트 URL이 제공되고 다음 버튼이 있는 테스트용 계정 수준 또는 디바이스 수준 엔드포인트를 선택하는 옵션입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/da-console-endpoint.png)

1. **4단계**에서는 선택한 테스트 디바이스, 테스트 엔드포인트, 테스트 제품군 및 구성된 테스트 디바이스 역할에 대한 개요를 제공합니다. 섹션을 변경하려면 편집하려는 섹션 위에 있는 **편집** 버튼을 선택합니다. 테스트 구성을 확인했으면 **실행**을 선택하여 테스트 제품군을 만들고 테스트를 실행합니다.
**참고**  
최상의 결과를 위해 테스트 제품군 실행을 시작하기 전에 선택한 테스트 디바이스를 Device Advisor 테스트 엔드포인트에 연결할 수 있습니다. 디바이스에서 테스트 엔드포인트에 최대 1\$12분 동안 5초마다 연결을 시도할 수 있도록 구성된 메커니즘을 사용하는 것이 좋습니다.  
![\[디바이스 역할 세부 정보, 테스트 엔드포인트 및 취소, 뒤로 이동 또는 실행 옵션을 보여주는 디바이스 구성 콘솔입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/da-console-device-review.png)  
![\[디바이스 역할 세부 정보, 테스트 엔드포인트 및 취소, 뒤로 이동 또는 실행 옵션을 보여주는 디바이스 구성 콘솔입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/da-console-device-review-contd.png)

1. **테스트**의 탐색 창에서 **Device Advisor**를 선택하고 **테스트 실행 및 결과**를 선택합니다. 실행 세부 정보 및 로그를 보려면 테스트 제품군 실행을 선택합니다.  
![\[디바이스 ‘MyThing’에 대해 MQTT 3.1.1 테스트가 진행 중임을 나타내는 테스트 제품군 인터페이스입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/da-console-runs-results.png)

1. 제품군 실행에 대한 Amazon CloudWatch 로그에 액세스하는 방법:
   + **테스트 스위트 로그(Test suite log)**를 선택하여 실행 중인 테스트 스위트에 대한 CloudWatch 로그를 봅니다.
   + 테스트 케이스에 대한 **테스트 케이스 로그(Test suite log)**를 선택하여 테스트 케이스 관련 CloudWatch 로그를 봅니다.

1. 테스트 결과에 따라 모든 테스트가 통과될 때까지 디바이스의 [문제를 해결](https://docs.aws.amazon.com/iot/latest/developerguide/iot_troubleshooting.html#device-advisor-troubleshooting)합니다.

# Device Advisor 워크플로
<a name="device-advisor-workflow"></a>

이 자습서에서는 사용자 지정 테스트 제품군을 만들고 콘솔에서 테스트할 디바이스에 대해 테스트를 실행하는 방법을 설명합니다. 테스트가 완료되면 테스트 결과와 세부 로그를 볼 수 있습니다.

## 사전 조건
<a name="device-advisor-workflow-prereqs"></a>

이 자습서를 시작하기 전에 [설정](device-advisor-setting-up.md)에 설명된 단계를 완료하세요.

## 테스트 스위트 정의 만들기
<a name="device-advisor-workflow-create-suite-definition"></a>

먼저 [AWS SDK를 설치합니다](https://docs.aws.amazon.com/iot/latest/developerguide/iot-connect-service.html#iot-service-sdks).

### `rootGroup` 구문
<a name="rootGroup"></a>

루트 그룹은 테스트 제품군에 포함할 테스트 케이스를 지정하는 JSON 문자열입니다. 또한 해당 테스트 케이스에 필요한 모든 구성을 지정합니다. 루트 그룹을 사용하여 필요에 따라 테스트 제품군을 구조화하고 정렬하세요. 테스트 스위트의 계층 구조는 다음과 같습니다.

```
test suite → test group(s) → test case(s)
```

테스트 스위트에는 하나 이상의 테스트 그룹이 있어야 하며 각 테스트 그룹에는 하나 이상의 테스트 케이스가 있어야 합니다. Device Advisor는 테스트 그룹 및 테스트 케이스를 정의하는 순서대로 테스트를 실행합니다.

각 루트 그룹에는 다음과 같은 기본 구조를 따릅니다.

```
{
    "configuration": {  // for all tests in the test suite
        "": ""
    }
    "tests": [{
        "name": ""
        "configuration": {  // for all sub-groups in this test group 
            "": ""
        },
        "tests": [{
            "name": ""
            "configuration": {  // for all test cases in this test group 
                "": ""
            },
            "test": {
                "id": ""  
                "version": ""
            }
        }]
    }]
}
```



루트 그룹에서 그룹에 포함된 `name`, `configuration`, `tests`를 사용하여 테스트 제품군을 정의합니다. `tests` 그룹에는 개별 테스트의 정의가 포함됩니다. 각 테스트는 해당 테스트의 테스트 케이스를 정의하는 `name`, `configuration`, `test` 블록으로 정의합니다. 마지막으로, 각 테스트 케이스는 `id` 및 `version`으로 정의됩니다.

각 테스트 케이스에 대한 `"id"` 및 `"version"` 필드(`test` 블록)의 사용 방법에 대한 자세한 내용은 [Device Advisor 테스트 케이스](device-advisor-tests.md) 섹션을 참조하세요. 이 섹션에는 사용 가능한 `configuration` 설정에 대한 정보가 포함되어 있습니다.

다음 블록은 루트 그룹 구성의 예입니다. 이 구성은 구성 필드에 대한 *MQTT Connect Happy Case* 및 *MQTT Connect Exponential Backoff Retries* 테스트 케이스를 지정합니다.

```
{
    "configuration": {},  // Suite-level configuration
    "tests": [            // Group definitions should be provided here
      {
        "name": "My_MQTT_Connect_Group",  // Group definition name
        "configuration": {}               // Group definition-level configuration,
        "tests": [                        // Test case definitions should be provided here
        {
            "name": "My_MQTT_Connect_Happy_Case",  // Test case definition name
            "configuration": {
                "EXECUTION_TIMEOUT": 300        // Test case definition-level configuration, in seconds
            }, 
            "test": {
                "id": "MQTT_Connect",              // test case id
                "version": "0.0.0"                 // test case version
            }
        },
        {
            "name": "My_MQTT_Connect_Jitter_Backoff_Retries",  // Test case definition name
            "configuration": {
                "EXECUTION_TIMEOUT": 600                 // Test case definition-level configuration,  in seconds
            },
            "test": {
                "id": "MQTT_Connect_Jitter_Backoff_Retries",  // test case id
                "version": "0.0.0"                                 // test case version
            }
        }]
    }]
}
```

테스트 스위트 정의를 만들 때 루트 그룹 구성을 제공해야 합니다. 응답 객체에 반환된 `suiteDefinitionId`를 저장합니다. 이 ID를 사용하여 테스트 제품군 정의 정보를 검색하고 테스트 제품군을 실행할 수 있습니다.

다음은 Java SDK 예제입니다.

```
response = iotDeviceAdvisorClient.createSuiteDefinition(
        CreateSuiteDefinitionRequest.builder()
            .suiteDefinitionConfiguration(SuiteDefinitionConfiguration.builder()
                .suiteDefinitionName("your-suite-definition-name")
                .devices(
                    DeviceUnderTest.builder()
                        .thingArn("your-test-device-thing-arn")
                        .certificateArn("your-test-device-certificate-arn")
                        .deviceRoleArn("your-device-role-arn") //if using SigV4 for MQTT over WebSocket
                        .build()
                )
                .rootGroup("your-root-group-configuration")
                .devicePermissionRoleArn("your-device-permission-role-arn")
                .protocol("MqttV3_1_1 || MqttV5 || MqttV3_1_1_OverWebSocket || MqttV5_OverWebSocket")
                .build()
            )
            .build()
)
```

## 테스트 스위트 정의 가져오기
<a name="device-advisor-workflow-describe-suite-run"></a>

테스트 제품군 정의를 만든 후 `CreateSuiteDefinition` API 작업의 응답 객체에서 `suiteDefinitionId`를 수신합니다.

작업이 `suiteDefinitionId`를 반환하면 각 그룹 내에 새로운 `id` 필드가 표시되고 루트 그룹 내에 테스트 케이스 정의가 표시될 수 있습니다. 이러한 ID를 사용하여 테스트 제품군 정의의 하위 집합을 실행할 수 있습니다.

Java SDK 예제: 

```
response = iotDeviceAdvisorClient.GetSuiteDefinition(
    GetSuiteDefinitionRequest.builder()
        .suiteDefinitionId("your-suite-definition-id")
        .build()
)
```

## 테스트 엔드포인트 가져오기
<a name="device-advisor-workflow-get-test-endpoint"></a>

`GetEndpoint` API 작업을 사용하여 디바이스에서 사용하는 테스트 엔드포인트를 가져옵니다. 테스트에 가장 적합한 엔드포인트를 선택합니다. 여러 테스트 제품군을 동시에 실행하려면 `thing ARN`, `certificate ARN` 또는 `device role ARN`을 제공하여 디바이스 수준 엔드포인트를 사용합니다. 단일 테스트 제품군을 실행하려면 GetEndpoint 작업에 인수를 제공하지 않고 계정 수준 엔드포인트를 선택합니다.

SDK 예제:

```
response = iotDeviceAdvisorClient.getEndpoint(GetEndpointRequest.builder()
.certificateArn("your-test-device-certificate-arn")
.thingArn("your-test-device-thing-arn")
.deviceRoleArn("your-device-role-arn") //if using SigV4 for MQTT over WebSocket                
.build())
```

## 테스트 스위트 실행 시작하기
<a name="device-advisor-workflow-start-suite-run"></a>

테스트 제품군 정의를 만들고 테스트 디바이스를 Device Advisor 테스트 엔드포인트에 연결하도록 구성한 후 `StartSuiteRun` API로 테스트 제품군을 실행합니다.

MQTT 고객의 경우 `certificateArn` 또는 `thingArn`을 사용하여 테스트 제품군을 실행하세요. 둘 다 구성된 경우에 인증서가 해당 사물에 속하면 인증서가 사용됩니다.

MQTT over WebSocket 고객의 경우 `deviceRoleArn`을 사용하여 테스트 제품군을 실행합니다. 지정된 역할이 테스트 제품군 정의에 지정된 역할과 다른 경우 지정된 역할이 정의된 역할을 재정의합니다.

디바이스 수준 엔드포인트를 사용하여 하나의 AWS 계정으로 여러 테스트 제품군을 병렬로 실행하는 경우 `.parallelRun()`에 `true`를 사용합니다.

SDK 예제:

```
response = iotDeviceAdvisorClient.startSuiteRun(StartSuiteRunRequest.builder()
.suiteDefinitionId("your-suite-definition-id")
.suiteRunConfiguration(SuiteRunConfiguration.builder()
    .primaryDevice(DeviceUnderTest.builder()
        .certificateArn("your-test-device-certificate-arn")
        .thingArn("your-test-device-thing-arn")
        .deviceRoleArn("your-device-role-arn") //if using SigV4 for MQTT over WebSocket               
        .build())
    .parallelRun(true | false)    
    .build())
.build())
```

응답에서 `suiteRunId`를 저장합니다. 이 테스트 제품군 실행 결과를 검색하는 데 사용됩니다.

## 테스트 스위트 실행 가져오기
<a name="device-advisor-workflow-describe-suite"></a>

테스트 스위트 실행을 시작한 후에는 `GetSuiteRun` API로 진행 상황과 결과를 확인할 수 있습니다.

SDK 예제:

```
// Using the SDK, call the GetSuiteRun API.

response = iotDeviceAdvisorClient.GetSuiteRun(
GetSuiteRunRequest.builder()
    .suiteDefinitionId("your-suite-definition-id")
    .suiteRunId("your-suite-run-id")
.build())
```

## 테스트 스위트 실행 중지
<a name="device-advisor-workflow-stop-suite-run"></a>

아직 진행 중인 테스트 제품군 실행을 중지하려면 `StopSuiteRun` API 작업을 호출할 수 있습니다. `StopSuiteRun` 작업을 호출하고 나면 서비스가 정리 프로세스를 시작합니다. 서비스가 정리 프로세스를 실행하는 동안 테스트 제품군 실행 상태는 `Stopping`으로 업데이트됩니다. 정리 프로세스에는 몇 분이 걸릴 수 있습니다. 프로세스가 완료되면 테스트 제품군 실행 상태가 `Stopped`로 업데이트됩니다. 테스트 실행이 완전히 중지된 후에 다른 테스트 제품군 실행을 시작할 수 있습니다. 이전 섹션에 나타난 바와 같이 `GetSuiteRun` API 작업을 사용하여 주기적으로 제품군 실행 상태를 확인할 수 있습니다.

SDK 예제:

```
// Using the SDK, call the StopSuiteRun API.

response = iotDeviceAdvisorClient.StopSuiteRun(
StopSuiteRun.builder()
    .suiteDefinitionId("your-suite-definition-id")
    .suiteRunId("your-suite-run-id")
.build())
```

## 성공적인 자격 테스트 스위트 실행을 위한 자격 보고서 받기
<a name="device-advisor-workflow-qualification-report"></a>

성공적으로 완료되는 자격 테스트 제품군을 실행하는 경우 `GetSuiteRunReport` API 작업을 사용하여 자격 보고서를 검색할 수 있습니다. 이 자격 보고서를 사용하여 AWS IoT Core 자격 프로그램으로 디바이스에 자격을 부여합니다. 테스트 스위트가 자격 테스트 스위트인지 여부를 확인하려면 `intendedForQualification` 파라미터가 `true`로 설정되어 있는지 확인하세요. `GetSuiteRunReport` API 작업을 호출한 후 반환된 URL에서 최대 90초 동안 보고서를 다운로드할 수 있습니다. 이전 `GetSuiteRunReport` API 작업을 호출한 때부터 90초 이상 경과했으면 작업을 다시 호출하여 유효한 URL을 새로 검색합니다.

SDK 예제:

```
// Using the SDK, call the getSuiteRunReport API. 

response = iotDeviceAdvisorClient.getSuiteRunReport( 
    GetSuiteRunReportRequest.builder() 
        .suiteDefinitionId("your-suite-definition-id")
        .suiteRunId("your-suite-run-id")
        .build()
)
```

# Device Advisor 세부 콘솔 워크플로
<a name="device-advisor-console-tutorial"></a>

이 자습서에서는 사용자 지정 테스트 스위트를 만들고 콘솔에서 테스트할 디바이스에 대해 테스트를 실행합니다. 테스트가 완료되면 테스트 결과와 세부 로그를 볼 수 있습니다.

**Topics**
+ [사전 조건](#da-detailed-prereqs)
+ [테스트 스위트 정의 만들기](#device-advisor-console-create-suite)
+ [테스트 스위트 실행 시작하기](#device-advisor-console-run-test-suite)
+ [테스트 스위트 실행 중지(선택 사항)](#device-advisor-stop-test-run)
+ [테스트 스위트 실행 세부 정보 및 로그 보기](#device-advisor-console-view-logs)
+ [AWS IoT 검증 보고서 다운로드](#device-advisor-console-qualification-report)

## 사전 조건
<a name="da-detailed-prereqs"></a>

이 튜토리얼을 완료하려면 [사물 및 인증서를 생성](https://docs.aws.amazon.com/iot/latest/developerguide/device-advisor-setting-up.html#da-create-thing-certificate)해야 합니다.

## 테스트 스위트 정의 만들기
<a name="device-advisor-console-create-suite"></a>

테스트 제품군을 생성하여 디바이스에 대해 실행하고 확인을 수행할 수 있습니다.

1. [AWS IoT 콘솔](https://console.aws.amazon.com//iot)의 탐색 창에서 **테스트(Test)**를 확장하고,**Device Advisor**를 확장한 다음 **테스트 스위트(Test suites)**를 선택합니다.  
![\[Device Advisor는 적격 디바이스, 장기 테스트 실행 및 사용자 지정 테스트 제품군에 대한 테스트 제품군을 생성하는 옵션이 있는 인터페이스입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/da-testsuite.png)

   **테스트 스위트 생성(Create test suite)**을 선택합니다.

1. `Use the AWS Qualification test suite` 또는 `Create a new test suite`을 선택합니다.

   프로토콜의 경우 **MQTT 3.1.1** 또는 **MQTT 5**를 선택합니다.  
![\[테스트 제품군 유형(AWS IoT Core 자격, 장기 또는 사용자 지정) 및 프로토콜(MQTT 3.1.1 또는 MQTT 5)을 선택할 수 있는 옵션이 포함된 "테스트 제품군 생성".\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/da-create-test-suite.png)

   `Use the AWS Qualification test suite`를 선택하여 디바이스를 검증하고 AWS 파트너 디바이스 카탈로그에 나열합니다. 이 옵션을 선택하면 AWS IoT Core 자격 프로그램에 디바이스의 자격을 검증하는 데 필요한 테스트 케이스가 미리 선택됩니다. 테스트 그룹 및 테스트 케이스는 추가하거나 제거할 수 없습니다. 여전히 테스트 스위트 속성을 구성해야 합니다.

   `Create a new test suite` 옵션을 선택하여 사용자 정의 테스트 스위트를 생성하고 구성합니다. 초기 테스트 및 문제 해결을 위해 이 옵션으로 시작하는 것이 좋습니다. 사용자 지정 테스트 스위트에는 하나 이상의 테스트 그룹이 있어야 하며 각 테스트 그룹에는 하나 이상의 테스트 케이스가 있어야 합니다. 이 자습서에서의 목적에 맞게 이 옵션을 선택하고 **다음(Next)**을 선택합니다.  
![\[IoT 디바이스 테스트용 테스트 그룹 및 케이스가 포함된 테스트 제품군을 생성하는 단계를 보여주는 테스트 제품군 페이지를 구성합니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/da-configure-test-suite.png)

1. **테스트 스위트 속성(Test suite properties)**을 선택합니다. 테스트 스위트를 생성할 때 테스트 스위트 속성을 생성해야 합니다.  
![\[테스트 그룹을 생성하고 IoT 디바이스 기능을 테스트하기 위한 테스트 케이스를 추가하는 옵션을 보여주는 ‘테스트 제품군 구성’ 인터페이스입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/da-test-suite-properties.png)

   **테스트 스위트 속성(Test suite properties)**에서 다음을 작성합니다.
   + **테스트 스위트 이름**: 사용자 지정 이름으로 스위트를 생성할 수 있습니다.
   + **제한 시간(Timeout)**(선택 사항): 현재 테스트 스위트의 각 테스트 케이스에 대한 제한 시간(초)입니다. 제한 시간 값을 지정하지 않으면 기본값이 사용됩니다.
   + **태그(Tags)**(선택 사항): 테스트 제품군에 태그를 추가합니다.  
![\[Device Advisor 데모 제품군의 테스트 제품군 이름, 제한 시간 및 사용자 지정 태그를 지정하는 필드를 보여주는 '테스트 제품군 속성'이라는 제목의 창입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/da-test-suite-properties-1.png)

   완료했으면 **속성 업데이트(Update properties)**를 선택합니다.

1. 그룹 수준 구성을 수정하려면 `Test group 1`에서 **편집**을 선택합니다. 그런 다음 **이름**을 입력하여 그룹에 사용자 지정 이름을 부여합니다.

   선택 사항으로 선택한 테스트 그룹 아래에서 **제한 시간(Timeout)**(초 단위)을 입력할 수도 있습니다. 제한 시간 값을 지정하지 않으면 기본값이 사용됩니다.  
![\[IoT 디바이스 기능을 검증하기 위한 테스트 그룹 및 케이스를 생성하기 위한 ‘테스트 제품군 구성’ 인터페이스입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/da-edit-test-group.png)

   **완료**를 선택합니다.

1. 사용 가능한 테스트 케이스 중 하나를 **테스트 케이스(Test cases)**에서 테스트 그룹으로 끌어옵니다.  
![\[Device Advisor에서 테스트 제품군을 생성하기 위한 구성 인터페이스로, IoT 디바이스 테스트를 위한 테스트 그룹 및 테스트 케이스를 추가하는 옵션이 있습니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/da-configure-test-suite-step5.png)

1. 테스트 그룹에 추가한 테스트 케이스의 테스트 케이스 수준 구성을 수정하려면 **편집(Edit)**을 선택합니다. 그런 다음 **이름**을 입력하여 그룹에 사용자 지정 이름을 부여합니다.

   선택 사항으로 선택한 테스트 그룹 아래에서 **제한 시간(Timeout)**(초 단위)을 입력할 수도 있습니다. 제한 시간 값을 지정하지 않으면 기본값이 사용됩니다.  
![\[테스트 제품군 실행을 위한 테스트 그룹, 테스트 케이스, 제한 시간 설정 및 시작점을 구성하는 옵션이 포함된 테스트 제품군 구성 인터페이스입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/da-edit-test-case.png)

   **완료**를 선택합니다.
**참고**  
테스트 스위트에 더 많은 테스트 그룹을 추가하려면 **테스트 그룹 추가(Add test group)**를 선택합니다. 위의 단계에 따라 더 많은 테스트 그룹을 생성 및 구성하거나 하나 이상의 테스트 그룹에 더 많은 테스트 케이스를 추가합니다. 테스트 케이스를 선택하고 원하는 위치로 끌어서 테스트 그룹 및 테스트 케이스를 재정렬할 수 있습니다. Device Advisor는 테스트 그룹 및 테스트 케이스를 정의하는 순서대로 테스트를 실행합니다.

1. **다음**을 선택합니다.

1. **3단계**에서 Device Advisor가 테스트 디바이스를 대신하여 AWS IoT MQTT 작업을 수행하는 데 사용할 디바이스 역할을 구성합니다.

   **2단계(Step 2)**에서 **MQTT Connect** 테스트 케이스만 선택한 경우 이 테스트 스위트를 실행하기 위한 장치 역할에 해당 권한이 필요하므로 **Connect** 작업이 자동으로 확인됩니다. 다른 테스트 케이스를 선택한 경우 해당 필수 작업이 확인됩니다. 각 작업에 대한 리소스 값이 제공되는지 확인합니다. 예를 들어 **Connect** 작업의 경우 장치가 Device Advisor 엔드포인트와 연결할 클라이언트 ID를 제공합니다. 쉼표로 값을 구분하여 여러 값을 제공할 수 있으며 와일드카드(\$1) 문자를 사용하여 접두사 값을 제공할 수도 있습니다. 예를 들어, `MyTopic`으로 시작하는 주제에 대한 게시 권한을 제공하려면 리소스 값으로 “`MyTopic*`”을 제공합니다.  
![\[Device Advisor에서 테스트 제품군을 생성하기 위한 '디바이스 역할 선택' 단계로, 새 역할을 생성하거나 기존 역할을 선택하는 옵션과 역할 이름, 권한 및 리소스 세부 정보를 지정하는 필드가 있습니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/da-connect-role.png)

   이전에 장치 역할을 이미 생성했고 해당 역할을 사용하려면 **기존 역할 선택(Select an existing role)**을 선택하고 **역할 선택(Select role)**에서 장치 역할을 선택합니다.  
![\[새 역할을 생성하거나 기존 역할을 선택하는 옵션이 포함된 Device Advisor 테스트를 위한 디바이스 역할을 선택하는 페이지입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/da-existing-role.png)

   제공된 두 옵션 중 하나를 사용하여 디바이스 역할을 구성하고 **다음(Next)**을 선택합니다.

1. **4단계(Step 4)**에서 각 단계에서 제공되는 구성이 정확한지 확인합니다. 특정 단계에 대해 제공된 구성을 편집하려면 해당 단계에 대한 **편집(Edit)**을 선택합니다.

   구성을 확인한 후 **테스트 제품군 생성(Create test suite)**을 선택합니다.

   테스트 스위트가 성공적으로 생성되면 생성된 모든 테스트 스위트를 볼 수 있는 **테스트 스위트(Test suites)** 페이지로 리디렉션됩니다.

   테스트 스위트 생성이 실패한 경우 이전 지침에 따라 테스트 스위트, 테스트 그룹, 테스트 케이스 및 디바이스 역할이 구성되었는지 확인합니다.

## 테스트 스위트 실행 시작하기
<a name="device-advisor-console-run-test-suite"></a>

1. [AWS IoT 콘솔](https://console.aws.amazon.com//iot)의 탐색 창에서 **테스트**, **Device Advisor**를 차례로 확장한 다음 **테스트 스위트**를 선택합니다.

1. 테스트 스위트 세부 정보를 보려는 테스트 스위트를 선택합니다.  
![\[2021년 5월 11일에 생성된 ‘Device Advisor 데모 제품군’이라는 단일 테스트 제품군을 보여주는 콘솔입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/da-test-suites.png)

   테스트 스위트 세부 정보 페이지에는 테스트 스위트와 관련된 모든 정보가 표시됩니다.

1. **작업(Actions)**을 선택한 다음**테스트 스위트 실행(Run test suite)**을 선택합니다.  
![\['테스트 제품군 실행' 버튼과 이전 테스트 제품군이 실행되지 않았음을 보여주는 빈 활동 로그가 있는 데모 제품군 페이지입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/da-run-test-suites.png)

1. **구성 실행**에서 Device Advisor를 사용하여 테스트할 AWS IoT 사물 또는 인증서를 선택해야 합니다. 기존 사물이나 인증서가 없는 경우 먼저 [AWS IoT Core 리소스를 생성합니다](device-advisor-setting-up.md).

   **테스트 엔드포인트(Test endpoint)** 섹션에서 케이스에 가장 적합한 엔드포인트를 선택합니다. 나중에 동일한 AWS 계정을 사용하여 여러 테스트 제품군을 동시에 실행하려는 경우 **디바이스 수준 엔드포인트**를 선택합니다. 한 번에 하나의 테스트 스위트만 실행할 계획인 경우 **계정 수준 엔드포인트(Account-level endpoint)**를 선택합니다.

   선택한 Device Advisor의 테스트 엔드포인트로 테스트 디바이스를 구성합니다.

   사물 또는 인증서를 선택하고 Device Advisor 엔드포인트를 선택한 후 **테스트 실행(Run test)**을 선택합니다.  
![\[테스트 제품군을 실행하기 위한 구성으로 AWS IoT Core, 테스트 디바이스(사물 또는 인증서)를 선택하고, 테스트 엔드포인트(계정 수준 또는 디바이스 수준)를 선택하고, 선택적으로 태그를 추가할 수 있습니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/da-choose-thing-certificate.png)

1. 테스트 실행 세부 정보를 보려면 상단 배너의 **결과로 이동(Go to results)**을 선택합니다.  
![\['보류 중' 상태로 'Device Advisor 데모 제품군'이라는 사용자 지정 테스트 제품군의 세부 정보입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/da-test-run-results.png)

## 테스트 스위트 실행 중지(선택 사항)
<a name="device-advisor-stop-test-run"></a>

1. [AWS IoT 콘솔](https://console.aws.amazon.com//iot)의 탐색 창에서 **테스트**, **Device Advisor**를 차례로 확장한 다음 **테스트 실행 및 결과**를 선택합니다.

1. 중지하려는 진행 중인 테스트 스위트를 선택합니다.  
![\[테스트 결과는 Device Advisor 콘솔에서 실행됩니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/da-test-suite-to-stop.PNG)

1. **작업(Actions)**을 선택한 다음 **테스트 스위트 중지(Stop test suite)**를 선택합니다.  
![\[테스트 결과는 Device Advisor 콘솔에서 실행됩니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/da-stop-test-suite.PNG)

1. 이 정리 프로세스는 완료하는 데 몇 분 정도 걸립니다. 정리 프로세스를 실행하는 동안 테스트 실행 상태는 `STOPPING`이 됩니다. 새 스위트 실행을 시작하기 전에 정리 프로세스가 완료되고 테스트 스위트 상태가 `STOPPED` 상태로 변경될 때까지 기다립니다.  
![\[중지된 테스트 결과는 Device Advisor 콘솔에서 실행됩니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/da-stopped-test-suite.PNG)

## 테스트 스위트 실행 세부 정보 및 로그 보기
<a name="device-advisor-console-view-logs"></a>

1. [AWS IoT 콘솔](https://console.aws.amazon.com//iot)의 탐색 창에서 **테스트**, **Device Advisor**를 차례로 확장한 다음 **테스트 실행 및 결과**를 선택합니다.

   이 페이지에는 다음이 표시됩니다.
   + IoT 사물의 수
   + IoT 인증서 수
   + 현재 실행 중인 테스트 스위트 수
   + 생성된 모든 테스트 스위트 실행

1. 실행 세부 정보와 로그를 보려는 테스트 스위트를 선택합니다.  
![\[현재 진행 중인 ‘Device Advisor 데모 제품군’이라는 테스트 제품군의 세부 정보를 표시하는 테스트 실행 및 결과 섹션입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/da-test-suite-run.png)

   실행 요약 페이지에는 현재 테스트 스위트 실행의 상태가 표시됩니다. 이 페이지는 10초마다 자동으로 새로 고쳐집니다. 디바이스에서 테스트 엔드포인트에 1\$12분 동안 5초마다 연결을 시도할 수 있도록 구성된 메커니즘을 사용하는 것이 좋습니다. 그런 다음 자동화된 방식으로 여러 테스트 케이스를 순서대로 실행할 수 있습니다.  
![\[시스템 메시지가 표시되지 않은 성공적인 MQTT Connect 테스트를 보여주는 테스트 케이스 로그입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/da-run-summary.png)

1. 테스트 스위트 실행에 대한 CloudWatch 로그에 액세스하려면 **테스트 스위트 로그(Test suite log)**를 선택하세요.

   모든 테스트 케이스에 대한 CloudWatch 로그에 액세스하려면 **테스트 케이스 로그(Test case log)**를 선택하세요.

1. 테스트 결과에 따라 모든 테스트가 통과될 때까지 디바이스의 [문제를 해결](https://docs.aws.amazon.com/iot/latest/developerguide/iot_troubleshooting.html#device-advisor-troubleshooting)합니다.

## AWS IoT 검증 보고서 다운로드
<a name="device-advisor-console-qualification-report"></a>

테스트 **제품군을 생성하는 동안 AWS IoT 검증 테스트 제품군 사용** 옵션을 선택하고 검증 테스트 제품군을 실행할 수 있었던 경우 테스트 실행 요약 페이지에서 검증 보고서 **다운로드를 선택하여 검증 보고서를** 다운로드할 수 있습니다.

![\[MQTT, TLS 및 기타 구성 요소에 대해 통과된 테스트를 보여주는 검증 프로그램 테스트 결과입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/da-qualification-report.png)


# 장기간 테스트 콘솔 워크플로
<a name="device-advisor-long-duration-console-tutorial"></a>

이 자습서는 콘솔을 사용하여 Device Advisor에서 장기간 테스트를 시작하는 데 도움이 됩니다. 자습서를 완료하려면 [설정](device-advisor-setting-up.md)의 단계를 따릅니다.

1.  [AWS IoT 콘솔](https://console.aws.amazon.com/iot) 탐색 창에서 **Test**(테스트)를 확장하고, **Device Advisor**를 확장한 다음, **Test suites**(테스트 제품군)를 선택합니다. 페이지에서 **Create long duration test suite**(장기간 테스트 제품군 생성)를 선택합니다.  
![\[Device Advisor 콘솔의 장기 테스트 제품군 생성 섹션입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/create-ld-ts.png)

1.  **Create test suite**(테스트 제품군 생성) 페이지에서 **Long duration test suite**(장기간 테스트 제품군)를 선택하고 **Next**(다음)를 선택합니다.

   프로토콜의 경우 **MQTT 3.1.1** 또는 **MQTT 5**를 선택합니다.  
![\[Device Advisor 콘솔의 테스트 제품군 생성 단계입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/choose-ld-ts.png)

1. **Configure test suite**(테스트 제품군 구성) 페이지에서 다음 작업을 수행합니다.

   1. **Test suite name**(테스트 제품군 이름) 필드를 업데이트합니다.

   1. **Test group name**(테스트 그룹 이름) 필드를 업데이트합니다.

   1. 디바이스가 수행할 수 있는 **Device operations**(디바이스 작업)를 선택합니다. 그러면 실행할 테스트가 선택됩니다.

   1. **Settings**(설정) 옵션을 선택합니다.  
![\[Device Advisor 콘솔의 테스트 제품군 생성 단계입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/configure-ld-ts.png)

1. (선택 사항) 기본 테스트가 완료될 때까지 Device Advisor가 기다려야 하는 최대 시간을 입력합니다. **저장**을 선택합니다.  
![\[Device Advisor 콘솔의 ‘기본 테스트’에 대한 ‘시간 초과-선택 사항’ 상자입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/timeout-ld-ts.png)

1.  **Advanced tests**(고급 테스트) 및 **Additional settings**(추가 설정) 섹션에서 다음을 수행합니다.

   1. 이 테스트의 일부로 실행할 **고급 테스트**를 선택하거나 선택 취소합니다.

   1. 해당하는 경우 테스트에 대한 구성을 **편집**합니다.

   1. **Additional settngs**(추가 설정) 섹션에서 **Additional execution time**(추가 실행 시간)을 구성합니다.

   1. **Next**(다음)를 선택하여 다음 단계로 진행합니다.  
![\[IoT 디바이스에서 테스트를 구성하고 실행할 수 있는 Device Advisor 인터페이스입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/additional-ld-ts.png)

1.  이 단계에서는 **새 역할을 생성**하거나 **기존 역할을 선택**합니다. 세부 정보는 [디바이스 역할로 사용할 IAM 역할 생성](device-advisor-setting-up.md#da-iam-role)을 참조하세요.  
![\[새 역할을 생성하거나 테스트 중인 디바이스에 대한 기존 역할을 선택할 수 있는 디바이스 역할 단계입니다. 이 역할은 Device Advisor가 테스트 디바이스를 대신하여 연결, 게시 및 구독과 같은 MQTT 작업을 수행할 수 있는 권한을 부여합니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/devicerole-ld-ts.png)

1.  이 단계까지 생성된 모든 구성을 검토하고 **Create test suite**(테스트 제품군 생성)를 선택합니다.  
![\[Device Advisor 구성의 모든 세부 정보를 검토할 수 있는 ‘검토’ 페이지입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/finalconfigure1-ld-ts.png)  
![\[Device Advisor에 대한 모든 세부 정보를 볼 수 있는 구성 페이지입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/finalconfigure2-ld-ts.png)

1.  생성된 테스트 제품군이 **Test suites**(테스트 제품군) 섹션 아래에 표시됩니다. 세부 정보를 보려면 제품군을 선택합니다.  
![\[‘장기 데모’라는 새 테스트 제품군이 Device Advisor에서 성공적으로 생성되었습니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/finalts-ld-ts.png)

1.  생성된 테스트 제품군을 실행하려면 **Actions**(작업), **Run test suite**(테스트 제품군 실행)를 차례로 선택합니다.  
![\[Device Advisor 인터페이스에서 ‘장기 데모’라는 새 테스트 제품군의 작업 드롭다운 메뉴입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/runts-ld-ts.png)

1.  **Run configuration**(구성 실행) 페이지에서 구성 옵션을 선택합니다.

   1. 테스트를 실행할 **사물** 또는 **인증서**를 선택합니다.

   1. **Account-level endpoint**(계정 수준 엔드포인트) 또는 **Device-level endpoint**(디바이스 수준 엔드포인트)를 선택합니다.

   1. **Run test**(테스트 실행)를 선택하여 테스트를 실행합니다.  
![\[Device Advisor 인터페이스의 구성 실행 페이지입니다. 페이지에는 테스트 디바이스, 사물, 테스트 엔드포인트 및 태그 선택이 표시됩니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/runconfiguration-ld-ts.png)

1.  테스트 제품군의 실행 결과를 보려면 왼쪽 탐색 창에서 **Test runs and results**(테스트 실행 및 결과)를 선택합니다. 결과의 세부 정보를 보려면 실행한 테스트 제품군을 선택합니다.  
![\[테스트 실행 및 결과 페이지의 ‘장기 데모’ 테스트 케이스입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/results-ld-ts.png)

1.  앞의 단계를 수행하면 테스트 요약 페이지가 나타납니다. 테스트 실행의 모든 세부 정보가 이 페이지에 표시됩니다. 콘솔에 디바이스 연결을 시작하라는 메시지가 표시되면 제공된 엔드포인트에 디바이스를 연결합니다. 이 페이지에서 테스트 진행 상황을 확인할 수 있습니다.  
![\[생성한 ‘장기 데모’ 테스트의 요약 페이지입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/summary-ld-ts.png)

1.  장기간 테스트에서는 사이드 패널의 추가 **Test log summary**(테스트 로그 요약)에 디바이스와 브로커 간에 발생하는 모든 중요한 이벤트가 거의 실시간으로 표시됩니다. 자세한 로그를 보려면 **테스트 케이스 로그**를 클릭합니다.  
![\[‘장기 데모’ 테스트 페이지의 테스트 로그 요약 섹션입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/log-ld-ts.png)

# Device Advisor VPC 엔드포인트(AWS PrivateLink)
<a name="device-advisor-vpc-endpoint"></a>

*인터페이스* VPC 엔드포인트를 생성하여 VPC와 AWS IoT Core Device Advisor 테스트 엔드포인트(데이터 영역) 간에 프라이빗 연결을 설정할 수 있습니다. 이 엔드포인트를 사용하여 프로덕션에 AWS IoT 디바이스를 배포하기 AWS IoT Core 전에 와의 안정적이고 안전한 연결을 위해 디바이스를 검증할 수 있습니다. Device Advisor의 미리 빌드된 테스트는 디바이스 소프트웨어가 [TLS](https://docs.aws.amazon.com/iot/latest/developerguide/protocols.html), [MQTT](https://docs.aws.amazon.com/iot/latest/developerguide/protocols.html), [디바이스 섀도우](https://docs.aws.amazon.com/iot/latest/developerguide/iot-device-shadows.html) 및 [AWS IoT 작업](https://docs.aws.amazon.com/iot/latest/developerguide/iot-jobs.html) 사용에 대한 모범 사례를 따르는지 검증하는 데 도움이 됩니다.

[AWS PrivateLink](https://aws.amazon.com/privatelink)는 IoT 디바이스에 사용되는 인터페이스 엔드포인트에 전원을 공급합니다. 이 서비스를 사용하면 인터넷 게이트웨이, NAT 디바이스, VPN 연결 또는 Direct Connect 연결 없이 AWS IoT Core Device Advisor 테스트 엔드포인트에 비공개로 액세스하는 데 도움이 됩니다. TCP 및 MQTT 패킷을 전송하는 VPC의 인스턴스는 AWS IoT Core Device Advisor 테스트 엔드포인트와 통신하는 데 퍼블릭 IP 주소가 필요하지 않습니다. VPC와 AWS IoT Core Device Advisor 간의 트래픽은 나가지 않습니다 AWS 클라우드. IoT 디바이스와 Device Advisor 테스트 케이스 간의 모든 TLS 및 MQTT 통신은 AWS 계정의 리소스 내에서 유지됩니다.

각 인터페이스 엔드포인트는 서브넷에서 하나 이상의 [탄력적 네트워크 인터페이스](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html)로 표현됩니다.

VPC 엔드포인트 인터페이스 사용에 대한 자세한 내용은 *Amazon VPC 사용 설명서*의 [인터페이스 VPC 엔드포인트(AWS PrivateLink)](https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html)를 참조하세요.

## AWS IoT Core Device Advisor VPC 엔드포인트에 대한 고려 사항
<a name="vpc-considerations"></a>

인터페이스 VPC 엔드포인트를 설정하기 전에 [Amazon VPC 사용 설명서](https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html#vpce-interface-limitations)의 *인터페이스 엔드포인트 속성 및 제한 사항*을 검토하세요. 계속하기 전에 다음 사항을 고려하세요.
+ AWS IoT Core Device Advisor 는 현재 VPC에서 Device Advisor 테스트 엔드포인트(데이터 영역)에 대한 호출을 지원합니다. 메시지 브로커는 데이터 영역 통신을 사용하여 데이터를 전송하고 수신합니다. 이 작업은 TLS 및 MQTT 패킷을 사용하여 수행됩니다. AWS IoT 디바이스를 Device Advisor 테스트 엔드포인트에 AWS IoT Core Device Advisor 연결하기 위한 VPC 엔드포인트입니다. [컨트롤 플레인 API 작업](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iotdeviceadvisor/index.html)은 이 VPC 엔드포인트에서 사용되지 않습니다. 테스트 제품군 또는 기타 컨트롤 플레인 API를 만들거나 실행하려면 퍼블릭 인터넷을 통해 콘솔, AWS SDK 또는 AWS 명령줄 인터페이스를 사용하세요.
+ 다음은에 대한 VPC 엔드포인트를 AWS 리전 지원합니다 AWS IoT Core Device Advisor.
  + 미국 동부(버지니아 북부)
  + 미국 서부(오레곤)
  + 아시아 태평양(도쿄)
  + 유럽(아일랜드)
+  Device Advisor는 X.509 클라이언트 인증서 및 RSA 서버 인증서와 함께 MQT를 지원합니다.
+ 현재 [VPC 엔드포인트 정책](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-access.html)은 지원하지 않습니다.
+ VPC 엔드포인트를 연결하는 [리소스를 생성](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html#create-interface-endpoint-aws)하는 방법에 대한 지침은 VPC 엔드포인트 [사전 조건](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html#prerequisites-interface-endpoints)을 확인하세요. VPC 엔드포인트를 사용하려면 AWS IoT Core Device Advisor VPC 및 프라이빗 서브넷을 생성해야 합니다.
+  AWS PrivateLink 리소스에는 할당량이 있습니다. 자세한 내용은 [AWS PrivateLink 할당량](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-limits-endpoints.html)을 참조하세요.
+ VPC 엔드포인트는 IPv4 트래픽만 지원합니다.

## 에 대한 인터페이스 VPC 엔드포인트 생성 AWS IoT Core Device Advisor
<a name="vpc-interface"></a>

VPC 엔드포인트를 시작하려면 [인터페이스 VPC 엔드포인트](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html)를 생성합니다. 그런 다음를 AWS IoT Core Device Advisor 로 선택합니다 AWS 서비스. 를 사용하는 경우 [describe-vpc-endpoint-services](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-vpc-endpoint-services.html)를 AWS CLI호출하여의 가용 영역에 AWS IoT Core Device Advisor 가 있는지 확인합니다 AWS 리전. 엔드포인트에 연결된 보안 그룹이 MQTT 및 TLS 트래픽에 대한 [TCP 프로토콜 통신](https://docs.aws.amazon.com/iot/latest/developerguide/protocols.html)을 허용하는지 확인합니다. 예를 들어, 미국 동부(버지니아 북부) 리전에서는 다음 명령을 사용합니다.

```
aws ec2 describe-vpc-endpoint-services --service-name com.amazonaws.us-east-1.deviceadvisor.iot
```

다음 서비스 이름을 AWS IoT Core 사용하여 용 VPC 엔드포인트를 생성할 수 있습니다.
+ com.amazonaws.*region*.deviceadvisor.iot

기본적으로 엔드포인트에 대해 프라이빗 DNS가 켜져 있습니다. 이렇게 하면 기본 테스트 엔드포인트를 프라이빗 서브넷 내에서 계속 사용할 수 있습니다. 계정 또는 디바이스 수준 엔드포인트를 가져오려면 콘솔 AWS CLI 또는 AWS SDK를 사용합니다. 예를 들어 퍼블릭 서브넷이나 퍼블릭 인터넷에서 [get-endpoint](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iotdeviceadvisor/get-endpoint.html)를 실행하는 경우 엔드포인트를 가져와서 Device Advisor에 연결하는 데 사용할 수 있습니다. 자세한 내용은 *Amazon VPC 사용 설명서*의 [인터페이스 엔드포인트를 통해 서비스 액세스](https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html#access-service-though-endpoint)를 참조하세요.

MQTT 클라이언트를 VPC 엔드포인트 인터페이스에 연결하기 위해 AWS PrivateLink 서비스는 VPC에 연결된 프라이빗 호스팅 영역에 DNS 레코드를 생성합니다. 이러한 DNS 레코드는 AWS IoT 디바이스의 요청을 VPC 엔드포인트로 전달합니다.

## VPC 엔드포인트를 AWS IoT Core Device Advisor 통해에 대한 액세스 제어
<a name="vpc-controlling-access"></a>

VPC [조건 컨텍스트 키를](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html) 사용하여에 대한 디바이스 액세스를 제한 AWS IoT Core Device Advisor 하고 VPC 엔드포인트를 통해서만 액세스를 허용할 수 있습니다.는 다음 VPC 관련 컨텍스트 키를 AWS IoT Core 지원합니다.
+  [SourceVpc](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcevpc) 
+  [SourceVpce](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcevpce) 
+  [VPCSourcelp](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-vpcsourceip) 

**참고**  
 AWS IoT Core Device Advisor 는 현재 [ VPC 엔드포인트 정책을](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-access.html#vpc-endpoint-policies) 지원하지 않습니다.

다음 정책은 사물 이름과 일치하는 클라이언트 ID를 AWS IoT Core Device Advisor 사용하여에 연결할 수 있는 권한을 부여합니다. 또한 사물 이름 접두사가 붙은 모든 주제에 게시됩니다. 정책은 특정 VPC 엔드포인트 ID를 사용하여 VPC 엔드포인트에 연결하는 디바이스를 조건으로 합니다. 이 정책은 퍼블릭 AWS IoT Core Device Advisor 테스트 엔드포인트에 대한 연결 시도를 거부합니다.

****  

```
{
"Version":"2012-10-17",		 	 	 
    "Statement": [
        {
"Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
            ],
            "Condition": {
"StringEquals": {
"aws:SourceVpce": "vpce-1a2b3c4d"
            }
        }
            
        },
        {
"Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/${iot:Connection.Thing.ThingName}/*"
            ]
        }
    ]
}
```

# Device Advisor 테스트 케이스
<a name="device-advisor-tests"></a>

Device Advisor는 6가지 범주로 미리 빌드된 테스트를 제공합니다.
+ [TLS](device-advisor-tests-tls.md)
+ [MQTT](device-advisor-tests-mqtt.md)
+ [섀도우](device-advisor-tests-shadow.md)
+ [작업 실행](device-advisor-tests-job-execution.md)
+ [권한 및 정책](device-advisor-tests-permissions-policies.md)
+ [장기간 테스트](device-advisor-tests-long-duration.md)

## Device Advisor 테스트 사례는 AWS Device Qualification Program에 적합합니다.
<a name="qualifiying-test-cases"></a>

[AWS 디바이스 자격 프로그램](https://aws.amazon.com/partners/programs/dqp/)에 따라 자격을 얻으려면 디바이스가 다음 테스트를 통과해야 합니다.

**참고**  
다음은 자격 테스트의 수정된 목록입니다.
+ [TLS 연결](device-advisor-tests-tls.md#TLS_Connect)(“TLS 연결”)
+ [TLS 잘못된 주체 이름 서버 인증서](device-advisor-tests-tls.md#TLS_Incorrect_Subject_Name)(“잘못된 주체 일반 이름(CN)/주체 대체 이름(SAN)”)
+ [TLS 비보안 서버 인증서](device-advisor-tests-tls.md#TLS_Unsecure_Server_Cert)(“공인 CA가 서명하지 않음”)
+ [AWS IoT 암호화 제품군에 대한 TLS 디바이스 지원](device-advisor-tests-tls.md#TLS_DeviceSupport_For_IOT)(" AWS IoT 권장 암호화 제품군에 대한 TLS 디바이스 지원")
+ [TLS 최대 크기 조각 수신](device-advisor-tests-tls.md#TLS_MaximumSize)('TLS 수신 최대 크기 조각')
+ [TLS 만료된 서버 인증서](device-advisor-tests-tls.md#TLS_Expired_Server_Cert)('만료된 서버 인증서')
+ [TLS 대형 서버 인증서](device-advisor-tests-tls.md#TLS_LargeServerCert)('TLS 대형 서버 인증서')
+ [MQTT Connect](device-advisor-tests-mqtt.md#MQTT_Connect)("Device send CONNECT to AWS IoT Core (Happy case)")
+ [MQTT 구독](device-advisor-tests-mqtt.md#MQTT_Subscribe)(“구독 가능(해피 케이스)”)
+ [MQTT 게시](device-advisor-tests-mqtt.md#MQTT_Publish)(“QoS0(해피 케이스)”)
+ [MQTT 연결 지터 재시도](device-advisor-tests-mqtt.md#MQTT_ConnectJitterBackoff)('지터 백오프를 사용하는 디바이스 연결 재시도 - CONNACK 응답 없음')

# TLS
<a name="device-advisor-tests-tls"></a>

이러한 테스트를 사용하여 디바이스와 간의 전송 계층 보안 프로토콜(TLS) AWS IoT 이 안전한지 확인합니다.

**참고**  
이제 Device Advisor에서 TLS 1.3을 지원합니다.

## 해피 패스
<a name="happy-path"></a>

**TLS 연결**  <a name="TLS_Connect"></a>
테스트 중인 디바이스가 TLS 핸드셰이크를 완료할 수 있는지 확인합니다 AWS IoT. 이 테스트는 클라이언트 디바이스의 MQTT 구현의 유효성을 검사하지 않습니다.  

**Example API 테스트 케이스 정의:**  
`EXECUTION_TIMEOUT`의 기본값은 5분입니다. 최상의 결과를 얻으려면 시간 제한 값을 2분으로 설정하는 것이 좋습니다.

```
"tests":[
   {
      "name":"my_tls_connect_test",
      "configuration": {
         // optional:
         "EXECUTION_TIMEOUT":"300",  //in seconds
      },
      "test":{
         "id":"TLS_Connect",
         "version":"0.0.0"
      }
   }
]
```

**Example 테스트 케이스 출력:**  
+ **통과** - 테스트 중인 디바이스가 TLS 핸드셰이크를 완료했습니다 AWS IoT.
+ **경고와 함께 전달 **- 테스트 중인 디바이스가 TLS 핸드셰이크를 완료 AWS IoT했지만 디바이스 또는의 TLS 경고 메시지가 있었습니다 AWS IoT.
+ **실패** - 핸드셰이크 오류 AWS IoT 로 인해 테스트 중인 디바이스가에서 TLS 핸드셰이크를 완료하지 못했습니다.

**TLS 최대 크기 조각 수신**  <a name="TLS_MaximumSize"></a>
이 테스트 케이스는 디바이스가 TLS 최대 크기 조각을 수신하고 처리할 수 있다는 것을 검증하는 데 도움이 됩니다. 대규모 페이로드를 수신하려면 테스트 디바이스가 QoS 1로 미리 구성된 주제를 구독해야 합니다. `${payload}` 구성을 사용하여 페이로드를 사용자 정의할 수 있습니다.  

**Example API 테스트 케이스 정의:**  
`EXECUTION_TIMEOUT`의 기본값은 5분입니다. 최상의 결과를 얻으려면 시간 제한 값을 2분으로 설정하는 것이 좋습니다.

```
"tests":[
   {
      "name":"TLS Receive Maximum Size Fragments",
      "configuration": {
         // optional:
         "EXECUTION_TIMEOUT":"300",  //in seconds
         "PAYLOAD_FORMAT":"{"message":"${payload}"}", // A string with a placeholder ${payload}, or leave it empty to receive a plain string.
         "TRIGGER_TOPIC": "test_1" // A topic to which a device will subscribe, and to which a test case will publish a large payload.
      },
      "test":{
         "id":"TLS_Receive_Maximum_Size_Fragments",
         "version":"0.0.0"
      }
   }
]
```

## 암호 그룹
<a name="cipher-suites"></a>

** AWS IoT 권장 암호 제품군에 대한 TLS 디바이스 지원**  <a name="TLS_DeviceSupport_For_IOT"></a>
테스트 중인 디바이스의 TLS 클라이언트 Hello 메시지에 있는 암호 제품군에 권장 [AWS IoT 암호 제품군](transport-security.md)이 포함되어 있다는 것을 검증합니다. 디바이스에서 지원하는 암호 제품군에 대한 다른 인사이트를 제공합니다.  

**Example API 테스트 케이스 정의:**  
`EXECUTION_TIMEOUT`의 기본값은 5분입니다. 제한 시간 값을 2분으로 설정하는 것을 권장합니다.

```
"tests":[
   {
      "name":"my_tls_support_aws_iot_cipher_suites_test",
      "configuration": {
         // optional:
         "EXECUTION_TIMEOUT":"300",  // in seconds
      },
      "test":{
         "id":"TLS_Support_AWS_IoT_Cipher_Suites",
         "version":"0.0.0"
      }
   }
]
```

**Example 테스트 케이스 출력:**  
+ **통과** - 테스트 중인 디바이스 암호 제품군에는 권장 AWS IoT 암호 제품군 중 하나 이상이 포함되어 있으며 지원되지 않는 암호 제품군은 포함되어 있지 않습니다.
+ **경고가 있는 통과** - 디바이스 암호 제품군에 하나 이상의 AWS IoT 암호 제품군이 포함되지만 다음과 같은 문제가 있습니다.

  1. 권장 암호 제품군이 포함되어 있지 않습니다.

  1. 여기에는에서 지원하지 않는 암호 제품군이 포함되어 있습니다 AWS IoT.

  지원되지 않는 암호 제품군이 안전한지 확인하는 것이 좋습니다.
+ **실패** - 테스트 중인 디바이스에 AWS IoT 지원되는 암호 제품군이 포함되어 있지 않습니다.

## 더 큰 크기의 서버 인증서
<a name="larger-size"></a>

**TLS 대형 서버 인증서**  <a name="TLS_LargeServerCert"></a>
디바이스에서 더 큰 크기의 서버 인증서를 수신하고 처리할 때 AWS IoT 로 TLS 핸드셰이크를 완료할 수 있다는 것을 검증합니다. 이 테스트에서 사용하는 서버 인증서의 크기(바이트)는 **TLS Connect** 테스트 사례 및 IoT Core에서 현재 사용되는 크기보다 20만큼 큽니다.이 테스트 사례에서는가 TLS에 대한 디바이스의 버퍼 공간을 AWS IoT 테스트합니다. 버퍼 공간이 충분히 크면 TLS 핸드셰이크가 오류 없이 모두 적용됩니다. 이 테스트는 디바이스의 MQTT 구현을 검증하지 않습니다. TLS 핸드셰이크 프로세스가 완료된 후 테스트 케이스가 종료됩니다.  

**Example API 테스트 케이스 정의:**  
`EXECUTION_TIMEOUT`의 기본값은 5분입니다. 최상의 결과를 얻으려면 시간 제한 값을 2분으로 설정하는 것이 좋습니다. 이 테스트 케이스는 실패하지만 **TLS 연결** 테스트 케이스는 통과하는 경우 TLS에 대한 디바이스의 버퍼 공간 제한을 늘리는 것이 좋습니다. 버퍼 공간 제한을 늘리면 크기가 늘어나는 경우 디바이스가 더 큰 크기의 서버 인증서를 처리할 수 있습니다.

```
"tests":[
   {
      "name":"my_tls_large_size_server_cert_test",
      "configuration": {
         // optional:
         "EXECUTION_TIMEOUT":"300",  // in seconds
      },
      "test":{
         "id":"TLS_Large_Size_Server_Cert",
         "version":"0.0.0"
      }
   }
]
```

**Example 테스트 케이스 출력:**  
+ **통과** - 테스트 중인 디바이스가 AWS IoT와 TLS 핸드셰이크를 완료했습니다.
+ **경고와 함께 전달 **- 테스트 중인 디바이스가 TLS 핸드셰이크를 완료 AWS IoT했지만 디바이스 또는의 TLS 경고 메시지가 있습니다 AWS IoT.
+ **실패** - 핸드셰이크 프로세스 중 오류로 AWS IoT 인해 테스트 중인 디바이스가 로 TLS 핸드셰이크를 완료하지 못했습니다.

## TLS 비보안 서버 인증서
<a name="unsecure-server"></a>

**공인 CA에서 서명하지 않음**  <a name="TLS_Unsecure_Server_Cert"></a>
테스트 중인 디바이스가 ATS CA의 유효한 서명이 없는 서버 인증서를 받는 경우 연결을 종료한다는 것을 검증합니다. 디바이스는 유효한 인증서를 제공하는 엔드포인트에만 연결해야 합니다.  

**Example API 테스트 케이스 정의:**  
`EXECUTION_TIMEOUT`의 기본값은 5분입니다. 제한 시간 값을 2분으로 설정하는 것을 권장합니다.

```
"tests":[
   {
      "name":"my_tls_unsecure_server_cert_test",
      "configuration": {
         // optional:
         "EXECUTION_TIMEOUT":"300",  //in seconds
      },
      "test":{
         "id":"TLS_Unsecure_Server_Cert",
         "version":"0.0.0"
      }
   }
]
```

**Example 테스트 케이스 출력:**  
+ **통과** - 테스트 중인 디바이스가 연결을 종료했습니다.
+ **실패** - 테스트 중인 디바이스가 TLS 핸드셰이크를 완료했습니다 AWS IoT.

**TLS 잘못된 주체 이름 서버 인증서/잘못된 주체 일반 이름(CN)/주체 대체 이름(SAN)**  <a name="TLS_Incorrect_Subject_Name"></a>
테스트 중인 디바이스가 요청한 도메인 이름과 다른 도메인 이름에 대한 서버 인증서를 제공하는 경우 연결을 종료하는지 확인합니다.  

**Example API 테스트 케이스 정의:**  
`EXECUTION_TIMEOUT`의 기본값은 5분입니다. 제한 시간 값을 2분으로 설정하는 것을 권장합니다.

```
"tests":[
   {
      "name":"my_tls_incorrect_subject_name_cert_test",
      "configuration": {
         // optional:
         "EXECUTION_TIMEOUT":"300",   // in seconds
      },
      "test":{
         "id":"TLS_Incorrect_Subject_Name_Server_Cert",
         "version":"0.0.0"
      }
   }
]
```

**Example 테스트 케이스 출력:**  
+ **통과** - 테스트 중인 디바이스가 연결을 종료했습니다.
+ **실패** - 테스트 중인 디바이스가 TLS 핸드셰이크를 완료했습니다 AWS IoT.

## TLS 만료된 서버 인증서
<a name="expired-server"></a>

**만료된 서버 인증서**  <a name="TLS_Expired_Server_Cert"></a>
만료된 서버 인증서가 제공되는 경우 테스트 중인 디바이스가 연결을 종료하는지 확인합니다.  

**Example API 테스트 케이스 정의:**  
`EXECUTION_TIMEOUT`의 기본값은 5분입니다. 제한 시간 값을 2분으로 설정하는 것을 권장합니다.

```
"tests":[
   {
      "name":"my_tls_expired_cert_test",
      "configuration": {
         // optional:
         "EXECUTION_TIMEOUT":"300",  //in seconds
      },
      "test":{
         "id":"TLS_Expired_Server_Cert",
         "version":"0.0.0"
      }
   }
]
```

**Example 테스트 케이스 출력:**  
+ **통과** - 테스트 중인 디바이스가 TLS 핸드셰이크 완료를 거부합니다 AWS IoT. 디바이스는 연결을 끊기 전에 TLS 알림 메시지를 보냅니다.
+ **경고가 있는 통과** - 테스트 중인 디바이스가 AWS IoT와 TLS 핸드셰이크를 완료하기를 거부합니다. 하지만 연결을 끊기 전에 TLS 알림 메시지를 보내지 않습니다.
+ **실패** - 테스트 중인 디바이스가 TLS 핸드셰이크를 완료합니다 AWS IoT.

# MQTT
<a name="device-advisor-tests-mqtt"></a>

## 연결, 연결 끊기, 다시 연결
<a name="connect"></a>

**"디바이스 전송 CONNECT 대상 AWS IoT Core (해피 케이스)"**  <a name="MQTT_Connect"></a>
테스트 중인 디바이스가 CONNECT 요청을 전송하는지 확인합니다.  
*API 테스트 케이스 정의:*  
`EXECUTION_TIMEOUT`의 기본값은 5분입니다. 제한 시간 값을 2분으로 설정하는 것을 권장합니다.

```
"tests":[
   {
      "name":"my_mqtt_connect_test",
      "configuration": {
         // optional:
         "EXECUTION_TIMEOUT":"300",   // in seconds
      },
      "test":{
         "id":"MQTT_Connect",
         "version":"0.0.0"
      }
   }
]
```

**“디바이스는 QoS1을 위한 임의의 주제로 PUBACK를 반환 할 수 있습니다.”**  
이 테스트 케이스는 디바이스(클라이언트)가 QoS1을 사용하여 주제를 구독한 후 브로커로부터 게시 메시지를 받은 경우 PUBACK 메시지를 반환할 수 있는지 확인합니다.  
페이로드 콘텐츠 및 페이로드 크기는 이 테스트 케이스에 대해 구성할 수 있습니다. 페이로드 크기가 구성된 경우 Device Advisor는 페이로드 콘텐츠 값을 덮어쓰고 미리 정의된 페이로드를 원하는 크기로 디바이스에 보냅니다. 페이로드 크기는 0에서 128 사이의 값이며 128KB를 초과할 수 없습니다. AWS IoT Core 는 [AWS IoT Core 메시지 브로커 및 프로토콜 제한 및 할당량](https://docs.aws.amazon.com/general/latest/gr/iot-core.html#message-broker-limits) 페이지에 표시된 대로 128KB보다 큰 게시 및 연결 요청을 거부합니다.  
*API 테스트 케이스 정의:*  
`EXECUTION_TIMEOUT`의 기본값은 5분입니다. 제한 시간 값은 2분을 권장합니다. `PAYLOAD_SIZE`는 0에서 128KB 사이의 값으로 구성할 수 있습니다. Device Advisor는 지정된 크기의 사전 정의된 페이로드를 디바이스에 다시 전송하므로 페이로드 크기를 정의하면 페이로드 콘텐츠가 무시됩니다.

```
"tests":[                            
{
        "name":"my_mqtt_client_puback_qos1",
        "configuration": {
            // optional:"TRIGGER_TOPIC": "myTopic",
            "EXECUTION_TIMEOUT":"300", // in seconds
            "PAYLOAD_FOR_PUBLISH_VALIDATION":"custom payload",
            "PAYLOAD_SIZE":"100" // in kilobytes
        },
        "test": {
            "id": "MQTT_Client_Puback_QoS1",
            "version": "0.0.0"
        }
    }
]
```

**“지터 백오프로 디바이스 연결 재시도 - CONNACK 응답 없음”**  <a name="MQTT_ConnectJitterBackoff"></a>
테스트 중인 디바이스가 브로커와 5회 이상 다시 연결할 때 적절한 지터 백오프를 사용하는지 확인합니다. 브로커는 테스트의 CONNNECT 요청에 따라 디바이스의 타임스탬프를 기록하고, 패킷 유효성 검사를 수행하고, 테스트 중인 디바이스에 CONNACK를 보내지 않고 일시 중지하고, 테스트 중인 디바이스가 요청을 다시 보낼 때까지 기다립니다. 여섯 번째 연결 시도는 통과할 수 있으며 CONNACK는 테스트 중인 디바이스로 다시 흐를 수 있습니다.  
위의 프로세스가 다시 수행됩니다. 전체적으로 이 테스트 케이스는 디바이스가 총 12번 이상 연결되어야 합니다. 수집된 타임스탬프는 테스트 중인 디바이스에서 지터 백오프가 사용되는지 확인하는 데 사용됩니다. 테스트 중인 디바이스에 엄격하게 지수 백오프 지연이 있는 경우 이 테스트 케이스가 경고와 함께 통과됩니다.  
이 테스트 케이스를 통과하려면 테스트 중인 디바이스에서 [지수 백오프 및 지터](https://aws.amazon.com/blogs//architecture/exponential-backoff-and-jitter/) 메커니즘을 구현하는 것이 좋습니다.  
*API 테스트 케이스 정의:*  
`EXECUTION_TIMEOUT`의 기본값은 5분입니다. 시간 초과 값을 4분으로 설정하는 것이 좋습니다.

```
"tests":[
   {
      "name":"my_mqtt_jitter_backoff_retries_test",
      "configuration": {
         // optional:
         "EXECUTION_TIMEOUT":"300",    // in seconds
      },
      "test":{
         "id":"MQTT_Connect_Jitter_Backoff_Retries",
         "version":"0.0.0"
      }
   }
]
```

**“지수 백오프로 디바이스 연결 재시도 - CONNACK 응답 없음”**  
테스트 중인 디바이스가 브로커와 5회 이상 다시 연결할 때 적절한 지수 백오프를 사용하는지 확인합니다. 브로커는 테스트의 CONNNECT 요청에 따라 디바이스의 타임스탬프를 기록하고, 패킷 유효성 검사를 수행하고, 클라이언트 디바이스에 CONNACK를 보내지 않고 일시 중지하고, 테스트 중인 디바이스가 요청을 다시 보낼 때까지 기다립니다. 수집된 타임스탬프는 테스트 중인 디바이스에서 지수 백오프가 사용되는지 확인하는 데 사용됩니다.  
이 테스트 케이스를 통과하려면 테스트 중인 디바이스에서 [지수 백오프 및 지터](https://aws.amazon.com/blogs//architecture/exponential-backoff-and-jitter/) 메커니즘을 구현하는 것이 좋습니다.  
*API 테스트 케이스 정의:*  
`EXECUTION_TIMEOUT`의 기본값은 5분입니다. 시간 초과 값을 4분으로 설정하는 것이 좋습니다.

```
"tests":[
   {
      "name":"my_mqtt_exponential_backoff_retries_test",
      "configuration": {
         // optional:
         "EXECUTION_TIMEOUT":"600",  // in seconds
      },
      "test":{
         "id":"MQTT_Connect_Exponential_Backoff_Retries",
         "version":"0.0.0"
      }
   }
]
```

**“지터 백오프로 디바이스 재연결 - 서버 연결 해제 후”**  
테스트 중인 디바이스가 서버에서 연결 해제된 후 다시 연결하는 동안 필요한 지터 및 백오프를 사용하는지 검증합니다. Device Advisor는 최소 5회 동안 서버에서 디바이스 연결을 해제하고 MQTT 재연결을 위한 디바이스 동작을 관찰합니다. Device Advisor는 테스트 중인 디바이스에 대한 CONNECT 요청의 타임스탬프를 기록하고, 패킷 유효성 검사를 수행하고, 클라이언트 디바이스에 CONNACK를 보내지 않고 일시 중지하고, 테스트 중인 디바이스가 요청을 다시 보낼 때까지 기다립니다. 수집된 타임스탬프는 테스트 중인 디바이스가 다시 연결하는 동안 지터와 백오프가 사용되는지 확인하는 데 사용됩니다. 테스트 중인 디바이스에 엄격한 지수 백오프가 있거나 적절한 지터 백오프 메커니즘을 구현하지 않는 경우 이 테스트 케이스는 경고와 함께 통과합니다. 테스트 중인 디바이스가 선형 백오프 또는 상수 백오프 메커니즘을 구현한 경우 테스트가 실패합니다.  
이 테스트 케이스를 통과하려면 테스트 중인 장치에서 [지수 백오프 및 지터](https://aws.amazon.com/blogs//architecture/exponential-backoff-and-jitter/) 메커니즘을 구현하는 것이 좋습니다.  
*API 테스트 케이스 정의:*  
`EXECUTION_TIMEOUT`의 기본값은 5분입니다. 시간 초과 값을 4분으로 설정하는 것이 좋습니다.  
백오프에 대한 검증을 위한 재연결 시도 횟수는 `RECONNECTION_ATTEMPTS`를 지정하여 변경할 수 있습니다. 번호는 5\$110 사이여야 합니다. 기본값은 5입니다.

```
"tests":[
   {
      "name":"my_mqtt_reconnect_backoff_retries_on_server_disconnect",
      "configuration":{
         // optional:
         "EXECUTION_TIMEOUT":"300",  // in seconds
         "RECONNECTION_ATTEMPTS": 5
      },
      "test":{
         "id":"MQTT_Reconnect_Backoff_Retries_On_Server_Disconnect",
         "version":"0.0.0"
      }
   }
]
```

**"지터 백오프로 디바이스 재연결 - 연결 상태가 불안정한 경우"**  
테스트 중인 디바이스가 불안정한 연결에서 다시 연결하는 동안 필요한 지터 및 백오프를 사용하는지 확인합니다. Device Advisor는 5번의 성공적인 연결 후 서버에서 디바이스의 연결을 끊고 MQTT 재연결에 대한 디바이스의 동작을 관찰합니다. Device Advisor는 테스트 중인 디바이스에 대한 CONNECT 요청의 타임스탬프를 기록하고, 패킷 유효성 검사를 수행하고, CONNACK를 다시 보내고, 연결을 끊고, 연결 해제의 타임스탬프를 기록하고, 테스트 중인 디바이스가 요청을 다시 보낼 때까지 기다립니다. 수집된 타임스탬프는 성공적이지만 불안정한 연결 후 다시 연결하는 동안 테스트 중인 디바이스가 지터와 백오프를 사용하는지 확인하는 데 사용됩니다. 테스트 중인 디바이스에 엄격한 지수 백오프가 있거나 적절한 지터 백오프 메커니즘을 구현하지 않는 경우 이 테스트 케이스는 경고와 함께 통과합니다. 테스트 중인 디바이스가 선형 백오프 또는 상수 백오프 메커니즘을 구현한 경우 테스트가 실패합니다.  
이 테스트 케이스를 통과하려면 테스트 중인 장치에서 [지수 백오프 및 지터](https://aws.amazon.com/blogs//architecture/exponential-backoff-and-jitter/) 메커니즘을 구현하는 것이 좋습니다.  
*API 테스트 케이스 정의:*  
`EXECUTION_TIMEOUT`의 기본값은 5분입니다. 시간 초과 값을 4분으로 설정하는 것이 좋습니다.  
백오프에 대한 검증을 위한 재연결 시도 횟수는 `RECONNECTION_ATTEMPTS`를 지정하여 변경할 수 있습니다. 번호는 5\$110 사이여야 합니다. 기본값은 5입니다.

```
"tests":[
   {
      "name":"my_mqtt_reconnect_backoff_retries_on_unstable_connection",
      "configuration":{
         // optional:
         "EXECUTION_TIMEOUT":"300",  // in seconds
         "RECONNECTION_ATTEMPTS": 5
      },
      "test":{
         "id":"MQTT_Reconnect_Backoff_Retries_On_Unstable_Connection",
         "version":"0.0.0"
      }
   }
]
```

## 게시
<a name="publish"></a>

**“QoS0(해피 케이스)”**  <a name="MQTT_Publish"></a>
테스트 중인 디바이스가 QoS0 또는 QoS1이 포함된 메시지를 게시하는지 확인합니다. 테스트 설정에서 이 주제 값 및 페이로드를 지정하여 메시지 주제 및 페이로드의 유효성을 검사할 수도 있습니다.  
`EXECUTION_TIMEOUT`의 기본값은 5분입니다. 제한 시간 값을 2분으로 설정하는 것을 권장합니다.

```
"tests":[
   {
      "name":"my_mqtt_publish_test",
      "configuration":{
         // optional:
         "EXECUTION_TIMEOUT":"300",  // in seconds
         "TOPIC_FOR_PUBLISH_VALIDATION": "my_TOPIC_FOR_PUBLISH_VALIDATION",
         "PAYLOAD_FOR_PUBLISH_VALIDATION": "my_PAYLOAD_FOR_PUBLISH_VALIDATION",
      },
      "test":{
         "id":"MQTT_Publish",
         "version":"0.0.0"
      }
   }
]
```

**“QoS1 게시 재시도 - PUBACK 없음”**  
브로커가 PUBACK을 보내지 않는 경우 테스트 중인 디바이스가 QoS1과 함께 전송된 메시지를 다시 게시하는지 확인합니다. 테스트 설정에서 이 주제를 지정하여 메시지 주제의 유효성을 검사할 수도 있습니다. 메시지를 다시 게시하기 전에 클라이언트 디바이스의 연결을 끊으면 안 됩니다. 또한 이 테스트는 다시 게시된 메시지의 패킷 식별자가 원본과 같은지 확인합니다. 테스트 실행 중에 디바이스의 연결이 끊겼다가 다시 연결되면 테스트 케이스가 오류 없이 재설정되며 디바이스에서 테스트 케이스 단계를 다시 수행해야 합니다.  
*API 테스트 케이스 정의:*  
`EXECUTION_TIMEOUT`의 기본값은 5분입니다. 적어도 4분이 권장됩니다.

```
"tests":[
   {
      "name":"my_mqtt_publish_retry_test",
      "configuration":{
         // optional:
         "EXECUTION_TIMEOUT":"300",  // in seconds
         "TOPIC_FOR_PUBLISH_VALIDATION": "my_TOPIC_FOR_PUBLISH_VALIDATION",
         "PAYLOAD_FOR_PUBLISH_VALIDATION": "my_PAYLOAD_FOR_PUBLISH_VALIDATION",
      },
      "test":{
         "id":"MQTT_Publish_Retry_No_Puback",
         "version":"0.0.0"
      }
   }
]
```

**'보관된 메시지 게시'**  
테스트 중인 디바이스가 `retainFlag`가 true로 설정된 메시지를 게시하는지 확인합니다. 테스트 설정에서 이 주제 값 및 페이로드를 지정하여 메시지 주제 및 페이로드의 유효성을 검사할 수 있습니다. PUBLISH 패킷 내에서 전송된 `retainFlag`가 true로 설정되지 않은 경우 테스트 케이스가 실패합니다.  
*API 테스트 케이스 정의:*  
`EXECUTION_TIMEOUT`의 기본값은 5분입니다. 제한 시간 값을 2분으로 설정하는 것을 권장합니다. 이 테스트 케이스를 실행하려면 [디바이스 역할](https://docs.aws.amazon.com/iot/latest/developerguide/device-advisor-setting-up.html#da-iam-role)에 `iot:RetainPublish` 작업을 추가합니다.

```
"tests":[
   {
      "name":"my_mqtt_publish_retained_messages_test",
      "configuration":{
         // optional:
         "EXECUTION_TIMEOUT":"300",  // in seconds
         "TOPIC_FOR_PUBLISH_RETAINED_VALIDATION": "my_TOPIC_FOR_PUBLISH_RETAINED_VALIDATION",
         "PAYLOAD_FOR_PUBLISH_RETAINED_VALIDATION": "my_PAYLOAD_FOR_PUBLISH_RETAINED_VALIDATION",
      },
      "test":{
         "id":"MQTT_Publish_Retained_Messages",
         "version":"0.0.0"
      }
   }
]
```

**'사용자 속성을 포함한 게시'**  
테스트 중인 디바이스가 올바른 사용자 속성이 포함된 메시지를 게시하는지 확인합니다. 테스트 설정에서 이름-값 페어를 설정하여 사용자 속성의 유효성을 검사할 수 있습니다. 사용자 속성이 제공되지 않거나 일치하지 않는 경우 테스트 케이스가 실패합니다.  
*API 테스트 케이스 정의:*  
MQTT5 전용 테스트 케이스입니다.  
`EXECUTION_TIMEOUT`의 기본값은 5분입니다. 제한 시간 값을 2분으로 설정하는 것을 권장합니다.

```
"tests":[
   {
      "name":"my_mqtt_user_property_test",
      "test":{
        "USER_PROPERTIES": [
            {"name": "name1", "value":"value1"},
            {"name": "name2", "value":"value2"}
        ],
        "EXECUTION_TIMEOUT":"300",  // in seconds
      },
      "test":{
         "id":"MQTT_Publish_User_Property",
         "version":"0.0.0"
      }
   }
]
```

## Subscribe
<a name="subscribe"></a>

**“구독 가능(해피 케이스)”**  <a name="MQTT_Subscribe"></a>
테스트 중인 디바이스가 MQTT 주제를 구독하는지 확인합니다. 테스트 설정에서 이 주제를 지정하여 테스트 중인 디바이스가 구독하는 주제의 유효성을 검사할 수도 있습니다.  
*API 테스트 케이스 정의:*  
`EXECUTION_TIMEOUT`의 기본값은 5분입니다. 제한 시간 값을 2분으로 설정하는 것을 권장합니다.

```
"tests":[
   {
      "name":"my_mqtt_subscribe_test",
      "configuration":{
         // optional:
         "EXECUTION_TIMEOUT":"300",  // in seconds
         "TOPIC_LIST_FOR_SUBSCRIPTION_VALIDATION":["my_TOPIC_FOR_PUBLISH_VALIDATION_a","my_TOPIC_FOR_PUBLISH_VALIDATION_b"]
      },
      "test":{
         "id":"MQTT_Subscribe",
         "version":"0.0.0"
      }
   }
]
```

**“구독 재시도 - SUBACK 없음”**  
테스트 중인 디바이스가 실패한 MQTT 주제를 구독을 재시도하는지 확인합니다. 그런 다음 서버는 대기하고 SUBACK를 보내지 않습니다. 클라이언트 디바이스가 구독을 다시 시도하지 않으면 테스트가 실패합니다. 클라이언트 디바이스는 동일한 패킷 ID로 실패한 구독을 다시 시도해야 합니다. 테스트 설정에서 이 주제를 지정하여 테스트 중인 디바이스가 구독하는 주제의 유효성을 검사할 수도 있습니다. 테스트 실행 중에 디바이스의 연결이 끊겼다가 다시 연결되면 테스트 케이스가 오류 없이 재설정되며 디바이스에서 테스트 케이스 단계를 다시 수행해야 합니다.  
*API 테스트 케이스 정의:*  
`EXECUTION_TIMEOUT`의 기본값은 5분입니다. 시간 초과 값을 4분으로 설정하는 것이 좋습니다.

```
"tests":[
   {
      "name":"my_mqtt_subscribe_retry_test",
      "configuration":{
         "EXECUTION_TIMEOUT":"300",  // in seconds
         // optional:
         "TOPIC_LIST_FOR_SUBSCRIPTION_VALIDATION":["myTOPIC_FOR_PUBLISH_VALIDATION_a","my_TOPIC_FOR_PUBLISH_VALIDATION_b"]
      },
      "test":{
         "id":"MQTT_Subscribe_Retry_No_Suback",
         "version":"0.0.0"
      }
   }
]
```

## Keep-Alive
<a name="keep-alive"></a>

**"Mqtt No Ack PingResp"**  
이 테스트 케이스는 테스트 중인 디바이스가 ping 응답을 받지 못했을 때 연결이 해제되었는지 확인합니다. 이 테스트 사례의 일환으로 Device Advisor는 게시, 구독 및 ping 요청을 AWS IoT Core 위해에서 전송된 응답을 차단합니다. 또한 테스트 중인 디바이스가 MQTT 연결을 해제하는지 검증합니다.  
*API 테스트 케이스 정의:*  
`EXECUTION_TIMEOUT`의 기본값은 5분입니다. 시간 제한을 `keepAliveTime` 값의 1.5배보다 크게 설정하는 것이 좋습니다.  
 이 테스트의 최대 `keepAliveTime` 시간은 230초를 초과하지 않아야 합니다.

```
"tests":[
    {
       "name":"Mqtt No Ack PingResp",
       "configuration": 
          //optional:
          "EXECUTION_TIMEOUT":"306",   // in seconds
       },
       "test":{
          "id":"MQTT_No_Ack_PingResp",
          "version":"0.0.0"
       }
    }
]
```

## 영구 세션
<a name="persistent-session"></a>

**‘영구 세션(해피 케이스)’**  
이 테스트 케이스는 영구 세션에서 연결이 끊어질 때 디바이스 동작을 검증합니다. 테스트 케이스는 디바이스가 다시 연결되고, 명시적으로 재구독하지 않은 채로 트리거 주제에 대한 구독을 다시 시작하고, 주제에 저장된 메시지를 수신하고, 영구 세션에서 예상대로 작동할 수 있는지 확인합니다. 이 테스트 사례가 통과하면 클라이언트 디바이스가 예상대로 AWS IoT Core 브로커와의 영구 세션을 유지할 수 있음을 나타냅니다. AWS IoT 영구 세션에 대한 자세한 내용은 [ MQTT 영구 세션 사용을 ](https://docs.aws.amazon.com/iot/latest/developerguide/mqtt.html#mqtt-persistent-sessions)참조하세요.  
이 테스트 케이스에서는 클라이언트 디바이스가 클린 세션 플래그가 거짓으로 설정된 AWS IoT Core 와 CONNECT된 후 트리거 주제를 구독할 것으로 예상됩니다. 구독에 성공하면 AWS IoT Core Device Advisor에서 디바이스의 연결을 해제합니다. 디바이스가 연결이 끊긴 상태인 동안 QoS 1 메시지 페이로드가 해당 주제에 저장됩니다. 그런 다음 Device Advisor는 클라이언트 디바이스가 테스트 엔드포인트에 다시 연결할 수 있도록 허용합니다. 이 시점에서 영구 세션이 있기 때문에 클라이언트 디바이스는 추가 SUBSCRIBE 패킷을 보내지 않고 주제 구독을 재개하고 브로커로부터 QoS 1 메시지를 수신할 것으로 기대됩니다. 다시 연결한 후 클라이언트 디바이스가 추가 SUBSCRIBE 패킷을 전송하여 트리거 주제를 다시 구독하거나 클라이언트가 트리거 주제에서 저장된 메시지를 수신하지 못하면 테스트 케이스가 실패합니다.  
*API 테스트 케이스 정의:*  
`EXECUTION_TIMEOUT`의 기본값은 5분입니다. 시간 초과 값을 최소한 4분으로 설정하는 것이 좋습니다. 첫 번째 연결에서 클라이언트 디바이스는 이전에 구독한 적이 없는 `TRIGGER_TOPIC`을 명시적으로 구독해야 합니다. 테스트 케이스를 통과하려면 클라이언트 디바이스가 QoS 1을 사용하여 `TRIGGER_TOPIC`을 성공적으로 구독해야 합니다. 다시 연결한 후 클라이언트 디바이스는 활성 영구 세션이 있다는 것을 이해하도록 기대됩니다. 따라서 트리거 주제가 보낸 저장된 메시지를 수락하고 해당 특정 메시지에 대해 PUBACK을 반환해야 합니다.

```
"tests":[
   {
      "name":"my_mqtt_persistent_session_happy_case",
      "configuration":{
         //required:
         "TRIGGER_TOPIC": "myTrigger/topic",
         // optional:
         // if Payload not provided, a string will be stored in the trigger topic to be sent back to the client device
         "PAYLOAD": "The message which should be received from AWS IoT Broker after re-connecting to a persistent session from the specified trigger topic.",            
         "EXECUTION_TIMEOUT":"300" // in seconds
      },
      "test":{
         "id":"MQTT_Persistent_Session_Happy_Case",
         "version":"0.0.0"
      }
   }
]
```

**“영구 세션 - 세션 만료”**  
이 테스트 케이스는 연결이 해제된 디바이스가 만료된 영구 세션에 다시 연결할 때 디바이스 동작을 검증하는 데 도움을 줍니다. 세션이 만료되면 새 SUBSCRIBE 패킷을 명시적으로 전송하여 디바이스가 이전에 구독한 주제를 다시 구독할 것으로 기대됩니다.  
첫 번째 연결 중에 영구 세션을 시작하기 위해 `CleanSession` 플래그가 false로 설정되므로 테스트 디바이스가 AWS IoT 브로커와 연결될 것으로 예상됩니다. 그러면 디바이스가 트리거 주제를 구독할 것입니다. 그런 다음 구독이 성공하고 영구 세션을 시작한 후 AWS IoT Core Device Advisor에서 디바이스의 연결을 해제합니다. 연결 해제 후 AWS IoT Core Device Advisor를 사용하면 테스트 디바이스가 테스트 엔드포인트와 다시 연결할 수 있습니다. 이 시점에서 테스트 디바이스가 다른 CONNECT 패킷을 전송할 때 AWS IoT Core Device Advisor는 영구 세션이 만료되었음을 나타내는 CONNACK 패킷을 다시 보냅니다. 테스트 디바이스는 이 패킷을 올바르게 해석해야 하며 영구 세션이 종료될 때 동일한 트리거 주제를 다시 구독할 것으로 기대됩니다. 테스트 디바이스가 주제 트리거를 다시 구독하지 않으면 테스트 케이스가 실패합니다. 테스트를 통과하려면 디바이스가 영구 세션이 끝났음을 이해하고 두 번째 연결에서 동일한 트리거 주제에 대해 새 SUBSCRIBE 패킷을 다시 보내야 합니다.  
테스트 디바이스가 이 테스트 케이스를 통과하면 디바이스가 영구 세션 만료 시 기대되는 방식으로 재연결을 처리할 수 있다는 뜻입니다.  
*API 테스트 케이스 정의:*  
`EXECUTION_TIMEOUT`의 기본값은 5분입니다. 시간 초과 값을 최소한 4분으로 설정하는 것이 좋습니다. 테스트 디바이스는 이전에 구독한 적이 없는 `TRIGGER_TOPIC`을 명시적으로 구독해야 합니다. 테스트 케이스를 통과하려면 테스트 디바이스가 `CleanSession` 플래그가 거짓으로 설정된 CONNECT 패킷을 보내야 하며 QoS 1을 사용하여 트리거 주제에 성공적으로 구독해야 합니다. 연결에 성공하면 AWS IoT Core Device Advisor가 디바이스의 연결을 해제합니다. 연결이 끊긴 후 AWS IoT Core Device Advisor는 디바이스가 다시 연결되도록 허용하고 Device Advisor가 영구 세션을 종료했을 `TRIGGER_TOPIC` 것이므로 AWS IoT Core 디바이스는 동일한를 다시 구독해야 합니다.

```
"tests":[
   {
      "name":"my_expired_persistent_session_test",
      "configuration":{
         //required:
         "TRIGGER_TOPIC": "myTrigger/topic",
         // optional:       
         "EXECUTION_TIMEOUT":"300" // in seconds
      },
      "test":{
         "id":"MQTT_Expired_Persistent_Session",
         "version":"0.0.0"
      }
   }
]
```

# 섀도우
<a name="device-advisor-tests-shadow"></a>

이러한 테스트를 사용하여 테스트 중인 디바이스가 AWS IoT 디바이스 섀도우 서비스를 올바르게 사용하는지 확인합니다. 자세한 내용은 [AWS IoT 디바이스 섀도우 서비스](iot-device-shadows.md)를 참조하세요. 이러한 테스트 케이스가 테스트 스위트에 구성된 경우 스위트 실행을 시작할 때 사물을 제공하는 것이 필요합니다.

**MQTT over WebSocket**은 현재 지원되지 않습니다.

## 게시
<a name="publish"></a>

***'디바이스가 연결 후 상태를 게시합니다(해피 케이스)'***  
디바이스가에 연결한 후 상태를 게시할 수 있는지 확인 AWS IoT Core  
*API 테스트 케이스 정의:*  
`EXECUTION_TIMEOUT`의 기본값은 5분입니다. 제한 시간 값을 2분으로 설정하는 것을 권장합니다.

```
"tests":[
   {
      "name":"my_shadow_publish_reported_state",
      "configuration": {
         // optional:
         "EXECUTION_TIMEOUT":"300", // in seconds
         "SHADOW_NAME": "SHADOW_NAME",
         "REPORTED_STATE": {
            "STATE_ATTRIBUTE": "STATE_VALUE"
         }
      },
      "test":{
         "id":"Shadow_Publish_Reported_State",
         "version":"0.0.0"
      }
   }
]
```
`REPORTED_STATE`는 연결 후 디바이스의 정확한 섀도우 상태에 대한 추가 검증을 위해 제공될 수 있습니다. 기본적으로 이 테스트 케이스는 디바이스 게시 상태의 유효성을 검사합니다.  
`SHADOW_NAME`이 제공되지 않으면 테스트 케이스는 기본적으로 명명되지 않은(클래식) 섀도우 유형의 주제 접두사에 게시된 메시지를 찾습니다. 디바이스에서 명명된 섀도우 유형을 사용하는 경우 섀도우 이름을 제공합니다. 자세한 내용은 [디바이스에서 섀도우 사용](https://docs.aws.amazon.com/iot/latest/developerguide/device-shadow-comms-device.html) 섹션을 참조하세요.

## 업데이트
<a name="update"></a>

***'디바이스가 보고된 상태를 원하는 상태로 업데이트합니다(해피 케이스)'***  
디바이스가 수신된 모든 업데이트 메시지를 읽고 디바이스의 상태를 원하는 상태 속성과 일치하도록 동기화하는지 확인합니다. 동기화 후 디바이스에서 최신 보고된 상태를 게시해야 합니다. 테스트를 실행하기 전에 디바이스에 이미 기존 섀도우가 있는 경우 테스트 케이스에 대해 구성된 원하는 상태와 기존 보고된 상태가 아직 일치하지 않는지 확인합니다. 섀도우 문서에서 **ClientToken** 필드가 `DeviceAdvisorShadowTestCaseSetup`일 것이므로 이 필드를 확인하여 Device Advisor가 보낸 섀도우 업데이트 메시지를 식별할 수 있습니다.  
*API 테스트 케이스 정의:*  
`EXECUTION_TIMEOUT`의 기본값은 5분입니다. 제한 시간 값을 2분으로 설정하는 것을 권장합니다.

```
"tests":[
   {
      "name":"my_shadow_update_reported_state",
      "configuration": {
         "DESIRED_STATE": {
            "STATE_ATTRIBUTE": "STATE_VALUE"
         },
         // optional:
         "EXECUTION_TIMEOUT":"300", // in seconds
         "SHADOW_NAME": "SHADOW_NAME"
      },
      "test":{
         "id":"Shadow_Update_Reported_State",
         "version":"0.0.0"
      }
   }
]
```
`DESIRED_STATE`에는 적어도 속성 하나와 관련 값이 있어야 합니다.  
`SHADOW_NAME`이 제공되지 않으면 테스트 케이스는 기본적으로 명명되지 않은(클래식) 섀도우 유형의 주제 접두사에 게시된 메시지를 찾습니다. 디바이스에서 명명된 섀도우 유형을 사용하는 경우 섀도우 이름을 제공합니다. 자세한 내용은 [디바이스에서 섀도우 사용](https://docs.aws.amazon.com/iot/latest/developerguide/device-shadow-comms-device.html) 섹션을 참조하세요.

# 작업 실행
<a name="device-advisor-tests-job-execution"></a>

**“디바이스가 작업 실행을 완료할 수 있습니다.”**  
 이 테스트 사례는 디바이스가 AWS IoT 작업을 사용하여 업데이트를 수신할 수 있는지 확인하고 성공적인 업데이트 상태를 게시하는 데 도움이 됩니다. AWS IoT 작업에 대한 자세한 내용은 [ 작업을 참조하세요](https://docs.aws.amazon.com//iot/latest/developerguide/iot-jobs.html).  
 이 테스트 케이스를 성공적으로 실행하려면 [디바이스 역할](https://docs.aws.amazon.com/iot/latest/developerguide/device-advisor-setting-up.html#da-iam-role)을 부여해야 하는 예약된 AWS 주제 두 개가 있습니다. 작업 활동 관련 메시지를 구독하려면 **notify** 및 **notify-next** 주제를 사용합니다. 디바이스 역할은 다음 주제에 대해 PUBLISH 작업을 허용해야 합니다.  
+ \$1aws/things/**thingName**/jobs/**jobId**/get
+ \$1aws/things/**thingName**/jobs/**jobId**/update
다음 주제에 대해 SUBSCRIBE 및 RECEIVE 작업을 허용하는 것이 좋습니다.  
+ \$1aws/things/**thingName**/jobs/get/accepted
+ \$1aws/things/**thingName**/jobs/**jobId**/get/rejected
+ \$1aws/things/**thingName**/jobs/**jobId**/update/accepted
+ \$1aws/things/**thingName**/jobs/**jobId**/update/rejected
다음 주제에 대해 SUBSCRIBE 작업을 허용하는 것이 좋습니다.  
+ \$1aws/things/**thingName**/jobs/notify-next
이러한 예약된 주제에 대한 자세한 내용은 [AWS IoT 작업](https://docs.aws.amazon.com/iot/latest/developerguide/reserved-topics.html#reserved-topics-job)의 예약된 주제를 참조하세요.  
**MQTT over WebSocket**은 현재 지원되지 않습니다.  
*API 테스트 케이스 정의:*  
`EXECUTION_TIMEOUT`의 기본값은 5분입니다. 제한 시간 값을 3분으로 설정하는 것을 권장합니다. 제공된 AWS IoT 작업 문서 또는 소스에 따라 제한 시간 값을 조정합니다(예: 작업을 실행하는 데 시간이 오래 걸리는 경우 테스트 사례에 더 긴 제한 시간 값을 정의). 테스트를 실행하려면 유효한 AWS IoT 작업 문서 또는 이미 존재하는 작업 ID가 필요합니다. AWS IoT 작업 문서는 JSON 문서 또는 S3 링크로 제공될 수 있습니다. 작업 문서가 제공된 경우 작업 ID를 제공하는 것은 선택 사항입니다. 작업 ID가 제공되면 Device Advisor는 사용자를 대신하여 AWS IoT 작업을 생성하는 동안 해당 ID를 사용합니다. 작업 문서가 제공되지 않은 경우 테스트 케이스를 실행하는 리전과 동일한 리전에 있는 기존 ID를 제공할 수 있습니다. 이 경우 Device Advisor는 테스트 사례를 실행하는 동안 해당 AWS IoT 작업을 사용합니다.

```
"tests": [
   {
      "name":"my_job_execution",
      "configuration": {
         // optional:
         // Test case will create a job task by using either JOB_DOCUMENT or JOB_DOCUMENT_SOURCE.
         // If you manage the job task on your own, leave it empty and provide the JOB_JOBID (self-managed job task).
         // JOB_DOCUMENT is a JSON formatted string
         "JOB_DOCUMENT": "{
            \"operation\":\"reboot\",
            \"files\" : {
               \"fileName\" : \"install.py\",
               \"url\" : \"${aws:iot:s3-presigned-url:https://s3.amazonaws.com/bucket-name/key}\"
            }
         }",
         // JOB_DOCUMENT_SOURCE is an S3 link to the job document. It will be used only if JOB_DOCUMENT is not provided.
         "JOB_DOCUMENT_SOURCE": "https://s3.amazonaws.com/bucket-name/key",
         // JOB_JOBID is mandatory, only if neither document nor document source is provided. (Test case needs to know the self-managed job task id).
         "JOB_JOBID": "String",
         // JOB_PRESIGN_ROLE_ARN is used for the presign Url, which will replace the placeholder in the JOB_DOCUMENT field
         "JOB_PRESIGN_ROLE_ARN": "String",
         // Presigned Url expiration time. It must be between 60 and 3600 seconds, with the default value being 3600.
         "JOB_PRESIGN_EXPIRES_IN_SEC": "Long"   
         "EXECUTION_TIMEOUT": "300", // in seconds         
      },
      "test": {
         "id": "Job_Execution",
         "version": "0.0.0"
      }
   }
]
```
작업 문서 생성 및 사용에 관한 자세한 내용은 [작업 문서](https://docs.aws.amazon.com//iot/latest/developerguide/iot-jobs.html)를 참조하세요.

# 권한 및 정책
<a name="device-advisor-tests-permissions-policies"></a>

다음 테스트를 사용하여 디바이스 인증서에 연결된 정책이 표준 모범 사례를 따르는지 확인할 수 있습니다.

**MQTT over WebSocket**은 현재 지원되지 않습니다.

**“디바이스 인증서 연결 정책에 와일드카드가 포함되어 있지 않습니다.”**  
 디바이스와 연결된 권한 정책이 모범 사례를 따르고 디바이스에 필요한 것보다 더 많은 권한을 부여하지 않는지 확인합니다.  
*API 테스트 케이스 정의:*  
`EXECUTION_TIMEOUT`의 기본값은 1분입니다. 시간 제한을 30초 이상으로 설정하는 것이 좋습니다.

```
"tests":[
   {
        "name":"my_security_device_policies",
        "configuration": {
            // optional:
            "EXECUTION_TIMEOUT":"60"    // in seconds
        },
        "test": {
            "id": "Security_Device_Policies",
            "version": "0.0.0"
        }
    }
]
```

# 장기간 테스트
<a name="device-advisor-tests-long-duration"></a>

장기간 테스트는 디바이스가 장기간 작동할 때 디바이스의 동작을 모니터링하는 새로운 테스트 제품군입니다. 디바이스의 특정 동작에 초점을 맞춘 개별 테스트를 실행하는 것과 달리, 장기간 테스트는 디바이스 수명 동안 다양한 실제 시나리오에서 디바이스의 동작을 검사합니다. Device Advisor는 최대한 효율적인 순서로 테스트를 오케스트레이션합니다. 이 테스트에서는 테스트 중인 디바이스의 성능에 대한 유용한 지표가 포함된 요약 로그를 비롯한 결과 및 로그가 생성됩니다.

## MQTT 장기간 테스트 케이스
<a name="long-duration-test-case"></a>

MQTT 장기 테스트 케이스에서 디바이스의 동작은 MQTT 연결, 구독, 게시 및 재연결과 같은 해피 케이스 시나리오에서 처음에 관찰됩니다. 그런 다음 MQTT 재연결 백오프, 긴 서버 연결 해제 및 간헐적 연결과 같은 여러 복잡한 실패 시나리오에서 디바이스가 관찰됩니다.

## MQTT 장기간 테스트 케이스 실행 흐름
<a name="long-duration-test-case-execution-flow"></a>

MQTT 장기긴 테스트 케이스 실행에는 세 단계가 있습니다.

![\[기본 테스트 실행, 고급 테스트 실행 및 추가 실행 시간을 보여주는 ‘MQTT 장기 테스트 실행’입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/mqtt-execution-flow.png)


### 기본 테스트 실행
<a name="basic-tests-execution"></a>

이 단계에서 테스트 케이스는 간단한 테스트를 병렬로 실행합니다. 테스트에서는 디바이스에 구성에서 선택된 작업이 있는지 확인합니다.

기본 테스트 세트에는 선택한 작업에 따라 다음이 포함될 수 있습니다.

#### CONNECT
<a name="basic-tests-execution-connect"></a>

이 시나리오는 디바이스가 브로커와 성공적으로 연결할 수 있는지 확인합니다.

![\[CONNECT 메시지를 보내는 디바이스와 브로커가 성공적인 반환 코드를 사용하여 CONNACK 메시지로 응답하는 기본 연결 흐름입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/basic-connect.png)


#### PUBLISH
<a name="basic-tests-execution-publish"></a>

이 시나리오는 디바이스가 브로커에 대해 성공적으로 게시하는지 확인합니다.

##### QoS 0
<a name="publish-qos0"></a>

이 테스트 케이스는 QoS 0으로 게시하는 동안 디바이스가 브로커에 `PUBLISH` 메시지를 성공적으로 전송하는지 확인합니다. 이 테스트는 디바이스에서 `PUBACK` 메시지를 수신할 때까지 기다리지 않습니다.

![\[QoS 0 수준의 PUBLISH 메시지를 보내는 디바이스가 포함된 PUBLISH QoS 0 흐름입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/Qos0.png)


##### QoS 1
<a name="publish-qos1"></a>

이 테스트 케이스에서는 디바이스가 QoS 1을 사용하여 브로커에 두 개의`PUBLISH` 메시지를 보낼 것으로 예상합니다. 첫 번째 `PUBLISH` 메시지 이후 브로커는 응답하기 전에 최대 15초 동안 기다립니다. 디바이스는 15초 이내에 동일한 패킷 식별자로 원본 `PUBLISH` 메시지를 재시도해야 합니다. 이렇게 하면 브로커가 `PUBACK` 메시지로 응답하고 테스트에서 검증합니다. 디바이스가 `PUBLISH`를 재시도하지 않으면 원본 `PUBACK`이 디바이스로 전송되고 테스트는 시스템 메시지와 더불어 **경고와 함께 통과**로 표시됩니다 테스트 실행 중에 디바이스의 연결이 끊겼다가 다시 연결되면 테스트 시나리오가 오류 없이 재설정되며 디바이스에서 테스트 시나리오 단계를 다시 수행해야 합니다.

![\[QoS 1 수준과 브로커와의 여러 상호 작용으로 PUBLISH 메시지를 보내는 디바이스가 포함된 PUBLISH QoS 1 흐름입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/Qos1.png)


#### SUBSCRIBE
<a name="basic-tests-execution-subscribe"></a>

이 시나리오는 디바이스가 브로커에 대해 성공적으로 구독하는지 확인합니다.

##### QoS 0
<a name="subscribe-qos0"></a>

이 테스트 케이스는 QoS 0으로 구독하는 동안 디바이스가 브로커에 `SUBSCRIBE` 메시지를 성공적으로 전송하는지 확인합니다. 테스트에서 디바이스가 SUBACK 메시지를 수신할 때까지 기다리지 않습니다.

![\[QoS 0 수준의 SUBSCRIBE 메시지를 보내는 디바이스와 SUBACK 메시지 및 성공 최대 QoS 0 코드로 응답하는 브로커를 포함하는 SUBSCRIBE QoS 0 흐름입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/subscribe-Qos0.png)


##### QoS 1
<a name="subscribe-qos1"></a>

이 테스트 케이스에서는 디바이스가 QoS 1을 사용하여 브로커에 두 개의`SUBSCRIBE` 메시지를 보낼 것으로 예상합니다. 첫 번째 `SUBSCRIBE` 메시지 이후 브로커는 응답하기 전에 최대 15초 동안 기다립니다. 디바이스는 15초 이내에 동일한 패킷 식별자로 원본 `SUBSCRIBE` 메시지를 재시도해야 합니다. 이렇게 하면 브로커가 `SUBACK` 메시지로 응답하고 테스트에서 검증합니다. 디바이스가 `SUBSCRIBE`를 재시도하지 않으면 원본 `SUBACK`이 디바이스로 전송되고 테스트는 시스템 메시지와 더불어 **경고와 함께 통과**로 표시됩니다 테스트 실행 중에 디바이스의 연결이 끊겼다가 다시 연결되면 테스트 시나리오가 오류 없이 재설정되며 디바이스에서 테스트 시나리오 단계를 다시 수행해야 합니다.

![\[QoS 1 수준 및 브로커와의 여러 상호 작용으로 SUBSCRIBE 메시지를 보내는 디바이스가 포함된 SUBSCRIBE QoS 1 흐름입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/subscribe-Qos1.png)


#### RECONNECT
<a name="basic-tests-execution-reconnect"></a>

이 시나리오는 성공적인 연결에서 디바이스의 연결이 끊어진 후 디바이스가 브로커와 성공적으로 다시 연결되는지 확인합니다. Device Advisor는 테스트 제품군을 실행하는 동안 이전에 디바이스를 두 번 이상 연결한 경우 디바이스의 연결을 끊지 않습니다. 대신 테스트가 **통과**로 표시됩니다.

![\[DUT와 브로커 간의 RECONNECT 흐름입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/reconnect.png)


### 고급 테스트 실행
<a name="advanced-tests-execution"></a>

이 단계에서 테스트 케이스는 디바이스가 모범 사례를 준수하는지 확인하기 위해 더 복잡한 테스트를 순차적으로 실행합니다. 이러한 고급 테스트는 선택할 수 있으며 필요하지 않은 경우 선택 취소할 수 있습니다. 각 고급 테스트에는 시나리오에서 요구하는 내용에 따라 고유한 제한 시간 값이 있습니다.

#### RETURN PUBACK ON QoS 1 SUBSCRIPTION
<a name="advanced-tests-execution-return-puback"></a>

**참고**  
디바이스가 QoS 1 구독을 수행할 수 있는 경우에만 이 시나리오를 선택합니다.

이 시나리오는 디바이스가 주제를 구독하고 브로커에서 `PUBLISH` 메시지를 수신한 후 `PUBACK` 메시지를 반환하는지 확인합니다.

![\[DUT와 브로커 간의 QoS 1 구독에 대한 반환 PUBACK 흐름입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/return-puback.png)


#### RECEIVE LARGE PAYLOAD
<a name="advanced-tests-execution-receive-large-payload"></a>

**참고**  
디바이스가 QoS 1 구독을 수행할 수 있는 경우에만 이 시나리오를 선택합니다.

이 시나리오는 페이로드가 큰 QoS 1 주제에 대해 브로커에서 `PUBLISH` 메시지를 수신한 후 디바이스가 `PUBACK` 메시지로 응답하는지 확인합니다. 예상 페이로드의 형식은 `LONG_PAYLOAD_FORMAT` 옵션을 사용하여 구성할 수 있습니다.

![\[DUT와 브로커 간의 RECEIVE LARGE PAYLOAD 흐름입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/large-payload.png)


#### PERSISTENT SESSION
<a name="advanced-tests-execution-persistent-session"></a>

**참고**  
디바이스가 QoS 1 구독을 수행할 수 있고 영구 세션을 유지할 수 있는 경우에만 이 시나리오를 선택합니다.

이 시나리오에서는 영구 세션을 유지하는 디바이스 동작을 확인합니다. 테스트는 다음 조건이 충족될 때 유효성을 검증합니다.
+ 디바이스가 활성 QoS 1 구독 및 영구 세션이 활성화된 상태로 브로커에 연결됩니다.
+ 세션 중에 디바이스에서 브로커의 연결이 성공적으로 해제됩니다.
+ 디바이스가 브로커에 다시 연결되고 해당 주제를 명시적으로 다시 구독하지 않고도 트리거 주제에 대한 구독을 재개합니다.
+ 디바이스가 구독한 주제에 대해 브로커가 저장한 메시지를 성공적으로 수신하고 예상대로 실행됩니다.

 AWS IoT 영구 세션에 대한 자세한 내용은 [MQTT 영구 세션 사용을](https://docs.aws.amazon.com//iot/latest/developerguide/mqtt.html#mqtt-persistent-sessions) 참조하세요.

![\[DUT와 브로커 간의 PERSISTENT SESSION 흐름입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/persistent-session.png)


#### KEEP ALIVE
<a name="advanced-tests-execution-keep-alive"></a>

이 시나리오는 디바이스가 브로커로부터 ping 응답을 받지 못한 후 연결이 성공적으로 해제되는지 확인합니다. 연결에는 유효한 연결 유지 타이머가 구성되어 있어야 합니다. 이 테스트의 일환으로 브로커는 `PUBLISH`, `SUBSCRIBE` 및 `PINGREQ` 메시지에 대해 전송된 모든 응답을 차단합니다. 또한 테스트 중인 디바이스가 MQTT 연결을 해제하는지 검증합니다.

![\[DUT와 브로커 간의 KEEP ALIVE 흐름입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/keep-alive.png)


#### INTERMITTENT CONNECTIVITY
<a name="advanced-tests-execution-intermittent-connectivity"></a>

이 시나리오는 브로커가 임의의 시간 동안 임의의 간격으로 디바이스 연결을 해제한 후 디바이스가 브로커에 다시 연결될 수 있는지 확인합니다.

![\[DUT와 브로커 간의 INTERMITTENT CONNECTIVITY 흐름입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/intermittent.png)


#### RECONNECT BACKOFF
<a name="advanced-tests-execution-reconnect-backoff"></a>

이 시나리오는 브로커가 여러 번 연결을 해제할 때 디바이스에 백오프 메커니즘이 구현되어 있는지 확인합니다. Device Advisor는 백오프 유형을 지수, 지터, 선형 또는 상수로 보고합니다. 백오프 시도 횟수는 `BACKOFF_CONNECTION_ATTEMPTS` 옵션을 사용하여 구성할 수 있습니다. 기본값은 5입니다. 값은 5\$110으로 구성 가능합니다.

이 테스트를 통과하려면 테스트 중인 디바이스에서 [지수 백오프 및 지터](https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/) 메커니즘을 구현하는 것이 좋습니다.

![\[DUT와 브로커 간의 RECONNECT BACKOFF 흐름입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/reconnect-backoff.png)


#### LONG SERVER DISCONNECT
<a name="advanced-tests-execution-longserver-disconnect"></a>

이 시나리오는 브로커가 오랜 시간(최대 120분) 동안 디바이스 연결을 해제한 후 디바이스가 성공적으로 다시 연결될 수 있는지 확인합니다. 서버 연결 해제 시간은 `LONG_SERVER_DISCONNECT_TIME` 옵션을 사용하여 구성할 수 있습니다. 기본값은 120분입니다. 이 값은 30분\$1120분으로 구성할 수 있습니다.

![\[DUT와 브로커 간의 LONG SERVER DISCONNECT 흐름입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/longserver-disconnect.png)


### 추가 실행 시간
<a name="additional-execution-time"></a>

추가 실행 시간은 위의 모든 테스트를 완료한 후 테스트 케이스를 종료하기 전에 테스트가 대기하는 시간입니다. 고객은 이 추가 기간을 사용하여 디바이스와 브로커 간의 모든 통신을 모니터링하고 기록합니다. `ADDITIONAL_EXECUTION_TIME` 옵션을 사용하여 추가 실행 시간을 구성할 수 있습니다. 기본적으로 이 옵션은 0분으로 설정되며 0분\$1120분이 될 수 있습니다.

## MQTT 장기간 테스트 구성 옵션
<a name="long-duration-test-case-config-options"></a>

MQTT 장기간 테스트를 위해 제공되는 모든 구성 옵션은 선택 사항입니다. 다음 옵션을 사용할 수 있습니다.

**OPERATIONS**  
디바이스에서 수행하는 작업 목록(예: `CONNECT`, `PUBLISH`, `SUBSCRIBE`)입니다. 테스트 케이스는 지정된 작업을 기반으로 시나리오를 실행합니다. 지정되지 않은 작업은 유효한 것으로 간주됩니다.  

```
{                                
"OPERATIONS": ["PUBLISH", "SUBSCRIBE"]
//by default the test assumes device can CONNECT   
}
```

**SCENARIOS**  
선택한 작업에 따라 테스트 케이스는 시나리오를 실행하여 디바이스의 동작을 검증합니다. 다음 두 가지 유형의 시나리오가 있습니다.  
+ **기본 시나리오**는 디바이스가 구성의 일부로 위에서 선택한 작업을 수행할 수 있는지 확인하는 간단한 테스트입니다. 이는 구성에 지정된 작업을 기반으로 미리 선택됩니다. 구성에 다른 입력이 필요하지 않습니다.
+ **고급 시나리오**는 실제 조건이 충족되었을 때 디바이스가 모범 사례를 따르는지 확인하기 위해 디바이스에 대해 수행되는 보다 복잡한 시나리오입니다. 이는 선택 사항이며 테스트 제품군의 구성 입력에 시나리오 배열로 전달할 수 있습니다.

```
{                                
    "SCENARIOS": [      // list of advanced scenarios
                "PUBACK_QOS_1",
                "RECEIVE_LARGE_PAYLOAD",
                "PERSISTENT_SESSION",
                "KEEP_ALIVE",
                "INTERMITTENT_CONNECTIVITY",
                "RECONNECT_BACK_OFF",
                "LONG_SERVER_DISCONNECT"
    ]  
}
```

**BASIC\$1TESTS\$1EXECUTION\$1TIME\$1OUT:**  
테스트 케이스에서 모든 기본 테스트가 완료될 때까지 기다리는 최대 시간입니다. 기본값은 60분입니다. 이 값은 30분\$1120분으로 구성할 수 있습니다.

**LONG\$1SERVER\$1DISCONNECT\$1TIME:**  
Long Server Disconnect 테스트 중에 테스트 케이스가 디바이스의 연결을 해제했다가 다시 연결하는 데 걸리는 시간입니다. 기본값은 60분입니다. 이 값은 30분\$1120분으로 구성할 수 있습니다.

**ADDITIONAL\$1EXECUTION\$1TIME:**  
이 옵션을 구성하면 모든 테스트가 완료된 후 디바이스와 브로커 간의 이벤트를 모니터링할 수 있는 시간이 제공됩니다. 기본값은 0분입니다. 이 값은 0분\$1120분으로 구성할 수 있습니다.

**BACKOFF\$1CONNECTION\$1ATTEMPTS:**  
이 옵션은 테스트 케이스에서 디바이스의 연결을 해제하는 횟수를 구성합니다. 이는 Reconnect Backoff 테스트에서 사용됩니다. 기본값은 5회입니다. 이 값은 5\$110으로 구성할 수 있습니다.

**LONG\$1PAYLOAD\$1FORMAT:**  
테스트 케이스가 디바이스에서 구독하는 QoS 1 주제에 게시할 때 디바이스에서 예상하는 메시지 페이로드의 형식입니다.

**API 테스트 케이스 정의:**

```
{                                
"tests":[
   {
      "name":"my_mqtt_long_duration_test",
      "configuration": {
         // optional
         "OPERATIONS": ["PUBLISH", "SUBSCRIBE"], 
         "SCENARIOS": [      
            "LONG_SERVER_DISCONNECT", 
            "RECONNECT_BACK_OFF",
            "KEEP_ALIVE",
            "RECEIVE_LARGE_PAYLOAD",
            "INTERMITTENT_CONNECTIVITY",
            "PERSISTENT_SESSION",   
         ],
         "BASIC_TESTS_EXECUTION_TIMEOUT": 60, // in minutes (60 minutes by default)
         "LONG_SERVER_DISCONNECT_TIME": 60,   // in minutes (120 minutes by default)
         "ADDITIONAL_EXECUTION_TIME": 60,     // in minutes (0 minutes by default)
         "BACKOFF_CONNECTION_ATTEMPTS": "5",
         "LONG_PAYLOAD_FORMAT":"{"message":"${payload}"}"
      },
      "test":{
         "id":"MQTT_Long_Duration",
         "version":"0.0.0"
      }
   }
 ]      
}
```

## MQTT 장기간 테스트 케이스 요약 로그
<a name="long-duration-test-case-summary-log"></a>

MQTT 장기간 테스트 케이스는 일반 테스트 케이스보다 더 오래 실행됩니다. 실행 중 디바이스 연결, 게시 및 구독과 같은 중요한 이벤트를 나열하는 별도의 요약 로그가 제공됩니다. 세부 정보에는 테스트된 항목, 테스트되지 않은 항목 및 실패한 항목이 포함됩니다. 로그 끝부분에는 테스트 케이스 실행 중에 발생한 모든 이벤트의 요약이 포함됩니다. 여기에는 다음이 포함됩니다.
+ *디바이스에 구성된 연결 유지 타이머*
+ *디바이스에 구성된 영구 세션 플래그*
+ *테스트 실행 중 디바이스 연결 수*
+ *디바이스 재연결 백오프 유형(재연결 백오프 테스트에 대해 검증된 경우)*
+ *테스트 케이스 실행 중에 디바이스가 게시한 주제*
+ *테스트 케이스 실행 중에 디바이스가 구독한 주제*