

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

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

이 단원에서는 디바이스를 AWS IoT Core에 연결하는 방법에 대해 설명합니다. 를 시작하려면 Amazon EC2를 사용하여 가상 디바이스 AWS IoT Core 를 생성하거나 Windows PC 또는 Mac을 IoT 디바이스로 사용할 수 있습니다.

시도할 가장 적합한 디바이스 옵션을 선택합니다 AWS IoT Core. 모든 것을 시도할 수는 있지만 한 번에 하나만 시도하세요. 어떤 디바이스 옵션이 가장 적합한지 모르는 경우 [최상의 디바이스 옵션(which device option is the best)](iot-gs-first-thing.md#choosing-a-gs-system)을 선택하는 방법을 읽은 다음 이 페이지로 돌아옵니다.

**디바이스 옵션**
+ [Amazon EC2를 사용하여 가상 디바이스 생성](creating-a-virtual-thing.md)
+ [Windows 또는 Linux PC 또는 Mac을 AWS IoT 디바이스로 사용](using-laptop-as-device.md)
+ [Raspberry Pi 또는 다른 디바이스 연결](connecting-to-existing-device.md)

# Amazon EC2를 사용하여 가상 디바이스 생성
<a name="creating-a-virtual-thing"></a>

이 자습서에서는 클라우드에서 가상 디바이스로 사용할 Amazon EC2 인스턴스를 생성합니다.

이 자습서를 완료하려면이 필요합니다 AWS 계정. 없는 경우 계속하기 전에 [설정 AWS 계정](setting-up.md)에서 설명하는 단계를 완료하세요.

**Topics**
+ [Amazon EC2 인스턴스 설정](#set-up-ec2)
+ [Git, Node.js 설치 및 구성 AWS CLI](#install-git-node)
+ [가상 디바이스에 대한 AWS IoT 리소스 생성](#ec2-create-certificate)
+ [AWS IoT Device SDK for JavaScript 설치](#ec2-sdk)
+ [샘플 애플리케이션 실행](#ec2-run-app)
+ [AWS IoT 콘솔에서 샘플 앱의 메시지 보기](#ec2-view-msg)

## Amazon EC2 인스턴스 설정
<a name="set-up-ec2"></a>

다음 단계에서는 물리적 디바이스 대신 가상 디바이스 역할을 할 Amazon EC2 인스턴스를 생성하는 방법을 보여 줍니다.

Amazon EC2 인스턴스를 처음 생성하는 경우 [Amazon EC2Linux 인스턴스 시작하기](https://docs.aws.amazon.com//AWSEC2/latest/UserGuide/EC2_GetStarted.html)가 더 도움이 될 것입니다.

**인스턴스 시작**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 왼쪽의 콘솔 메뉴에서 **Instances**(인스턴스) 섹션을 펼치고 **Instances**(인스턴스)를 선택합니다. **Instances**(인스턴스) 대시보드에서 오른쪽의 **Launch Instance**(인스턴스 시작)를 선택하면 기본 구성 목록이 표시됩니다.

1. **Name and tags**(이름 및 태그) 섹션에서 인스턴스의 이름을 입력하고 선택적으로 태그를 추가합니다.

1. **Application and OS Images(Amazon Machine Image)**(애플리케이션 및 OS 이미지(Amazon Machine Image)) 섹션에서 *Amazon Linux 2 AMI(HVM)*와 같이 인스턴스에 대한 AMI 템플릿을 선택합니다. 해당되는 AMI는 "프리 티어 사용 가능"으로 표시됩니다.

1. **Instance type**(인스턴스 유형) 섹션에서 인스턴스의 하드웨어 구성을 선택할 수 있습니다. 기본으로 선택된 `t2.micro` 유형을 선택합니다. 프리 티어에 적격인 인스턴스 유형입니다.

1. **Key pair (login)**(키 페어(로그인)) 섹션의 드롭다운 목록에서 키 페어 이름을 선택하거나 **Create a new key pair**(새 키 페어 생성)를 선택하여 새 키 페어를 생성합니다. 새 키 페어를 생성할 때는 프라이빗 키 파일을 다운로드하여 안전한 곳에 저장해야 합니다. 이때만 다운로드하고 저장할 수 있기 때문입니다. 인스턴스를 시작할 때 키 페어의 이름을 제공하고, 인스턴스에 연결할 때마다 해당 프라이빗 키를 제공해야 합니다.
**주의**  
**Proceed without a key pair**(키 페어 없이 계속) 옵션을 선택하지 마세요. 키 페어 없이 인스턴스를 시작하면 인스턴스에 연결할 수 없습니다.

1. **Network settings**(네트워크 설정) 섹션 및 **Configure storage**(스토리지 구성) 섹션에서 기본 설정을 유지할 수 있습니다. 준비가 완료되면 **Launch instances**(인스턴스 시작)를 선택합니다.

1. 확인 페이지에서 인스턴스가 실행 중인지 확인할 수 있습니다. **인스턴스 보기**를 선택하여 확인 페이지를 닫고 콘솔로 돌아갑니다.

1. **인스턴스** 화면에서 시작 상태를 볼 수 있습니다. 인스턴스를 시작하는 데 약간 시간이 걸립니다. 인스턴스를 시작할 때 초기 상태는 `pending`입니다. 인스턴스가 시작된 후에는 상태가 `running`으로 바뀌고 퍼블릭 DNS 이름을 받습니다. (**퍼블릭 DNS(IPv4)** 열이 숨겨져 있는 경우 페이지 오른쪽 상단 모서리에 있는 **열 표시/숨기기**(기어 모양 아이콘)를 선택한 다음 **퍼블릭 DNS(IPv4)**를 선택합니다.)

1. 연결할 수 있도록 인스턴스가 준비될 때까지 몇 분 정도 걸릴 수 있습니다. 인스턴스가 상태 확인을 통과했는지 확인하세요. **상태 검사** 열에서 이 정보를 볼 수 있습니다.

   새 인스턴스가 상태 확인을 통과한 후 다음 절차를 계속하여 인스턴스에 연결합니다.

**인스턴스에 연결하려면**

Amazon EC2 콘솔에서 인스턴스를 선택하고 Amazon EC2 Instance Connect를 사용하여 연결하도록 선택하면 브라우저 기반 클라이언트를 사용하여 인스턴스에 연결할 수 있습니다. Instance Connect는 권한을 처리하여 성공적인 연결을 제공합니다.

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 왼쪽 메뉴에서 **Instances**(인스턴스)를 선택합니다.

1. 인스턴스를 선택한 다음 **연결**을 선택합니다.

1. **Amazon EC2 Instance Connect**, **Connect**(연결)를 선택합니다.

이제 새 Amazon EC2 인스턴스에 로그인된 **Amazon EC2 Instance Connect** 창이 있어야 합니다.

## Git, Node.js 설치 및 구성 AWS CLI
<a name="install-git-node"></a>

이 섹션에서는 Linux 인스턴스에 Git과 Node.js를 설치합니다.

**Git를 설치하려면**

1. **Amazon EC2 Instance Connect** 창에서 다음 명령을 사용하여 인스턴스를 업데이트합니다.

   ```
   sudo yum update -y
   ```

1. **Amazon EC2 Instance Connect** 창에서 다음 명령을 사용하여 Git를 설치합니다.

   ```
   sudo yum install git -y
   ```

1. Git이 설치되어 있고 현재 버전의 Git이 설치되어 있는지 확인하려면 다음 명령을 실행합니다.

   ```
   git --version
   ```

**Node.js를 설치하려면**

1. **Amazon EC2 Instance Connect** 창에서 다음 명령을 사용하여 nvm(노드 버전 관리자)를 설치합니다.

   ```
   curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
   ```

   nvm을 사용하면 여러 버전의 Node.js를 설치할 수 있고 여러 버전 간을 전환할 수 있기 때문에 여기서는 nvm을 사용하여 Node.js를 설치합니다.

1. **Amazon EC2 Instance Connect** 창에서 다음 명령을 사용하여 nvm을 활성화합니다.

   ```
   . ~/.nvm/nvm.sh
   ```

1. **Amazon EC2 Instance Connect** 창에서 다음 명령을 사용하여 최신 버전의 Node.js를 설치하기 위해 nvm을 사용합니다.

   ```
   nvm install 16
   ```
**참고**  
이 명령어를 실행하면 Node.js의 최신 LTS 릴리스를 설치합니다.

   Node.js를 설치하면 npm(노드 패키지 관리자)도 설치되므로 필요에 따라 추가 모듈을 설치할 수 있습니다.

1. **Amazon EC2 Instance Connect** 창에서 다음 명령을 사용하여 Node.js가 설치되었고 올바르게 실행되는지 테스트합니다.

   ```
   node -e "console.log('Running Node.js ' + process.version)"
   ```

    이 자습서에서는 Node v10.0 이상이 필요합니다. 자세한 정보는 [자습서: Amazon EC2 인스턴스에서 Node.js 설정(Tutorial: Setting Up Node.js on an Amazon EC2 Instance)](https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/setting-up-node-on-ec2-instance.html)을 참조하세요.

**를 구성하려면 AWS CLI**

Amazon EC2 인스턴스에는 AWS CLI이(가) 미리 로드됩니다. 그러나 AWS CLI 프로필을 작성해야 합니다. CLI를 구성하는 방법에 대한 자세한 정보는 [AWS CLI구성](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)을 참조하세요.

1. 다음 예제는 샘플 값을 보여줍니다. 이들을 사용자의 고유한 값으로 교체합니다. 이 값은 [AWS 콘솔의 계정 정보에 있는 **보안 자격 증명(Security credentials)**](https://console.aws.amazon.com//iam/home#/security_credentials)에서 찾을 수 있습니다.

   **Amazon EC2 Instance Connect** 창에서 다음 명령을 입력합니다.

   ```
   aws configure
   ```

   그런 다음 표시된 프롬프트에 계정의 값을 입력합니다.

   ```
   AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
   AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
   Default region name [None]: us-west-2
   Default output format [None]: json
   ```

1. 다음 명령을 사용하여 AWS CLI 구성을 테스트할 수 있습니다.

   ```
   aws iot describe-endpoint --endpoint-type iot:Data-ATS
   ```

    AWS CLI 이 올바르게 구성된 경우 명령은에서 엔드포인트 주소를 반환해야 합니다 AWS 계정.

## 가상 디바이스에 대한 AWS IoT 리소스 생성
<a name="ec2-create-certificate"></a>

이 섹션에서는 AWS CLI 를 사용하여 가상 디바이스에서 사물 객체와 해당 인증서 파일을 직접 생성하는 방법을 설명합니다. 이 작업은 다른 컴퓨터에서 디바이스로 복사할 때 발생할 수 있는 잠재적인 복합 문제를 피하기 위해 디바이스에서 직접 수행됩니다. 이 섹션에서는 가상 디바이스를 위한 다음과 같은 리소스를 생성합니다.
+ 가상 디바이스를 나타낼 사물 객체입니다 AWS IoT.
+ 가상 디바이스를 인증하기 위한 인증서.
+ 가상 디바이스가 AWS IoT에 연결하고 메시지를 게시, 수신 및 구독할 수 있는 권한을 부여하는 정책 문서.

**Linux 인스턴스에서 AWS IoT 사물 객체를 생성하려면**

에 연결된 디바이스는 AWS IoT 레지스트리의 *사물 객체*로 AWS IoT 표시됩니다. *사물 객체*는 특정 디바이스 또는 논리적 엔터티를 나타냅니다. 이 경우 *사물 객체*는 가상 디바이스인 이 Amazon EC2 인스턴스를 나타냅니다.

1. **Amazon EC2 Instance Connect** 창에서 다음 명령을 실행하여 사물 객체를 만듭니다.

   ```
   aws iot create-thing --thing-name "MyIotThing"
   ```

1. JSON 응답은 다음과 같아야 합니다.

   ```
   {
       "thingArn": "arn:aws:iot:your-region:your-aws-account:thing/MyIotThing", 
       "thingName": "MyIotThing",
       "thingId": "6cf922a8-d8ea-4136-f3401EXAMPLE"
   }
   ```

**Linux 인스턴스에서 AWS IoT 키와 인증서를 생성하고 연결하려면**

**[create-keys-and-certificate](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/create-keys-and-certificate.html)** 명령은 Amazon Root 인증 기관에서 서명한 클라이언트 인증서를 생성합니다. 이 인증서는 가상 디바이스의 자격 증명을 인증하는 데 사용됩니다.

1. **Amazon EC2 Instance Connect** 창에서 인증서 및 키 파일을 저장할 디렉터리를 생성합니다.

   ```
   mkdir ~/certs
   ```

1. **Amazon EC2 Instance Connect** 창에서 다음 명령을 사용하여 Amazon CA(인증 기관) 인증서의 사본을 다운로드합니다.

   ```
   curl -o ~/certs/Amazon-root-CA-1.pem \
       https://www.amazontrust.com/repository/AmazonRootCA1.pem
   ```

1. **Amazon EC2 Instance Connect** 창에서 다음 명령을 실행하여 프라이빗 키, 퍼블릭 키 및 X.509 인증서 파일을 생성합니다. 또한이 명령은 인증서를 등록하고 활성화합니다 AWS IoT.

   ```
   aws iot create-keys-and-certificate \
       --set-as-active \
       --certificate-pem-outfile "~/certs/device.pem.crt" \
       --public-key-outfile "~/certs/public.pem.key" \
       --private-key-outfile "~/certs/private.pem.key"
   ```

   그 응답은 다음과 같습니다. 후속 명령에서 사용할 수 있도록 `certificateArn`을 저장해 둡니다. 이것은 이후 단계에서 인증서를 사물에 연결하고 정책을 인증서에 연결하는 데 필요합니다.

   ```
   {
       "certificateArn": "arn:aws:iot:us-west-2:123456789012:cert/9894ba17925e663f1d29c23af4582b8e3b7619c31f3fbd93adcb51ae54b83dc2",
       "certificateId": "9894ba17925e663f1d29c23af4582b8e3b7619c31f3fbd93adcb51ae54b83dc2",
       "certificatePem": "
   -----BEGIN CERTIFICATE-----
   MIICiTCCEXAMPLE6m7oRw0uXOjANBgkqhkiG9w0BAQUFADCBiDELMAkGA1UEBhMC
   VVMxCzAJBgNVBAgEXAMPLEAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6
   b24xFDASBgNVBAsTC0lBTSEXAMPLE2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAd
   BgkqhkiG9w0BCQEWEG5vb25lQGFtYEXAMPLEb20wHhcNMTEwNDI1MjA0NTIxWhcN
   MTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBhMCEXAMPLEJBgNVBAgTAldBMRAwDgYD
   VQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDAEXAMPLEsTC0lBTSBDb25z
   b2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEXAMPLE25lQGFt
   YXpvbi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMaK0dn+aEXAMPLE
   EXAMPLEfEvySWtC2XADZ4nB+BLYgVIk60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9T
   rDHudUZEXAMPLELG5M43q7Wgc/MbQITxOUSQv7c7ugFFDzQGBzZswY6786m86gpE
   Ibb3OhjZnzcvQAEXAMPLEWIMm2nrAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4
   nUhVVxYUntneD9+h8Mg9qEXAMPLEyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0Fkb
   FFBjvSfpJIlJ00zbhNYS5f6GuoEDEXAMPLEBHjJnyp378OD8uTs7fLvjx79LjSTb
   NYiytVbZPQUQ5Yaxu2jXnimvw3rrszlaEXAMPLE=
   -----END CERTIFICATE-----\n",
       "keyPair": {
           "PublicKey": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkEXAMPLEQEFAAOCAQ8AMIIBCgKCAQEAEXAMPLE1nnyJwKSMHw4h\nMMEXAMPLEuuN/dMAS3fyce8DW/4+EXAMPLEyjmoF/YVF/gHr99VEEXAMPLE5VF13\n59VK7cEXAMPLE67GK+y+jikqXOgHh/xJTwo+sGpWEXAMPLEDz18xOd2ka4tCzuWEXAMPLEahJbYkCPUBSU8opVkR7qkEXAMPLE1DR6sx2HocliOOLtu6Fkw91swQWEXAMPLE\GB3ZPrNh0PzQYvjUStZeccyNCx2EXAMPLEvp9mQOUXP6plfgxwKRX2fEXAMPLEDa\nhJLXkX3rHU2xbxJSq7D+XEXAMPLEcw+LyFhI5mgFRl88eGdsAEXAMPLElnI9EesG\nFQIDAQAB\n-----END PUBLIC KEY-----\n",
           "PrivateKey": "-----BEGIN RSA PRIVATE KEY-----\nkey omitted for security reasons\n-----END RSA PRIVATE KEY-----\n"
       }
   }
   ```

1. **Amazon EC2 Instance Connect** 창에서 다음 명령과, 앞의 명령의 응답으로 얻은 *certificateArn*을 사용하여 방금 만든 인증서에 사물 객체를 연결합니다.

   ```
   aws iot attach-thing-principal \
       --thing-name "MyIotThing" \
       --principal "certificateArn"
   ```

   이 명령이 제대로 실행되면 어떤 출력도 표시하지 않습니다.

**정책을 생성하여 연결하려면**

1. **Amazon EC2 Instance Connect** 창에서 이 정책 문서를 복사하여 이름이 **\$1/policy.json**인 파일에 붙여 넣어서 정책 파일을 생성합니다.

   자주 사용하는 Linux 편집기가 없는 경우 다음 명령을 사용하여 **nano**를 열 수 있습니다.

   ```
   nano ~/policy.json
   ```

   `policy.json`에 대한 정책 문서를 붙여넣습니다. **nano** 편집기를 종료(Ctrl-X)하고 파일을 저장합니다.

   `policy.json`용 정책 문서의 내용.  
****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "iot:Publish",
                   "iot:Subscribe",
                   "iot:Receive",
                   "iot:Connect"
               ],
               "Resource": [
                   "*"
               ]
           }
       ]
   }
   ```

1. **Amazon EC2 Instance Connect** 창에서 다음 명령을 사용하여 정책을 생성합니다.

   ```
   aws iot create-policy \
       --policy-name "MyIotThingPolicy" \
       --policy-document "file://~/policy.json"
   ```

   출력:  
****  

   ```
   {
       "policyName": "MyIotThingPolicy",
       "policyArn": "arn:aws:iot:us-east-1:your-aws-account:policy/MyIotThingPolicy",
       "policyDocument": "{
           \"Version\": \"2012-10-17\",
           \"Statement\": [
               {
                   \"Effect\": \"Allow\",
                   \"Action\": [
                       \"iot:Publish\",
                       \"iot:Receive\",
                       \"iot:Subscribe\",
                       \"iot:Connect\"
                   ],
                   \"Resource\": [
                       \"*\"
                   ]
           }
           ]
       }",
       "policyVersionId": "1"
   }
   ```

1. **Amazon EC2 Instance Connect** 창에서 다음 명령을 사용하여 정책을 가상 디바이스의 인증서에 연결합니다.

   ```
   aws iot attach-policy \
       --policy-name "MyIotThingPolicy" \
       --target "certificateArn"
   ```

   이 명령이 제대로 실행되면 어떤 출력도 표시하지 않습니다.

## AWS IoT Device SDK for JavaScript 설치
<a name="ec2-sdk"></a>

이 단원에서는 애플리케이션이 AWS IoT 및 샘플 프로그램과 통신하는 데 사용할 수 있는 코드가 포함된 AWS IoT Device SDK for JavaScript를 설치합니다. 자세한 내용은 [JavaScript GitHub 리포지토리용AWS IoT 디바이스 SDK](https://github.com/aws/aws-iot-device-sdk-js-v2)를 참조하세요.

**Linux 인스턴스에 AWS IoT Device SDK for JavaScript를 설치하려면**

1. **Amazon EC2 Instance Connect** 창에서이 명령을 사용하여 AWS IoT Device SDK for JavaScript 리포지토리를 홈 `aws-iot-device-sdk-js-v2` 디렉터리의 디렉터리에 복제합니다.

   ```
   cd ~
   git clone https://github.com/aws/aws-iot-device-sdk-js-v2.git
   ```

1. 이전 단계에서 생성한 `aws-iot-device-sdk-js-v2` 디렉터리로 이동합니다.

   ```
   cd aws-iot-device-sdk-js-v2
   ```

1. npm을 사용하여 SKD를 설치합니다.

   ```
   npm install
   ```

## 샘플 애플리케이션 실행
<a name="ec2-run-app"></a>

 다음 섹션의 명령은 이 표에 표시된 대로 키 및 인증서 파일이 가상 디바이스에 저장되어 있다고 가정합니다.


**인증서 파일 이름**  

|  파일  |  파일 경로  | 
| --- | --- | 
|  프라이빗 키  |  `~/certs/private.pem.key`  | 
|  디바이스 인증서  |  `~/certs/device.pem.crt`  | 
|  루트 CA 인증서  |  `~/certs/Amazon-root-CA-1.pem`  | 

이 섹션에서는 AWS IoT Device SDK for JavaScript의 `aws-iot-device-sdk-js-v2/samples/node` 디렉터리에 있는 `pub-sub.js` 샘플 앱을 설치하고 실행합니다. 이 앱은 디바이스인 Amazon EC2 인스턴스가 MQTT 라이브러리를 사용하여 MQTT 메시지를 게시하고 구독하는 방법을 보여줍니다. `pub-sub.js` 샘플 앱은 `topic_1` 주제를 구독하고 해당 주제에 10개의 메시지를 게시하고 메시지 브로커로부터 받은 메시지를 표시합니다.

**샘플 앱을 설치하고 실행하려면**

1. **Amazon EC2 Instance Connect**에서 다음 명령을 사용하여 SDK가 생성한 `aws-iot-device-sdk-js-v2/samples/node/pub_sub` 디렉터리로 이동하고 샘플 앱을 설치합니다.

   ```
   cd ~/aws-iot-device-sdk-js-v2/samples/node/pub_sub
   npm install
   ```

1. **Amazon EC2 Instance Connect** 창에서이 명령을 사용하여에서 *your-iot-endpoint* AWS IoT 를 가져옵니다.

   ```
   aws iot describe-endpoint --endpoint-type iot:Data-ATS
   ```

1. **Amazon EC2 Instance Connect** 창에서 *your-iot-endpoint*를 표시된 대로 삽입하고 다음 명령을 실행합니다.

   ```
   node dist/index.js --topic topic_1 --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpoint your-iot-endpoint
   ```

샘플 앱은 다음과 같은 작업을 수행합니다.

1. 계정의 AWS IoT Core 에 연결합니다.

1. 메시지 주제 **topic\$11**을 구독하고 해당 주제에 대해 수신하는 메시지 표시.

1. **topic\$11** 주제에 10개의 메시지 게시.

1. 다음과 유사한 출력 표시.

   ```
   Publish received. topic:"topic_1" dup:false qos:1 retain:false
   {"message":"Hello world!","sequence":1}
   Publish received. topic:"topic_1" dup:false qos:1 retain:false
   {"message":"Hello world!","sequence":2}
   Publish received. topic:"topic_1" dup:false qos:1 retain:false
   {"message":"Hello world!","sequence":3}
   Publish received. topic:"topic_1" dup:false qos:1 retain:false
   {"message":"Hello world!","sequence":4}
   Publish received. topic:"topic_1" dup:false qos:1 retain:false
   {"message":"Hello world!","sequence":5}
   Publish received. topic:"topic_1" dup:false qos:1 retain:false
   {"message":"Hello world!","sequence":6}
   Publish received. topic:"topic_1" dup:false qos:1 retain:false
   {"message":"Hello world!","sequence":7}
   Publish received. topic:"topic_1" dup:false qos:1 retain:false
   {"message":"Hello world!","sequence":8}
   Publish received. topic:"topic_1" dup:false qos:1 retain:false
   {"message":"Hello world!","sequence":9}
   Publish received. topic:"topic_1" dup:false qos:1 retain:false
   {"message":"Hello world!","sequence":10}
   ```

샘플 앱을 실행하는 데 문제가 있는 경우 [샘플 애플리케이션 문제 해결](gs-device-troubleshoot.md)를 검토합니다.

샘플 앱이 수행 중인 작업에 대한 자세한 메시지를 표시하도록 명령줄에 `--verbosity debug` 파라미터를 추가할 수도 있습니다. 이 정보는 문제를 해결하는 데 필요한 도움을 제공할 수 있습니다.

## AWS IoT 콘솔에서 샘플 앱의 메시지 보기
<a name="ec2-view-msg"></a>

**AWS IoT 콘솔**에서 **MQTT 테스트 클라이언트**를 사용하여, 샘플 앱의 메시지가 메시지 브로커를 통과할 때 해당 메시지를 볼 수 있습니다.

**샘플 앱에서 게시한 MQTT 메시지를 보려면**

1. [MQTT 클라이언트를 사용하여 AWS IoT MQTT 메시지 보기](view-mqtt-messages.md)을(를) 검토합니다. 이는 MQTT 메시지가 메시지 브로커를 통과할 때 해당 메시지를 보기 위해 **AWS IoT 콘솔**에서 **MQTT 테스트 클라이언트**를 사용하는 방법을 파악하는 데 도움이 됩니다.

1. **AWS IoT 콘솔**에서 **MQTT 테스트 클라이언트**를 엽니다.

1. **Subscribe to a topic**(주제 구독)에서 **topic\$11** 주제를 구독합니다.

1. **Amazon EC2 Instance Connect** 창에서 샘플 앱을 다시 실행하고 **AWS IoT 콘솔**의 **MQTT 테스트 클라이언트**에서 메시지를 확인합니다.

   ```
   cd ~/aws-iot-device-sdk-js-v2/samples/node/pub_sub
   node dist/index.js --topic topic_1 --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpoint your-iot-endpoint
   ```

MQTT 및가 프로토콜을 AWS IoT Core 지원하는 방법에 대한 자세한 내용은 [MQTT](https://docs.aws.amazon.com//iot/latest/developerguide/mqtt.html)를 참조하세요.

# Windows 또는 Linux PC 또는 Mac을 AWS IoT 디바이스로 사용
<a name="using-laptop-as-device"></a>

이 자습서에서는와 함께 사용할 개인용 컴퓨터를 구성합니다 AWS IoT. 이 지침은 Windows 및 Linux PC와 Mac을 지원합니다. 이를 위해서는 컴퓨터에 소프트웨어를 설치해야 합니다. 컴퓨터에 소프트웨어를 설치하지 않으려는 경우 [Amazon EC2를 사용하여 가상 디바이스 생성](creating-a-virtual-thing.md)을(를) 시도하여 가상 머신에 모든 소프트웨어를 설치할 수 있습니다.

**Topics**
+ [개인용 컴퓨터 설정](#gs-pc-prereqs)
+ [Git, Python 및 AWS IoT Device SDK for Python 설치](#gs-pc-sdk-node)
+ [정책을 설정하고 샘플 애플리케이션을 실행합니다.](#gs-pc-python-app-run)
+ [AWS IoT 콘솔에서 샘플 앱의 메시지 보기](#gs-pc-view-msg)
+ [Python에서 공유 구독 예시 실행하기](#gs-pc-shared-subscription-example)

## 개인용 컴퓨터 설정
<a name="gs-pc-prereqs"></a>

이 자습서를 완료하려면 인터넷에 연결된 Windows 또는 Linux PC 또는 Mac이 필요합니다.

다음 단계를 진행하기 전에 컴퓨터에서 명령줄 창을 열 수 있는지 확인합니다. Windows PC에서 **cmd.exe**를 사용합니다. Linux PC 또는 Mac에서는 **Terminal**을 사용합니다.

## Git, Python 및 AWS IoT Device SDK for Python 설치
<a name="gs-pc-sdk-node"></a>

이 단원에서는 Python과 Python용 AWS IoT 디바이스 SDK를 컴퓨터에 설치합니다.

### 최신 버전의 Git와 Python 설치
<a name="gs-pc-node-runtime"></a>

이 절차에서는 PC에 최신 버전의 Git 및 Python을 설치하는 방법을 설명합니다.

**Git와 Python을 컴퓨터에 다운로드하고 설치하려면**

1. 컴퓨터에 Git가 설치되어 있는지 확인합니다. 명령줄에 다음 명령을 입력합니다.

   ```
   git --version
   ```

   명령이 Git 버전을 표시하면 Git가 설치된 것이므로, 다음 단계를 진행할 수 있습니다.

   명령에 오류가 표시되면 [https://git-scm.com/download](https://git-scm.com/download)를 열고 컴퓨터에 Git를 설치하세요.

1. Python이 이미 설치되어 있는지 확인합니다. 명령줄에 다음 명령을 입력합니다.

   ```
   python -V
   ```
**참고**  
이 명령으로 `Python was not found` 오류가 발생하는 경우 운영 체제가 Python v3.x 실행 파일을 `Python3`(으)로 호출하기 때문일 수 있습니다. 이 경우 `python`의 모든 인스턴스를 `python3`(으)로 바꾸고 이 자습서의 나머지 단원을 진행합니다.

   명령이 Python 버전을 표시하면 Python이 이미 설치되어 있는 것입니다. 이 자습서에서는 Python v3.7 이상이 필요합니다.

1. Python이 설치되어 있으면 이 단원의 나머지 단계를 건너뛸 수 있습니다. 그렇지 않은 경우 계속 진행합니다.

1. [https://www.python.org/downloads/](https://www.python.org/downloads/)를 열고 컴퓨터에 설치 프로그램을 다운로드하세요.

1. 다운로드가 자동으로 설치되지 않으면 다운로드한 프로그램을 실행하여 Python을 설치합니다.

1. Python의 설치를 확인합니다.

   ```
   python -V
   ```

   명령이 Python 버전을 표시하는지 확인합니다. Python 버전이 표시되지 않으면 Python을 다시 다운로드하여 설치해 보세요.

### AWS IoT Device SDK for Python 설치
<a name="gs-pc-python-intall-sdk"></a>

**컴퓨터에 Python용 AWS IoT Device SDK를 설치하려면**

1.  AWS IoT Device SDK for Python의 v2를 설치합니다.

   ```
   python3 -m pip install awsiotsdk
   ```

1.  AWS IoT Device SDK for Python 리포지토리를 홈 디렉터리의 aws-iot-device-sdk-python-v2 디렉터리에 복제합니다. 이 절차에서는 설치하는 파일의 기본 디렉터리를 *홈(home)*으로 지칭합니다.

   *홈* 디렉터리의 실제 위치는 운영 체제에 따라 다릅니다.

------
#### [ Linux/macOS ]

   macOS와 Linux에서 *홈*디렉터리는 `~`입니다.

   ```
   cd ~ 
   git clone https://github.com/aws/aws-iot-device-sdk-python-v2.git
   ```

------
#### [ Windows ]

   Windows에서는 `cmd` 창에서 다음 명령을 실행하여 *홈* 디렉터리 경로를 찾을 수 있습니다. 

   ```
   echo %USERPROFILE%
   cd %USERPROFILE%
   git clone https://github.com/aws/aws-iot-device-sdk-python-v2.git
   ```

------
**참고**  
**cmd.exe** 대신 Windows PowerShell을 사용하는 경우 다음 명령을 사용합니다.  

   ```
   echo $home
   ```

자세한 내용은 [Python GitHub 리포지토리용AWS IoT 디바이스 SDK](https://github.com/aws/aws-iot-device-sdk-python-v2)를 참조하세요.

### 샘플 애플리케이션 실행 준비
<a name="gs-pc-python-config-app"></a>

**샘플 애플리케이션을 실행하도록 시스템을 준비하려면**
+ `certs` 디렉터리를 만듭니다. [AWS IoT 리소스 생성](create-iot-resources.md)에서 사물 객체를 생성하고 등록할 때 저장한 프라이빗 키, 디바이스 인증서 및 루트 CA 인증서 파일을 `certs` 디렉터리에 복사합니다. 대상 디렉터리에 있는 각 파일의 이름은 테이블의 파일 이름과 일치해야 합니다.

   다음 섹션의 명령은 이 표에 표시된 대로 키 및 인증서 파일이 디바이스에 저장되어 있다고 가정합니다.

------
#### [ Linux/macOS ]

  다음 명령을 실행하여 샘플 애플리케이션을 실행할 때 사용할 `certs` 하위 디렉터리를 생성합니다.

  ```
  mkdir ~/certs
  ```

  새 하위 디렉터리에, 다음 표에 표시된 대상 파일 경로로 파일을 복사합니다.  
**인증서 파일 이름**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/using-laptop-as-device.html)

  다음 명령을 실행하여 `certs` 디렉터리의 파일을 나열하고 표에 나열된 파일과 비교합니다.

  ```
  ls -l ~/certs
  ```

------
#### [ Windows ]

  다음 명령을 실행하여 샘플 애플리케이션을 실행할 때 사용할 `certs` 하위 디렉터리를 생성합니다.

  ```
  mkdir %USERPROFILE%\certs
  ```

  새 하위 디렉터리에, 다음 표에 표시된 대상 파일 경로로 파일을 복사합니다.  
**인증서 파일 이름**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/using-laptop-as-device.html)

  다음 명령을 실행하여 `certs` 디렉터리의 파일을 나열하고 표에 나열된 파일과 비교합니다.

  ```
  dir %USERPROFILE%\certs
  ```

------

## 정책을 설정하고 샘플 애플리케이션을 실행합니다.
<a name="gs-pc-python-app-run"></a>

이 단원에서는 정책을 설정하고 AWS IoT Device SDK for Python의 `aws-iot-device-sdk-python-v2/samples`디렉터리에 있는 `pubsub.py` 샘플 스크립트를 실행합니다. 이 스크립트는 디바이스가 MQTT 라이브러리를 사용하여 MQTT 메시지를 게시 및 구독하는 방법을 보여 줍니다.

`pubsub.py` 샘플 앱은 `test/topic` 주제를 구독하고 해당 주제에 10개의 메시지를 게시하고 메시지 브로커로부터 받은 메시지를 표시합니다.

`pubsub.py` 샘플 스크립트를 실행하려면 다음 정보가 필요합니다.


**애플리케이션 파라미터 값**  

|  파라미터  |  값을 찾을 수 있는 위치  | 
| --- | --- | 
| your-iot-endpoint |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/using-laptop-as-device.html)  | 

*your-iot-endpoint* 값의 형식은 `endpoint_id-ats.iot.region.amazonaws.com`(예: `a3qj468EXAMPLE-ats.iot.us-west-2.amazonaws.com`)입니다.

스크립트를 실행하기 전에 사물 정책이 샘플 스크립트에 연결, 구독, 게시 및 수신할 수 있는 권한을 제공하는지 확인합니다.

**사물 리소스에 대한 정책 문서를 찾고 검토하려면**

1. [AWS IoT 콘솔](https://console.aws.amazon.com//iot/home#/thinghub)의 **사물(Things)** 목록에서 디바이스를 나타내는 사물 리소스를 찾습니다.

1. 디바이스를 나타내는 사물 리소스의 **이름(Name)** 링크를 선택하여 **사물 세부 정보(Thing details)** 페이지를 엽니다.

1. **사물 세부 정보(Thing details)** 페이지의 **인증서(Certificates)** 탭에서 사물 리소스에 연결된 인증서를 선택합니다. 목록에는 인증서가 하나만 있어야 합니다. 여러 개 있는 경우 디바이스에 파일이 설치되어 있고 AWS IoT Core에 연결하는 데 사용할 인증서를 선택합니다.

   **인증서(Certificate)** 세부 정보 페이지의 **정책(Policies)** 탭에서 인증서에 연결된 정책을 선택합니다. 단 하나만 있어야 합니다. 여러 개 있는 경우 각각에 대해 다음 단계를 반복하여 최소한 하나의 정책이 필요한 액세스 권한을 부여하는지 확인합니다.

1. **정책(Policy)** 개요 페이지에서 JSON 편집기를 찾고 **정책 문서 편집(Edit policy document)**을 선택하여 필요에 따라 정책 문서를 검토하고 편집합니다.

1. 다음 예제에 정책 JSON이 표시됩니다. `"Resource"` 요소에서를 각 `Resource` 값 AWS 계정 에서 AWS 리전 및 `region:account`로 바꿉니다.  
****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "iot:Publish",
                   "iot:Receive"
               ],
               "Resource": [
               "arn:aws:iot:us-east-1:123456789012:topic/test/topic"
               ]
           },
           {
               "Effect": "Allow",
               "Action": [
                   "iot:Subscribe"
               ],
               "Resource": [
               "arn:aws:iot:us-east-1:123456789012:topicfilter/test/topic"
               ]
           },
           {
               "Effect": "Allow",
               "Action": [
                   "iot:Connect"
               ],
               "Resource": [
               "arn:aws:iot:us-east-1:123456789012:client/test-*"
               ]
           }
       ]
   }
   ```

------
#### [ Linux/macOS ]

**Linux/macOS에서 샘플 스크립트를 실행하려면**

1. 명령줄 창에서 다음 명령을 사용하여 SDK가 만든 `~/aws-iot-device-sdk-python-v2/samples/node/pub_sub` 디렉터리로 이동합니다.

   ```
   cd ~/aws-iot-device-sdk-python-v2/samples
   ```

1. 명령줄 창에서 *your-iot-endpoint*를 표시된 대로 바꾸고 다음 명령을 실행합니다.

   ```
   python3 pubsub.py --endpoint your-iot-endpoint --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key
   ```

------
#### [ Windows ]

**Windows PC에서 샘플 앱을 실행하려면**

1. 명령줄 창에서 다음 명령을 사용하여 SDK가 만든 `%USERPROFILE%\aws-iot-device-sdk-python-v2\samples` 디렉터리로 이동하고 샘플 앱을 설치합니다.

   ```
   cd %USERPROFILE%\aws-iot-device-sdk-python-v2\samples
   ```

1. 명령줄 창에서 *your-iot-endpoint*를 표시된 대로 바꾸고 다음 명령을 실행합니다.

   ```
   python3 pubsub.py --endpoint your-iot-endpoint --ca_file %USERPROFILE%\certs\Amazon-root-CA-1.pem --cert %USERPROFILE%\certs\device.pem.crt --key %USERPROFILE%\certs\private.pem.key
   ```

------

샘플 스크립트는 다음과 같은 작업을 수행합니다.

1. 계정의 AWS IoT Core 에 연결합니다.

1. 메시지 주제 **test/topic**를 구독하고 해당 주제에 대해 수신하는 메시지 표시.

1. **test/topic** 주제에 10개의 메시지 게시.

1. 다음과 유사한 출력 표시.

```
Connected!
Subscribing to topic 'test/topic'...
Subscribed with QoS.AT_LEAST_ONCE
Sending 10 message(s)
Publishing message to topic 'test/topic': Hello World! [1]
Received message from topic 'test/topic': b'"Hello World! [1]"'
Publishing message to topic 'test/topic': Hello World! [2]
Received message from topic 'test/topic': b'"Hello World! [2]"'
Publishing message to topic 'test/topic': Hello World! [3]
Received message from topic 'test/topic': b'"Hello World! [3]"'
Publishing message to topic 'test/topic': Hello World! [4]
Received message from topic 'test/topic': b'"Hello World! [4]"'
Publishing message to topic 'test/topic': Hello World! [5]
Received message from topic 'test/topic': b'"Hello World! [5]"'
Publishing message to topic 'test/topic': Hello World! [6]
Received message from topic 'test/topic': b'"Hello World! [6]"'
Publishing message to topic 'test/topic': Hello World! [7]
Received message from topic 'test/topic': b'"Hello World! [7]"'
Publishing message to topic 'test/topic': Hello World! [8]
Received message from topic 'test/topic': b'"Hello World! [8]"'
Publishing message to topic 'test/topic': Hello World! [9]
Received message from topic 'test/topic': b'"Hello World! [9]"'
Publishing message to topic 'test/topic': Hello World! [10]
Received message from topic 'test/topic': b'"Hello World! [10]"'
10 message(s) received.
Disconnecting...
Disconnected!
```

샘플 앱을 실행하는 데 문제가 있는 경우 [샘플 애플리케이션 문제 해결](gs-device-troubleshoot.md)를 검토합니다.

샘플 앱이 수행 중인 작업에 대한 자세한 메시지를 표시하도록 명령줄에 `--verbosity Debug` 파라미터를 추가할 수도 있습니다. 이 정보는 문제를 해결하는 데 도움이 될 수 있습니다.

## AWS IoT 콘솔에서 샘플 앱의 메시지 보기
<a name="gs-pc-view-msg"></a>

**AWS IoT 콘솔**에서 **MQTT 테스트 클라이언트**를 사용하여, 샘플 앱의 메시지가 메시지 브로커를 통과할 때 해당 메시지를 볼 수 있습니다.

**샘플 앱에서 게시한 MQTT 메시지를 보려면**

1. [MQTT 클라이언트를 사용하여 AWS IoT MQTT 메시지 보기](view-mqtt-messages.md)을(를) 검토합니다. 이는 MQTT 메시지가 메시지 브로커를 통과할 때 해당 메시지를 보기 위해 **AWS IoT 콘솔**에서 **MQTT 테스트 클라이언트**를 사용하는 방법을 파악하는 데 도움이 됩니다.

1. **AWS IoT 콘솔**에서 **MQTT 테스트 클라이언트**를 엽니다.

1. **Subscribe to a topic**(주제 구독)에서 **test/topic** 주제를 구독합니다.

1. 명령줄 창에서 샘플 앱을 다시 실행하고 **AWS IoT 콘솔**의 **MQTT 클라이언트**에서 메시지를 확인합니다.

------
#### [ Linux/macOS ]

   ```
   cd ~/aws-iot-device-sdk-python-v2/samples
   python3 pubsub.py --topic test/topic --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpoint your-iot-endpoint
   ```

------
#### [ Windows ]

   ```
   cd %USERPROFILE%\aws-iot-device-sdk-python-v2\samples
   python3 pubsub.py --topic test/topic --ca_file %USERPROFILE%\certs\Amazon-root-CA-1.pem --cert %USERPROFILE%\certs\device.pem.crt --key %USERPROFILE%\certs\private.pem.key --endpoint your-iot-endpoint
   ```

------

MQTT 및가 프로토콜을 AWS IoT Core 지원하는 방법에 대한 자세한 내용은 [MQTT](https://docs.aws.amazon.com//iot/latest/developerguide/mqtt.html)를 참조하세요.

## Python에서 공유 구독 예시 실행하기
<a name="gs-pc-shared-subscription-example"></a>

AWS IoT Core 는 MQTT 3 및 MQTT 5 모두에 대해 [공유 구독](mqtt.md#mqtt5-shared-subscription)을 지원합니다. 공유 구독을 사용하면 여러 클라이언트가 한 주제에 대한 구독을 공유할 수 있으며 무작위 배포를 통해 해당 주제에 게시된 메시지를 한 클라이언트만 수신할 수 있습니다. 공유 구독을 사용하려면 클라이언트가 공유 구독의 [주제 필터](https://docs.aws.amazon.com//iot/latest/developerguide/topics.html#topicfilters)를 구독합니다. `$share/{ShareName}/{TopicFilter}` 

**정책을 설정하고 공유 구독 예시를 실행하는 방법**

1. 공유 구독 예시를 실행하려면 [MQTT 5 공유 구독](https://github.com/aws/aws-iot-device-sdk-python-v2/blob/main/samples/mqtt5_shared_subscription.md#mqtt5-shared-subscription)에 설명된 대로 사물 정책을 설정해야 합니다.

1. 공유 구독 예시를 실행하려면 다음 명령을 실행합니다.

------
#### [ Linux/macOS ]

**Linux/macOS에서 샘플 스크립트를 실행하려면**

   1. 명령줄 창에서 다음 명령을 사용하여 SDK가 만든 `~/aws-iot-device-sdk-python-v2/samples` 디렉터리로 이동합니다.

      ```
      cd ~/aws-iot-device-sdk-python-v2/samples
      ```

   1. 명령줄 창에서 *your-iot-endpoint*를 표시된 대로 바꾸고 다음 명령을 실행합니다.

      ```
      python3 mqtt5_shared_subscription.py --endpoint your-iot-endpoint --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --group_identifier consumer
      ```

------
#### [ Windows ]

**Windows PC에서 샘플 앱을 실행하려면**

   1. 명령줄 창에서 다음 명령을 사용하여 SDK가 만든 `%USERPROFILE%\aws-iot-device-sdk-python-v2\samples` 디렉터리로 이동하고 샘플 앱을 설치합니다.

      ```
      cd %USERPROFILE%\aws-iot-device-sdk-python-v2\samples
      ```

   1. 명령줄 창에서 *your-iot-endpoint*를 표시된 대로 바꾸고 다음 명령을 실행합니다.

      ```
      python3 mqtt5_shared_subscription.py --endpoint your-iot-endpoint --ca_file %USERPROFILE%\certs\Amazon-root-CA-1.pem --cert %USERPROFILE%\certs\device.pem.crt --key %USERPROFILE%\certs\private.pem.key --group_identifier consumer
      ```

------
**참고**  
샘플을 실행할 때 필요에 따라 그룹 식별자를 선택적으로 지정할 수 있습니다(예: `--group_identifier consumer`). 지정하지 않는 경우 `python-sample`이 기본 그룹 식별자입니다.

1. 명령줄의 출력은 다음과 같을 수 있습니다.

   ```
   Publisher]: Lifecycle Connection Success
   [Publisher]: Connected
   Subscriber One]: Lifecycle Connection Success
   [Subscriber One]: Connected
   Subscriber Two]: Lifecycle Connection Success
   [Subscriber Two]: Connected
   [Subscriber One]: Subscribed to topic 'test/topic' in shared subscription group 'consumer'.
   [Subscriber One]: Full subscribed topic is: '$share/consumer/test/topic' with SubAck code: [<SubackReasonCode.GRANTED_QOS_1: 1>]
   [Subscriber Two]: Subscribed to topic 'test/topic' in shared subscription group 'consumer'.
   [Subscriber Two]: Full subscribed topic is: '$share/consumer/test/topic' with SubAck code: [<SubackReasonCode.GRANTED_QOS_1: 1>]
   [Publisher]: Sent publish and got PubAck code: <PubackReasonCode.SUCCESS: 0>
   [Subscriber Two] Received a publish
           Publish received message on topic: test/topic
           Message: b'"Hello World!  [1]"'
   [Publisher]: Sent publish and got PubAck code: <PubackReasonCode.SUCCESS: 0>
   [Subscriber One] Received a publish
           Publish received message on topic: test/topic
           Message: b'"Hello World!  [2]"'
   [Publisher]: Sent publish and got PubAck code: <PubackReasonCode.SUCCESS: 0>
   [Subscriber Two] Received a publish
           Publish received message on topic: test/topic
           Message: b'"Hello World!  [3]"'
   [Publisher]: Sent publish and got PubAck code: <PubackReasonCode.SUCCESS: 0>
   [Subscriber One] Received a publish
           Publish received message on topic: test/topic
           Message: b'"Hello World!  [4]"'
   [Publisher]: Sent publish and got PubAck code: <PubackReasonCode.SUCCESS: 0>
   [Subscriber Two] Received a publish
           Publish received message on topic: test/topic
           Message: b'"Hello World!  [5]"'
   [Publisher]: Sent publish and got PubAck code: <PubackReasonCode.SUCCESS: 0>
   [Subscriber One] Received a publish
           Publish received message on topic: test/topic
           Message: b'"Hello World!  [6]"'
   [Publisher]: Sent publish and got PubAck code: <PubackReasonCode.SUCCESS: 0>
   [Subscriber Two] Received a publish
           Publish received message on topic: test/topic
           Message: b'"Hello World!  [7]"'
   [Publisher]: Sent publish and got PubAck code: <PubackReasonCode.SUCCESS: 0>
   [Subscriber One] Received a publish
           Publish received message on topic: test/topic
           Message: b'"Hello World!  [8]"'
   [Publisher]: Sent publish and got PubAck code: <PubackReasonCode.SUCCESS: 0>
   [Subscriber Two] Received a publish
           Publish received message on topic: test/topic
           Message: b'"Hello World!  [9]"'
   [Publisher]: Sent publish and got PubAck code: <PubackReasonCode.SUCCESS: 0>
   [Subscriber One] Received a publish
           Publish received message on topic: test/topic
           Message: b'"Hello World!  [10]"'
   [Subscriber One]: Unsubscribed to topic 'test/topic' in shared subscription group 'consumer'.
   [Subscriber One]: Full unsubscribed topic is: '$share/consumer/test/topic' with UnsubAck code: [<UnsubackReasonCode.SUCCESS: 0>]
   [Subscriber Two]: Unsubscribed to topic 'test/topic' in shared subscription group 'consumer'.
   [Subscriber Two]: Full unsubscribed topic is: '$share/consumer/test/topic' with UnsubAck code [<UnsubackReasonCode.SUCCESS: 0>]
   Publisher]: Lifecycle Disconnected
   [Publisher]: Lifecycle Stopped
   [Publisher]: Fully stopped
   Subscriber One]: Lifecycle Disconnected
   [Subscriber One]: Lifecycle Stopped
   [Subscriber One]: Fully stopped
   Subscriber Two]: Lifecycle Disconnected
   [Subscriber Two]: Lifecycle Stopped
   [Subscriber Two]: Fully stopped
   Complete!
   ```

1. **AWS IoT 콘솔**에서 **MQTT 테스트 클라이언트**를 엽니다. **주제 구독**에서 `$share/consumer/test/topic`과 같은 공유 구독 주제를 구독하세요. 샘플을 실행할 때 필요에 따라 그룹 식별자를 지정할 수 있습니다(예: `--group_identifier consumer`). 그룹 식별자를 지정하지 않는 경우 기본값은 `python-sample`입니다. 자세한 내용은 **AWS IoT Core 개발자 안내서의 [MQTT 5 공유 구독 Python 예시](https://github.com/aws/aws-iot-device-sdk-python-v2/blob/main/samples/mqtt5_shared_subscription.md#mqtt5-shared-subscription) 및 [공유 구독](mqtt.md#mqtt5-shared-subscription)을 참조하세요.

   명령줄 창에서 샘플 앱을 다시 실행하고 **AWS IoT 콘솔** 및 명령줄의 **MQTT 테스트 클라이언트**에서 메시지 배포를 확인합니다.  
![\[공유 구독 출력 페이지입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/shared-subscription-output.png)

# Raspberry Pi 또는 다른 디바이스 연결
<a name="connecting-to-existing-device"></a>

이 섹션에서는와 함께 사용할 Raspberry Pi를 구성합니다 AWS IoT. 연결하려는 다른 디바이스가 있는 경우 Raspberry Pi에 대한 지침에는 이러한 지침을 디바이스에 적용하는 데 도움이 되는 참조가 포함되어 있습니다.

이 작업은 일반적으로 20분 정도 소요되지만 시스템 소프트웨어 업그레이드가 많은 경우 더 오래 걸릴 수 있습니다.

**Topics**
+ [디바이스 설정](#gs-device-prereqs)
+ [AWS IoT Device SDK에 필요한 도구 및 라이브러리 설치](#gs-device-sdk-tools)
+ [AWS IoT 디바이스 SDK 설치](#gs-device-install-sdk)
+ [샘플 앱 설치 및 실행](#gs-device-node-app-run)
+ [AWS IoT 콘솔에서 샘플 앱의 메시지 보기](#gs-device-view-msg)

**중요**  
이러한 지침을 다른 디바이스 및 운영 체제에 적용하는 것은 어려울 수 있습니다. 이러한 지침을 해석하고 디바이스에 적용할 수 있을 만큼 디바이스를 잘 이해해야 합니다.  
디바이스를 구성하는 동안 문제가 발생하는 경우 [Amazon EC2를 사용하여 가상 디바이스 생성](creating-a-virtual-thing.md) 또는와 같은 다른 디바이스 옵션 중 하나를 대안으로 시도 AWS IoT할 수 있습니다[Windows 또는 Linux PC 또는 Mac을 AWS IoT 디바이스로 사용](using-laptop-as-device.md).

## 디바이스 설정
<a name="gs-device-prereqs"></a>

이 단계의 목표는 운영 체제(OS)를 시작하고 인터넷에 연결하며 명령줄 인터페이스에서 디바이스와 상호 작용할 수 있도록 디바이스를 구성하는 데 필요한 항목을 수집하는 것입니다.

이 자습서를 완료하려면 다음이 필요합니다.
+  AWS 계정. 없는 경우 계속하기 전에 [설정 AWS 계정](setting-up.md)에서 설명하는 단계를 완료하세요.
+ [Raspberry Pi 3 Model B](https://www.raspberrypi.com/products/) 또는 최신 모델. 이 기능은 이전 버전의 Raspberry Pi에서 작동할 수 있지만 테스트되지 않았습니다.
+ [Raspberry Pi OS(32비트)](https://www.raspberrypi.com/software/operating-systems/) 이상. 최신 버전의 Raspberry OS를 사용하는 것이 좋습니다. 이전 버전의 OS는 작동하지만 테스트되지 않았습니다.

  이 예제를 실행하가 위해 GUI(그래픽 사용자 인터페이스)가 있는 데스크톱을 설치할 필요는 없지만, Raspberry Pi에 익숙하지 않고 Raspberry Pi 하드웨어가 GUI가 있는 데스크톱을 지원한다면 GUI가 있는 데스크탑을 사용하는 것이 더 쉬울 수 있습니다.
+ 이더넷 또는 Wi-Fi 연결.
+ 키보드, 마우스, 모니터, 케이블, 전원 공급 장치, 및 디바이스에 필요한 기타 하드웨어.

**중요**  
다음 단계를 진행하기 전에 디바이스에 운영 체제가 설치, 구성 및 실행되어야 합니다. 디바이스가 인터넷에 연결되어 있어야 하며 명령줄 인터페이스를 사용하여 디바이스에 액세스할 수 있어야 합니다. 명령줄 액세스는 직접 연결된 키보드, 마우스 및 모니터를 통해 또는 SSH 터미널 원격 인터페이스를 사용하여 수행할 수 있습니다.

 그래픽 사용자 인터페이스(GUI)가 있는 Raspberry Pi에서 운영 체제를 실행 중인 경우 디바이스에서 터미널 창을 열고 해당 창에서 다음 지침을 수행합니다. 그렇지 않고 PuTTY와 같은 원격 터미널을 사용하여 디바이스에 연결하는 경우 디바이스에 대한 원격 터미널을 열고 사용하세요.

## AWS IoT Device SDK에 필요한 도구 및 라이브러리 설치
<a name="gs-device-sdk-tools"></a>

 AWS IoT 디바이스 SDK 및 샘플 코드를 설치하기 전에 시스템이 최신 상태이고 SDKs를 설치하는 데 필요한 도구와 라이브러리가 있는지 확인합니다.

1. 

**운영 체제 업데이트 및 필수 라이브러리 설치**  
 AWS IoT 디바이스 SDK를 설치하기 전에 디바이스의 터미널 창에서이 명령을 실행하여 운영 체제를 업데이트하고 필요한 라이브러리를 설치합니다.

   ```
   sudo apt-get update
   ```

   ```
   sudo apt-get upgrade
   ```

   ```
   sudo apt-get install cmake
   ```

   ```
   sudo apt-get install libssl-dev
   ```

1. 

**Git 설치**  
디바이스의 운영 체제에 Git이 설치되어 있지 않은 경우 이를 설치하여 AWS IoT Device SDK for JavaScript를 설치해야 합니다.

   1. 다음 명령을 실행하여 Git가 이미 설치되었는지 테스트합니다.

      ```
      git --version
      ```

   1. 앞의 명령이 Git 버전을 반환하면 Git가 이미 설치되어 있는 것이므로, 3단계로 건너뛸 수 있습니다.

   1. **git** 명령을 실행할 때 오류가 표시되는 경우 다음 명령을 실행하여 Git를 설치하세요.

      ```
      sudo apt-get install git
      ```

   1. 다음 명령을 실행하여 Git가 이미 설치되었는지 다시 테스트합니다.

      ```
      git --version
      ```

   1. Git가 설치된 경우 다음 섹션을 진행합니다. 그렇지 않은 경우 계속하기 전에 문제를 해결하고 오류를 수정하세요. AWS IoT Device SDK for JavaScript를 설치하려면 Git이 필요합니다.

## AWS IoT 디바이스 SDK 설치
<a name="gs-device-install-sdk"></a>

 AWS IoT 디바이스 SDK를 설치합니다.

------
#### [ Python ]

이 단원에서는 Python, 개발 도구 및 AWS IoT Device SDK for Python을 디바이스에 설치합니다. 이 지침은 최신 Raspberry Pi OS를 실행하는 Raspberry Pi에 대한 것입니다. 다른 디바이스가 있거나 다른 운영 체제를 사용하는 경우 디바이스에 다음 지침을 적용해야 합니다.

1. 

**Python과 개발 도구 설치**  
Python용 AWS IoT 디바이스 SDK를 사용하려면 Raspberry Pi에 Python v3.5 이상을 설치해야 합니다.

   디바이스의 터미널 창에서 다음 명령을 실행합니다.

   1. 다음 명령을 실행하여 디바이스에 설치된 Python의 버전을 확인합니다.

      ```
      python3 --version
      ```

      Python이 설치되어 있는 경우, 해당 버전이 표시됩니다.

   1. 표시된 버전이 `Python 3.5` 이상인 경우 2단계로 건너뛸 수 있습니다.

   1. 표시된 버전이 `Python 3.5`보다 작은 경우 다음 명령을 실행하여 올바른 버전을 설치할 수 있습니다.

      ```
      sudo apt install python3
      ```

   1. 다음 명령을 실행하여 올바른 버전의 Python이 설치되었는지 확인합니다.

      ```
      python3 --version
      ```

1. 

**pip3에 대한 테스트**  
디바이스의 터미널 창에서 다음 명령을 실행합니다.

   1. **pip3**가 설치되어 있으면 다음 명령을 실행합니다.

      ```
      pip3 --version
      ```

   1. 명령이 버전 번호를 반환하면 **pip3**이(가) 설치되어 있는 것이므로, 3단계로 건너뛸 수 있습니다.

   1. 앞의 명령이 오류를 반환하면 다음 명령을 실행하여 **pip3**을(를) 설치합니다.

      ```
      sudo apt install python3-pip
      ```

   1. **pip3**가 설치되어 있으면 다음 명령을 실행합니다.

      ```
      pip3 --version
      ```

1. 

**현재 AWS IoT Device SDK for Python 설치**  
 AWS IoT Device SDK for Python을 설치하고 샘플 앱을 디바이스에 다운로드합니다.

   디바이스에서 다음 명령을 실행합니다.

   ```
   cd ~
   python3 -m pip install awsiotsdk
   ```

   ```
   git clone https://github.com/aws/aws-iot-device-sdk-python-v2.git
   ```

------
#### [ JavaScript ]

이 섹션에서는 디바이스에 Node.js, npm 패키지 관리자 및 JavaScript용 AWS IoT 디바이스 SDK를 설치합니다. 이 지침은 Raspberry Pi OS를 실행하는 Raspberry Pi에 대한 것입니다. 다른 디바이스가 있거나 다른 운영 체제를 사용하는 경우 디바이스에 다음 지침을 적용해야 합니다.

1. 

**최신 버전의 Node.js 설치**  
JavaScript용 AWS IoT 디바이스 SDK를 사용하려면 Raspberry Pi에 Node.js와 npm 패키지 관리자를 설치해야 합니다.

   1. 다음 명령을 입력하여 노드 리포지토리의 최신 버전을 다운로드합니다.

      ```
      cd ~
      curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
      ```

   1. 노드와 npm을 설치합니다.

      ```
      sudo apt-get install -y nodejs
      ```

   1. 노드 설치를 확인합니다.

      ```
      node -v
      ```

      명령에 노드 버전이 표시되는지 확인합니다. 이 자습서에서는 Node v10.0 이상이 필요합니다. 노드 버전이 표시되지 않으면 노드 리포지토리를 다시 다운로드해 보세요.

   1. npm 설치를 확인합니다.

      ```
      npm -v
      ```

      명령이 npm 버전을 표시하는지 확인합니다. npm 버전이 표시되지 않으면 노드와 npm을 다시 설치하세요.

   1. 디바이스를 다시 시작합니다.

      ```
      sudo shutdown -r 0
      ```

      디바이스가 다시 시작된 후 계속하세요.

1. 

**AWS IoT Device SDK for JavaScript 설치**  
Raspberry Pi에 AWS IoT Device SDK for JavaScript를 설치합니다.

   1.  AWS IoT Device SDK for JavaScript 리포지토리를 *홈* `aws-iot-device-sdk-js-v2` 디렉터리의 디렉터리에 복제합니다. Raspberry Pi에서 *홈* 디렉터리는 `~/`이고, 이는 다음 명령의 *홈* 디렉터리로 사용됩니다. 디바이스가 *홈* 디렉터리의 다른 경로를 사용하는 경우 다음 명령에서 `~/`을(를) 디바이스의 올바른 경로로 바꾸세요.

      이러한 명령은 `~/aws-iot-device-sdk-js-v2` 디렉터리를 만들고 여기에 SDK 코드를 복사해 넣습니다.

      ```
      cd ~
      git clone https://github.com/aws/aws-iot-device-sdk-js-v2.git
      ```

   1. 이전 단계에서 생성한 `aws-iot-device-sdk-js-v2` 디렉터리로 변경하고 `npm install` 명령을 실행하여 SDK를 설치합니다. `npm install` 명령은 `aws-crt` 라이브러리 빌드를 호출합니다(완료하는 데 몇 분 정도 걸릴 수 있음).

      ```
      cd ~/aws-iot-device-sdk-js-v2
      npm install
      ```

------

## 샘플 앱 설치 및 실행
<a name="gs-device-node-app-run"></a>

이 섹션에서는 AWS IoT 디바이스 SDK에 있는 `pubsub` 샘플 앱을 설치하고 실행합니다. 이 앱은 디바이스가 MQTT 라이브러리를 사용하여 MQTT 메시지를 게시 및 구독하는 방법을 보여줍니다. 샘플 앱은 `topic_1` 주제를 구독하고, 해당 주제에 10개의 메시지를 게시하고, 메시지 브로커로부터 받은 메시지를 표시합니다.

**인증서 파일 설치**  
샘플 앱에서는 디바이스를 인증하는 인증서 파일을 디바이스에 설치해야 합니다.

**샘플 앱에 대한 디바이스 인증서 파일을 설치하려면**

1. 다음 명령을 사용하여 *홈* 디렉터리에 `certs` 하위 디렉터리를 만듭니다.

   ```
   cd ~
   mkdir certs
   ```

1. [AWS IoT 리소스 생성](create-iot-resources.md)에서 생성한 프라이빗 키, 디바이스 인증서 및 루트 CA 인증서를 `~/certs` 디렉터리에 복사합니다.

   인증서 파일을 디바이스에 복사하는 방법은 디바이스 및 운영 체제에 따라 다르며 여기서는 설명하지 않습니다. 그러나 디바이스가 그래픽 사용자 인터페이스(GUI)를 지원하고 웹 브라우저를 사용하는 경우 디바이스의 웹 브라우저에서 [AWS IoT 리소스 생성](create-iot-resources.md)에 설명된 절차를 수행하여 결과 파일을 디바이스에 직접 다운로드할 수 있습니다.

   다음 섹션의 명령은 이 표에 표시된 대로 키 및 인증서 파일이 디바이스에 저장되어 있다고 가정합니다.  
**인증서 파일 이름**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/connecting-to-existing-device.html)

샘플 앱을 실행하려면 다음 정보가 필요합니다.


**애플리케이션 파라미터 값**  

|  파라미터  |  값을 찾을 수 있는 위치  | 
| --- | --- | 
| your-iot-endpoint |  [AWS IoT 콘솔](https://console.aws.amazon.com/iot/home)에서 **All devices**(모든 디바이스)를 선택한 다음 **Things**(사물)를 선택합니다.  AWS IoT 메뉴의 **설정** 페이지입니다. 엔드포인트는 **디바이스 데이터 엔드포인트(Device data endpoint)** 섹션에 표시됩니다.  | 

*your-iot-endpoint* 값의 형식은 `endpoint_id-ats.iot.region.amazonaws.com`(예: `a3qj468EXAMPLE-ats.iot.us-west-2.amazonaws.com`)입니다.

------
#### [ Python ]

**샘플 앱을 설치하고 실행하려면**

1. 샘플 앱 디렉터리로 이동합니다.

   ```
   cd ~/aws-iot-device-sdk-python-v2/samples
   ```

1. 명령줄 창에서 *your-iot-endpoint*를 표시된 대로 바꾸고 다음 명령을 실행합니다.

   ```
   python3 pubsub.py --topic topic_1 --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpoint your-iot-endpoint
   ```

1. 샘플 앱에서 다음 사항을 확인합니다.

   1. 계정의 AWS IoT 서비스에 연결합니다.

   1. 메시지 주제 **topic\$11**을 구독하고 해당 주제에 대해 수신하는 메시지 표시.

   1. **topic\$11** 주제에 10개의 메시지 게시.

   1. 다음과 유사한 출력 표시.

   ```
   Connecting to a3qEXAMPLEffp-ats.iot.us-west-2.amazonaws.com with client ID 'test-0c8ae2ff-cc87-49d2-a82a-ae7ba1d0ca5a'...
   Connected!
   Subscribing to topic 'topic_1'...
   Subscribed with QoS.AT_LEAST_ONCE
   Sending 10 message(s)
   Publishing message to topic 'topic_1': Hello World! [1]
   Received message from topic 'topic_1': b'Hello World! [1]'
   Publishing message to topic 'topic_1': Hello World! [2]
   Received message from topic 'topic_1': b'Hello World! [2]'
   Publishing message to topic 'topic_1': Hello World! [3]
   Received message from topic 'topic_1': b'Hello World! [3]'
   Publishing message to topic 'topic_1': Hello World! [4]
   Received message from topic 'topic_1': b'Hello World! [4]'
   Publishing message to topic 'topic_1': Hello World! [5]
   Received message from topic 'topic_1': b'Hello World! [5]'
   Publishing message to topic 'topic_1': Hello World! [6]
   Received message from topic 'topic_1': b'Hello World! [6]'
   Publishing message to topic 'topic_1': Hello World! [7]
   Received message from topic 'topic_1': b'Hello World! [7]'
   Publishing message to topic 'topic_1': Hello World! [8]
   Received message from topic 'topic_1': b'Hello World! [8]'
   Publishing message to topic 'topic_1': Hello World! [9]
   Received message from topic 'topic_1': b'Hello World! [9]'
   Publishing message to topic 'topic_1': Hello World! [10]
   Received message from topic 'topic_1': b'Hello World! [10]'
   10 message(s) received.
   Disconnecting...
   Disconnected!
   ```

   샘플 앱을 실행하는 데 문제가 있는 경우 [샘플 애플리케이션 문제 해결](gs-device-troubleshoot.md)를 검토합니다.

   샘플 앱이 수행 중인 작업에 대한 자세한 메시지를 표시하도록 명령줄에 `--verbosity Debug` 파라미터를 추가할 수도 있습니다. 이 정보는 문제를 해결하는 데 필요한 도움을 제공할 수 있습니다.

------
#### [ JavaScript ]

**샘플 앱을 설치하고 실행하려면**

1. 명령줄 창에서 다음 명령을 사용하여 SDK가 만든 `~/aws-iot-device-sdk-js-v2/samples/node/pub_sub` 디렉터리로 이동하고 샘플 앱을 설치합니다. `npm install` 명령은 `aws-crt` 라이브러리 빌드를 호출합니다(완료하는 데 몇 분 정도 걸릴 수 있음).

   ```
   cd ~/aws-iot-device-sdk-js-v2/samples/node/pub_sub
   npm install
   ```

1. 명령줄 창에서 *your-iot-endpoint*를 표시된 대로 바꾸고 다음 명령을 실행합니다.

   ```
   node dist/index.js --topic topic_1 --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpoint your-iot-endpoint
   ```

1. 샘플 앱에서 다음 사항을 확인합니다.

   1. 계정의 AWS IoT 서비스에 연결합니다.

   1. 메시지 주제 **topic\$11**을 구독하고 해당 주제에 대해 수신하는 메시지 표시.

   1. **topic\$11** 주제에 10개의 메시지 게시.

   1. 다음과 유사한 출력 표시.

   ```
   Publish received on topic topic_1
   {"message":"Hello world!","sequence":1}
   Publish received on topic topic_1
   {"message":"Hello world!","sequence":2}
   Publish received on topic topic_1
   {"message":"Hello world!","sequence":3}
   Publish received on topic topic_1
   {"message":"Hello world!","sequence":4}
   Publish received on topic topic_1
   {"message":"Hello world!","sequence":5}
   Publish received on topic topic_1
   {"message":"Hello world!","sequence":6}
   Publish received on topic topic_1
   {"message":"Hello world!","sequence":7}
   Publish received on topic topic_1
   {"message":"Hello world!","sequence":8}
   Publish received on topic topic_1
   {"message":"Hello world!","sequence":9}
   Publish received on topic topic_1
   {"message":"Hello world!","sequence":10}
   ```

   샘플 앱을 실행하는 데 문제가 있는 경우 [샘플 애플리케이션 문제 해결](gs-device-troubleshoot.md)를 검토합니다.

   샘플 앱이 수행 중인 작업에 대한 자세한 메시지를 표시하도록 명령줄에 `--verbosity Debug` 파라미터를 추가할 수도 있습니다. 이 정보는 문제를 해결하는 데 필요한 도움을 제공할 수 있습니다.

------

## AWS IoT 콘솔에서 샘플 앱의 메시지 보기
<a name="gs-device-view-msg"></a>

**AWS IoT 콘솔**에서 **MQTT 테스트 클라이언트**를 사용하여, 샘플 앱의 메시지가 메시지 브로커를 통과할 때 해당 메시지를 볼 수 있습니다.

**샘플 앱에서 게시한 MQTT 메시지를 보려면**

1. [MQTT 클라이언트를 사용하여 AWS IoT MQTT 메시지 보기](view-mqtt-messages.md)을(를) 검토합니다. 이는 MQTT 메시지가 메시지 브로커를 통과할 때 해당 메시지를 보기 위해 **AWS IoT 콘솔**에서 **MQTT 테스트 클라이언트**를 사용하는 방법을 파악하는 데 도움이 됩니다.

1. **AWS IoT 콘솔**에서 **MQTT 테스트 클라이언트**를 엽니다.

1. **topic\$11** 주제를 구독합니다.

1. 명령줄 창에서 샘플 앱을 다시 실행하고 **AWS IoT 콘솔**의 **MQTT 클라이언트**에서 메시지를 확인합니다.

------
#### [ Python ]

   ```
   cd ~/aws-iot-device-sdk-python-v2/samples
   python3 pubsub.py --topic topic_1 --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpoint your-iot-endpoint
   ```

------
#### [ JavaScript ]

   ```
   cd ~/aws-iot-device-sdk-js-v2/samples/node/pub_sub
   node dist/index.js --topic topic_1 --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpoint your-iot-endpoint
   ```

------

# 샘플 애플리케이션 문제 해결
<a name="gs-device-troubleshoot"></a>

샘플 앱을 실행하려고 할 때 오류가 발생하는 경우 다음과 같이 확인할 수 있습니다.

## 인증서 확인
<a name="gs-device-ts-step-1"></a>

인증서가 활성화되지 않은 경우 AWS IoT 는 인증에 사용하는 연결 시도를 수락하지 않습니다. 인증서를 만들 때 **활성화(Activate)** 버튼을 간과하기가 쉽습니다. 다행히 [AWS IoT 콘솔](https://console.aws.amazon.com/iot/home)에서 인증서를 활성화할 수 있습니다.

**인증서의 활성화를 확인하려면**

1. [AWS IoT 콘솔](https://console.aws.amazon.com/iot/home)의 왼쪽 메뉴에서 **보안(Secure)**을 선택한 다음 **인증서**를 선택합니다.

1. 인증서 목록에서 실습을 위해 생성한 인증서를 찾고 **상태** 열에서 상태를 확인합니다.

   인증서의 이름이 기억나지 않는 경우 **비활성** 상태인 항목이 있는지 확인하여 사용 중인 항목인지 확인하세요.

   목록에서 인증서를 선택하여 세부 정보 페이지를 엽니다. 세부 정보 페이지에서 인증서를 식별하는 데 도움이 되는 **생성 날짜**를 볼 수 있습니다.

1. **비활성 인증서를 활성화하려면** 인증서의 세부 정보 페이지에서 **작업**을 선택한 다음 **활성화**를 선택합니다.

활성 상태인 올바른 인증서를 찾았지만 샘플 앱을 실행하는 데 여전히 문제가 있는 경우 다음 단계에서 설명하는 대로 해당 정책을 확인하세요.

[사물 객체 만들기](create-iot-resources.md#create-aws-thing)의 단계에 따라 새 사물과 새 인증서를 만들 수도 있습니다. 새로운 사물을 만드는 경우 새 사물 이름을 지정하고 새 인증서 파일을 디바이스에 다운로드해야 합니다.

## 인증서에 연결된 정책 확인
<a name="gs-device-ts-step-2"></a>

정책은의 작업을 승인합니다 AWS IoT. AWS IoT 에 연결하는 데 사용된 인증서에 정책이 없거나 연결을 허용하는 정책이 없으면 인증서가 활성 상태인 경우에도 연결이 거부됩니다.

**인증서에 연결된 정책을 확인하려면**

1. 이전 항목에 설명된 대로 인증서를 찾아 세부 정보 페이지를 엽니다.

1. 인증서 세부 정보 페이지의 왼쪽 메뉴에서 **정책**을 선택하고 인증서에 연결된 정책을 봅니다.

1. 인증서에 연결된 정책이 없는 경우 **작업** 메뉴를 선택한 다음 **정책 연결**을 선택하여 정책을 추가합니다.

   [AWS IoT 리소스 생성](create-iot-resources.md)에서 이전에 생성한 정책을 선택합니다.

1. 연결된 정책이 있는 경우 정책 타일을 선택하여 해당 세부 정보 페이지를 엽니다.

   세부 정보 페이지에서 **정책 문서**를 검토하여 [AWS IoT 정책 생성](create-iot-resources.md#create-iot-policy)에서 생성한 것과 동일한 정보가 포함되어 있는지 확인합니다.

## 명령줄 확인
<a name="gs-device-ts-step-3"></a>

시스템에 맞는 명령줄을 사용했는지 확인하세요. Linux 및 macOS 시스템에서 사용되는 명령은 Windows 시스템에서 사용되는 명령과 다른 경우가 많습니다.

## 엔드포인트 주소 확인
<a name="gs-device-ts-step-4"></a>

입력한 명령을 검토하고 명령의 엔드포인트 주소가 [AWS IoT 콘솔](https://console.aws.amazon.com/iot/home)의 엔드포인트 주소와 일치하는지 다시 확인하세요.

## 인증서 파일의 파일 이름 확인
<a name="gs-device-ts-step-5"></a>

입력한 명령의 파일 이름을 `certs` 디렉터리에 있는 인증서 파일의 파일 이름과 비교합니다.

일부 시스템에서는 제대로 작동하려면 파일 이름을 따옴표로 묶어야 할 수 있습니다.

## SDK 설치 확인
<a name="gs-device-ts-step-6"></a>

SDK 설치가 완전하고 올바른지 확인하세요.

의심스러운 경우 디바이스에 SDK를 다시 설치합니다. 대부분의 경우 ** **SDK 언어**용 AWS IoT 디바이스 SDK 설치**라는 자습서의 섹션을 찾고 절차를 다시 따르는 것이 중요합니다.

**JavaScript용AWS IoT 디바이스 SDK**를 사용하는 경우 샘플 앱을 실행하기 전에 샘플 앱을 먼저 설치해야 합니다. SDK를 설치해도 샘플 앱은 자동으로 설치되지 않습니다. SDK를 설치한 후 샘플 앱을 수동으로 설치해야 합니다.