

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

# 자습서: Device SDK를 AWS IoT Core 사용하여에 AWS IoT 디바이스 연결
<a name="sdk-tutorials"></a>

이 자습서에서는 데이터를 주고 받을 수 AWS IoT Core 있도록 디바이스를에 연결하는 방법을 보여줍니다 AWS IoT. 이 자습서를 완료하면 디바이스가에 연결되도록 구성 AWS IoT Core 되고 디바이스가 통신하는 방식을 이해할 수 있습니다 AWS IoT.

**Topics**
+ [필수 조건](#sdk-tutorials-prereq)
+ [용 디바이스 준비 AWS IoT](#sdk-tutorials-prepare)
+ [MQTT 프로토콜 검토](#sdk-tutorials-mqtt-review)
+ [pubsub.py Device SDK 샘플 앱 검토](#sdk-tutorials-explore-sample)
+ [디바이스 연결 및와 통신 AWS IoT Core](#sdk-tutorials-experiment)
+ [결과 검토](#sdk-tutorials-conclusion)
+ [자습서: AWS IoT Device SDK for Embedded C 사용](iot-embedded-c-sdk.md)

## 필수 조건
<a name="sdk-tutorials-prereq"></a>

이 자습서를 시작하기 전에 다음 사항을 준비해야 합니다.
+ 

**[AWS IoT Core 자습서 시작하기](iot-gs.md) 완료**  
[디바이스 구성](configure-device.md)해야 하는 해당 자습서의 섹션에서 디바이스에 대한 [Raspberry Pi 또는 다른 디바이스 연결](connecting-to-existing-device.md) 옵션을 선택하고 Python 언어 옵션을 사용하여 디바이스를 구성합니다.
**참고**  
이 자습서에서도 사용하므로 해당 자습서에서 사용하는 터미널 창을 계속 열어 둡니다.
+ 

**AWS IoT Device SDK v2 for Python을 실행할 수 있는 디바이스입니다.**  
이 자습서에서는 비교적 강력한 디바이스가 필요한 Python 코드 예제를 사용하여 디바이스를 AWS IoT Core 에 연결하는 방법을 보여줍니다. 리소스가 제한된 디바이스로 작업하는 경우 이러한 코드 예제는 해당 디바이스에서 작동하지 않을 수 있습니다. 이 경우 [자습서: AWS IoT Device SDK for Embedded C 사용](iot-embedded-c-sdk.md) 자습서를 통해 더욱 성공적으로 수행할 수 있습니다.
+ 

**디바이스에 연결하는 데 필요한 정보를 얻었습니다.**  
디바이스를 연결하려면 사물 이름 AWS IoT, 호스트 이름 및 포트 번호에 대한 정보가 있어야 합니다.
**참고**  
사용자 지정 인증을 사용하여 디바이스를 AWS IoT Core에 연결할 수도 있습니다. 권한 부여자 Lambda 함수에 전달하는 연결 데이터는 사용하는 프로토콜에 따라 다릅니다.
  + **사물 이름**: 연결하려는 AWS IoT 사물의 이름입니다. 를 디바이스로 AWS IoT 사물로 등록해야 합니다. 자세한 내용은 [를 사용하여 디바이스 관리 AWS IoT](iot-thing-management.md) 단원을 참조하십시오.
  + **호스트 이름**: 계정별 IoT 엔드포인트의 호스트 이름입니다.
  + **포트 번호**: 연결하려는 포트 번호입니다.

   AWS IoT Python SDK의 `configureEndpoint` 메서드를 사용하여 호스트 이름과 포트 번호를 구성할 수 있습니다.

  ```
  myAWSIoTMQTTClient.configureEndpoint("random.iot.region.amazonaws.com", 8883)
  ```

## 용 디바이스 준비 AWS IoT
<a name="sdk-tutorials-prepare"></a>

[AWS IoT Core 자습서 시작하기](iot-gs.md)에서는 디바이스와 AWS 계정이 통신할 수 있도록 준비했습니다. 이 섹션에서는 모든 디바이스 연결에 적용되는 준비의 측면을 검토합니다 AWS IoT Core.

디바이스가 AWS IoT Core에 연결하려면 다음 사항이 필요합니다.

1. **AWS 계정**이 있어야 합니다.

   의 절차에서는 아직 생성하지 않은 AWS 계정 경우를 생성하는 방법을 [설정 AWS 계정](setting-up.md) 설명합니다.

1. 해당 계정에서는 AWS 계정 및 리전의 디바이스에 대해 다음과 같은 **AWS IoT 리소스**가 정의되어 있어야 합니다.

   [AWS IoT 리소스 생성](create-iot-resources.md)의 절차에서는 AWS 계정 및 리전의 디바이스에 대해 이러한 리소스를 생성하는 방법을 설명합니다.
   +  AWS IoT 에 등록되고 디바이스 인증을 위해 활성화된 **디바이스 인증서**.

     인증서는 종종 **AWS IoT 사물 객체**와 함께 만들어지고 연결됩니다. 디바이스를 연결하는 데 사물 객체는 필요하지 않지만 디바이스 AWS IoT에서 추가 AWS IoT 기능을 사용할 수 있습니다.
   + 디바이스 인증서에 연결된 **정책**으로,에 연결하고 원하는 모든 작업을 AWS IoT Core 수행할 수 있는 권한을 부여합니다.

1.  AWS 계정의 디바이스 엔드포인트에 액세스할 수 있는 **인터넷 연결**.

   디바이스 엔드포인트는에 설명되어 [AWS IoT 디바이스 데이터 및 서비스 엔드포인트](iot-connect-devices.md#iot-connect-device-endpoints) 있으며 [AWS IoT 콘솔의 설정 페이지에서](https://console.aws.amazon.com/iot/home#/settings) 확인할 수 있습니다.

1.  AWS IoT Device SDK와 같은 **통신 소프트웨어**. 이 자습서에서는 [AWS IoT 디바이스 SDK v2 for Python](https://github.com/aws/aws-iot-device-sdk-python-v2#aws-iot-device-sdk-v2-for-python)을 사용합니다.

## MQTT 프로토콜 검토
<a name="sdk-tutorials-mqtt-review"></a>

샘플 앱에 대해 이야기하기 전에 MQTT 프로토콜을 이해하는 것이 도움이 됩니다. MQTT 프로토콜은 HTTP 등의 다른 네트워크 통신 프로토콜에 비해 몇 가지 이점을 제공하므로 IoT 디바이스에서 널리 사용됩니다. 이 섹션에서는 이 자습서에 적용되는 MQTT의 주요 측면을 검토합니다. MQTTT를 HTTP와 비교하는 방법에 대한 자세한 내용은 [디바이스 통신을 위한 애플리케이션 프로토콜 선택](protocols.md#protocol-selection) 단원을 참조하세요.

**MQTT는 게시/구독 통신 모델을 사용합니다.**  
MQTT 프로토콜은 호스트와 게시/구독 통신 모델을 사용합니다. 이 모델은 HTTP가 사용하는 요청/응답 모델과 다릅니다. MQTT를 사용하면 디바이스가 고유한 클라이언트 ID로 식별되는 호스트와의 세션을 설정합니다. 데이터를 전송하기 위해 디바이스는 주제별로 식별되는 메시지를 호스트의 메시지 브로커에 게시합니다. 메시지 브로커로부터 메시지를 수신하기 위해 디바이스는 구독 요청의 주제 필터를 메시지 브로커에 전송하여 주제를 구독합니다.

**영구 세션을 지원하는 MQTT**  
메시지 브로커는 디바이스에서 메시지를 수신하고 해당 디바이스를 구독한 디바이스에 메시지를 게시합니다. [영구 세션](mqtt.md#mqtt-persistent-sessions)(초기 디바이스의 연결이 끊어진 경우에도 활성 상태로 유지되는 세션)을 사용하면 디바이스는 연결이 끊긴 동안 게시된 메시지를 검색할 수 있습니다. 디바이스 측에서 MQTT는 서비스 품질 수준([QoS](mqtt.md#mqtt-qos))를 사용하여 호스트가 디바이스에서 전송한 메시지를 수신하도록 합니다.

## pubsub.py Device SDK 샘플 앱 검토
<a name="sdk-tutorials-explore-sample"></a>

이 섹션에서는 이 자습서에 사용된 **AWS IoT Device SDK v2 for Python**의 `pubsub.py` 샘플 앱을 검토합니다. 여기서는 MQTT 메시지를 게시하고 구독 AWS IoT Core 하기 위해에 연결하는 방법을 살펴보겠습니다. 다음 섹션에서는 디바이스가 어떻게 연결되고 통신하는지 탐색하는 데 도움이 되는 몇 가지 연습을 제공합니다 AWS IoT Core.

**`pubsub.py` 샘플 앱은 AWS IoT Core MQTT 연결의 다음 측면을 보여줍니다.**
+ [통신 프로토콜](#sdk-tutorials-explore-protocols)
+ [영구 세션](#sdk-tutorials-explore-persistent)
+ [서비스 품질](#sdk-tutorials-explore-qos)
+ [메시지 게시](#sdk-tutorials-explore-publish)
+ [메시지 구독](#sdk-tutorials-explore-subscribe)
+ [디바이스 연결 해제 및 재연결](#sdk-tutorials-explore-connect)

### 통신 프로토콜
<a name="sdk-tutorials-explore-protocols"></a>

`pubsub.py` 샘플에서는 MQTT 및 MQTT over WSS 프로토콜을 사용하는 MQTT 연결을 보여 줍니다. [AWS 공통 런타임(AWS CRT)](https://github.com/awslabs/aws-crt-python#aws-crt-python) 라이브러리는 하위 수준의 통신 프로토콜을 지원하며 Python용 AWS IoT Device SDK v2에 포함되어 있습니다.

#### MQTT
<a name="sdk-tutorials-explore-mqtt"></a>

`pubsub.py` 샘플은 MQTT 프로토콜을 AWS IoT Core 사용하여 와의 연결을 설정[https://github.com/awslabs/aws-crt-python/blob/89207bcf1387177034e02fe29e8e469ca45e39b7/awscrt/awsiot_mqtt_connection_builder.py](https://github.com/awslabs/aws-crt-python/blob/89207bcf1387177034e02fe29e8e469ca45e39b7/awscrt/awsiot_mqtt_connection_builder.py)하기 위해에서 `mtls_from_path` (여기에 표시됨)를 호출합니다.는 X.509 인증서 및 TLS v1.2를 `mtls_from_path` 사용하여 디바이스를 인증합니다. AWS CRT 라이브러리는 해당 연결의 하위 수준 세부 정보를 처리합니다.

```
mqtt_connection = mqtt_connection_builder.mtls_from_path(
    endpoint=args.endpoint,
    cert_filepath=args.cert,
    pri_key_filepath=args.key,
    ca_filepath=args.ca_file,
    client_bootstrap=client_bootstrap,
    on_connection_interrupted=on_connection_interrupted,
    on_connection_resumed=on_connection_resumed,
    client_id=args.client_id,
    clean_session=False,
    keep_alive_secs=6
)
```

`endpoint`  
 AWS 계정사용자의 IoT 디바이스 엔드포인트  
샘플 앱에서 이 값은 명령줄에서 전달됩니다.

`cert_filepath`  
디바이스의 인증서 파일 경로  
샘플 앱에서 이 값은 명령줄에서 전달됩니다.

`pri_key_filepath`  
인증서 파일을 사용하여 만든 디바이스의 개인 키 파일에 대한 경로  
샘플 앱에서 이 값은 명령줄에서 전달됩니다.

`ca_filepath`  
루트 CA 파일의 경로. MQTT 서버가 trust store에 없는 인증서를 사용하는 경우에만 필요합니다.  
샘플 앱에서 이 값은 명령줄에서 전달됩니다.

`client_bootstrap`  
소켓 통신 활동을 처리하는 공통 런타임 객체  
샘플 앱에서 이 객체는 `mqtt_connection_builder.mtls_from_path`를 호출하기 전에 인스턴스화됩니다.

`on_connection_interrupted``on_connection_resumed`  
디바이스의 연결이 중단되고 재개될 때 호출할 콜백 함수

`client_id`  
 AWS 리전에서 이 디바이스를 고유하게 식별하는 ID  
샘플 앱에서 이 값은 명령줄에서 전달됩니다.

`clean_session`  
새 영구 세션을 시작할지, 아니면 존재하는 경우 기존 세션에 다시 연결할지 여부

`keep_alive_secs`  
`CONNECT` 요청을 전송할 연결 유지 값(초)입니다. 이 간격으로 ping이 자동으로 전송됩니다. 이 값의 1.5배 후에도 서버가 ping을 받지 못하면 연결이 끊어진 것으로 간주합니다.

#### MQTT over WSS
<a name="sdk-tutorials-explore-mqtt-wss"></a>

`pubsub.py` 샘플은 [https://github.com/awslabs/aws-crt-python/blob/89207bcf1387177034e02fe29e8e469ca45e39b7/awscrt/awsiot_mqtt_connection_builder.py](https://github.com/awslabs/aws-crt-python/blob/89207bcf1387177034e02fe29e8e469ca45e39b7/awscrt/awsiot_mqtt_connection_builder.py)에서 `websockets_with_default_aws_signing`(여기에 표시됨)을 직접 호출하여 WSS를 통한 MQTT 프로토콜을 사용하여 AWS IoT Core 와의 연결을 설정합니다. `websockets_with_default_aws_signing`은 디바이스를 인증하기 위해 [Signature V4](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html)를 사용하여 WSS를 통한 MQTT 연결을 만듭니다.

```
mqtt_connection = mqtt_connection_builder.websockets_with_default_aws_signing(
    endpoint=args.endpoint,
    client_bootstrap=client_bootstrap,
    region=args.signing_region,
    credentials_provider=credentials_provider,
    websocket_proxy_options=proxy_options,
    ca_filepath=args.ca_file,
    on_connection_interrupted=on_connection_interrupted,
    on_connection_resumed=on_connection_resumed,
    client_id=args.client_id,
    clean_session=False,
    keep_alive_secs=6
)
```

`endpoint`  
 AWS 계정사용자의 IoT 디바이스 엔드포인트  
샘플 앱에서 이 값은 명령줄에서 전달됩니다.

`client_bootstrap`  
소켓 통신 활동을 처리하는 공통 런타임 객체  
샘플 앱에서 이 객체는 `mqtt_connection_builder.websockets_with_default_aws_signing`를 호출하기 전에 인스턴스화됩니다.

`region`  
 AWS Signature V4 인증에 사용되는 서명 리전입니다. `pubsub.py`에서 명령줄에 입력된 파라미터를 전달합니다.  
샘플 앱에서 이 값은 명령줄에서 전달됩니다.

`credentials_provider`  
인증에 사용하기 위해 제공된 AWS 자격 증명  
샘플 앱에서 이 객체는 `mqtt_connection_builder.websockets_with_default_aws_signing`을 호출하기 전에 인스턴스화됩니다.

`websocket_proxy_options`  
HTTP 프록시 옵션(프록시 호스트를 사용하는 경우)  
샘플 앱에서 이 값은 `mqtt_connection_builder.websockets_with_default_aws_signing`을 호출하기 전에 초기화됩니다.

`ca_filepath`  
루트 CA 파일의 경로. MQTT 서버가 trust store에 없는 인증서를 사용하는 경우에만 필요합니다.  
샘플 앱에서 이 값은 명령줄에서 전달됩니다.

`on_connection_interrupted``on_connection_resumed`  
디바이스의 연결이 중단되고 재개될 때 호출할 콜백 함수

`client_id`  
 AWS 리전에서 이 디바이스를 고유하게 식별하는 ID.  
샘플 앱에서 이 값은 명령줄에서 전달됩니다.

`clean_session`  
새 영구 세션을 시작할지, 아니면 존재하는 경우 기존 세션에 다시 연결할지 여부

`keep_alive_secs`  
`CONNECT` 요청을 전송할 연결 유지 값(초)입니다. 이 간격으로 ping이 자동으로 전송됩니다. 이 값의 1.5배 후에도 서버가 ping을 받지 못하면 연결이 끊어진 것으로 간주합니다.

#### HTTPS
<a name="sdk-tutorials-explore-https"></a>

HTTPS는 어떤가요?는 HTTPS 요청을 게시하는 디바이스를 AWS IoT Core 지원합니다. 프로그래밍 관점에서 디바이스는 다른 애플리케이션과 마찬가지로 AWS IoT Core 에 HTTPS 요청을 전송합니다. 디바이스에서 HTTP 메시지를 전송하는 Python 프로그램의 예는 Python의 `requests` 라이브러리를 사용하는 [HTTPS 코드 예](http.md#codeexample)를 참조하세요. 이 예제에서는가 메시지를 MQTT 메시지로 해석하도록 AWS IoT Core HTTPS를 AWS IoT Core 사용하여에 메시지를 보냅니다.

는 디바이스의 HTTPS 요청을 AWS IoT Core 지원하지만 디바이스 통신에 사용할 프로토콜을 정보에 입각하여 결정할 수 [디바이스 통신을 위한 애플리케이션 프로토콜 선택](protocols.md#protocol-selection) 있도록에 대한 정보를 검토해야 합니다.

### 영구 세션
<a name="sdk-tutorials-explore-persistent"></a>

샘플 앱에서 `clean_session` 파라미터를 `False`로 설정하면 연결이 지속되어야 함을 나타냅니다. 실제로 이것은 이 호출에 의해 열린 연결이 존재하는 경우 기존 영구 세션에 다시 연결된다는 것을 의미합니다. 그렇지 않으면 새 영구 세션을 만들고 연결합니다.

영구 세션에서는 디바이스가 연결되어 있지 않은 동안 디바이스로 전송되는 메시지가 메시지 브로커에 의해 저장됩니다. 디바이스가 영구 세션에 다시 연결되면 메시지 브로커는 디바이스가 구독한 저장된 메시지를 디바이스에 전송합니다.

영구 세션이 없으면 디바이스가 연결되어 있지 않은 동안 전송된 메시지를 수신하지 않습니다. 사용할 옵션은 애플리케이션에 따라 다르고 디바이스가 연결되지 않은 동안 발생하는 메시지를 전달해야 하는지 여부에 따라 다릅니다. 자세한 내용은 [MQTT 지속적 세션](mqtt.md#mqtt-persistent-sessions) 단원을 참조하세요.

### 서비스 품질
<a name="sdk-tutorials-explore-qos"></a>

디바이스가 메시지를 게시하고 구독하면 선호하는 서비스 품질(QoS)을 설정할 수 있습니다.는 게시 및 구독 작업에 대해 QoS 수준 0 및 1을 AWS IoT 지원합니다. 의 QoS 수준에 대한 자세한 내용은 섹션을 AWS IoT참조하세요[MQTT 서비스 품질(QoS) 옵션](mqtt.md#mqtt-qos).

Python용 AWS CRT 런타임은 지원하는 QoS 수준에 대해 다음 상수를 정의합니다.


**Python 서비스 품질 수준**  

| MQTT QoS 수준 | SDK에서 사용하는 Python 기호 값 | 설명 | 
| --- | --- | --- | 
| QoS 수준 0 | mqtt.QoS.AT\$1MOST\$1ONCE | 수신 여부에 관계없이 메시지 전송을 한 번만 시도합니다. 예를 들어 디바이스가 연결되어 있지 않거나 네트워크 오류가 있는 경우 메시지가 전혀 전송되지 않을 수 있습니다. | 
| QoS 수준 1 | mqtt.QoS.AT\$1LEAST\$1ONCE | 메시지는 PUBACK 승인이 수신될 때까지 반복적으로 전송됩니다. | 

샘플 앱에서 게시 및 구독 요청은 QoS 수준 1(`mqtt.QoS.AT_LEAST_ONCE`)로 수행됩니다.
+ 

**게시 중 QoS**  
디바이스가 QoS 수준 1의 메시지를 게시하면 메시지 브로커로부터 `PUBACK` 응답을 받을 때까지 메시지를 반복해서 전송합니다. 디바이스가 연결되어 있지 않으면 메시지가 다시 연결한 후 전송되도록 대기열에 저장됩니다.
+ 

**구독 중 QoS**  
디바이스가 QoS 수준 1의 메시지를 구독하면 메시지 브로커는 디바이스로 전송할 수 있을 때까지 디바이스가 구독한 메시지를 저장합니다. 메시지 브로커는 디바이스로부터 `PUBACK` 응답을 받을 때까지 메시지를 다시 전송합니다.

### 메시지 게시
<a name="sdk-tutorials-explore-publish"></a>

연결을 성공적으로 설정하면 AWS IoT Core디바이스가 메시지를 게시할 수 있습니다. `pubsub.py` 샘플은 `mqtt_connection` 객체의 `publish` 작업을 호출하여 이를 수행합니다.

```
mqtt_connection.publish(
    topic=args.topic,
    payload=message,
    qos=mqtt.QoS.AT_LEAST_ONCE
)
```

`topic`  
메시지를 식별하는 메시지의 주제 이름  
샘플 앱에서 이 이름은 명령줄에서 전달됩니다.

`payload`  
문자열로 형식이 지정된 메시지 페이로드(예: JSON 문서)  
샘플 앱에서 이것은 명령줄에서 전달됩니다.  
JSON 문서는 일반적인 페이로드 형식이며 다른 AWS IoT 서비스에서 인식하는 형식이지만 메시지 페이로드의 데이터 형식은 게시자와 구독자가 동의하는 모든 형식일 수 있습니다. 그러나 다른 AWS IoT 서비스는 경우에 따라 대부분의 작업에 대해 JSON 및 CBOR만 인식합니다.

`qos`  
이 메시지의 QoS 수준

### 메시지 구독
<a name="sdk-tutorials-explore-subscribe"></a>

 AWS IoT 및 기타 서비스 및 디바이스에서 메시지를 수신하기 위해 디바이스는 주제 이름으로 해당 메시지를 구독합니다. 디바이스는 [주제 이름](topics.md#topicnames)을 지정하여 개별 메시지를 구독하고 와일드카드 문자를 포함할 수 있는 [주제 필터](topics.md#topicfilters)를 지정하여 메시지 그룹을 구독할 수 있습니다. `pubsub.py` 샘플은 여기에 표시된 코드를 사용하여 메시지를 구독하고 콜백 함수를 등록하여 메시지를 받은 후 처리합니다.

```
subscribe_future, packet_id = mqtt_connection.subscribe(
    topic=args.topic,
    qos=mqtt.QoS.AT_LEAST_ONCE,
    callback=on_message_received
)
subscribe_result = subscribe_future.result()
```

`topic`  
구독할 주제. 주제 이름 또는 주제 필터일 수 있습니다.  
샘플 앱에서 이것은 명령줄에서 전달됩니다.

`qos`  
디바이스 연결이 끊어지는 동안 메시지 브로커가 이러한 메시지를 저장할지 여부입니다.  
값이 `mqtt.QoS.AT_LEAST_ONCE`(QoS 수준 1)이면 연결이 생성될 때 영구 세션을 지정해야 합니다(`clean_session=False`).

`callback`  
구독된 메시지를 처리하기 위해 호출할 함수.

`mqtt_connection.subscribe` 함수는 미래의 패킷과 패킷 ID를 반환합니다. 구독 요청이 성공적으로 시작된 경우 반환된 패킷 ID는 0보다 큽니다. 구독이 메시지 브로커에 의해 수신 및 등록되었는지 확인하려면 코드 예제와 같이 비동기 작업의 결과가 반환될 때까지 기다려야 합니다.

**콜백 함수**  
`pubsub.py` 샘플의 콜백은 디바이스가 수신한 구독 메시지를 처리합니다.

```
def on_message_received(topic, payload, **kwargs):
    print("Received message from topic '{}': {}".format(topic, payload))
    global received_count
    received_count += 1
    if received_count == args.count:
        received_all_event.set()
```

`topic`  
메시지의 주제  
주제 필터를 구독한 경우에도 수신된 메시지의 특정 주제 이름입니다.

`payload`  
메시지 페이로드  
이 형식은 애플리케이션에 따라 다릅니다.

`kwargs`  
[https://awslabs.github.io/aws-crt-python/api/mqtt.html#awscrt.mqtt.Connection.subscribe](https://awslabs.github.io/aws-crt-python/api/mqtt.html#awscrt.mqtt.Connection.subscribe)에 설명된 대로 가능한 추가 인수입니다.

`pubsub.py` 샘플에서 `on_message_received`는 주제와 해당 페이로드만 표시합니다. 또한 한도에 도달한 후 프로그램을 종료하기 위해 수신된 메시지 수를 계산합니다.

앱은 주제 및 페이로드를 평가하여 수행할 작업을 결정합니다.

### 디바이스 연결 해제 및 재연결
<a name="sdk-tutorials-explore-connect"></a>

`pubsub.py` 샘플에는 디바이스의 연결이 끊어지고 연결이 다시 설정될 때 호출되는 콜백 함수가 포함되어 있습니다. 디바이스에서 이러한 이벤트에 대해 수행하는 작업은 애플리케이션에 따라 다릅니다.

디바이스가 처음으로 연결되면 수신할 주제를 구독해야 합니다. 디바이스가 다시 연결될 때 디바이스의 세션이 있으면 구독이 복원되고 해당 구독에서 저장된 메시지가 다시 연결되면 디바이스로 전송됩니다.

디바이스가 다시 연결될 때 디바이스의 세션이 더 이상 존재하지 않으면 구독을 다시 구독해야 합니다. 영구 세션은 수명이 제한되어 있으며 디바이스의 연결이 너무 오래 끊어지면 만료될 수 있습니다.

## 디바이스 연결 및와 통신 AWS IoT Core
<a name="sdk-tutorials-experiment"></a>

이 섹션에서는 디바이스를 AWS IoT Core에 연결하는 다양한 측면을 탐색하는 데 도움이 되는 몇 가지 연습을 제공합니다. 이 연습에서는 AWS IoT 콘솔에서 [MQTT 테스트 클라이언트](https://console.aws.amazon.com/iot/home#/test)를 사용하여 디바이스가 게시하는 내용을 확인하고 디바이스에 메시지를 게시합니다. 이 연습에서는 [AWS IoT Device SDK v2 for Python](https://github.com/aws/aws-iot-device-sdk-python-v2/tree/master/samples#sample-apps-for-the-aws-iot-device-sdk-v2-for-python)의 [https://github.com/aws/aws-iot-device-sdk-python-v2/blob/master/samples/pubsub.py](https://github.com/aws/aws-iot-device-sdk-python-v2/blob/master/samples/pubsub.py) 샘플을 사용하고 [AWS IoT Core 자습서 시작하기](iot-gs.md) 자습서의 경험을 바탕으로 빌드합니다.

**Topics**
+ [와일드카드 주제 필터 구독](#sdk-tutorials-experiment-wild)
+ [주제 필터 구독 처리](#sdk-tutorials-experiment-process)
+ [디바이스에서 메시지 게시](#sdk-tutorials-experiment-publish)

이러한 연습의 경우 먼저 `pubsub.py` 샘플 프로그램에서 시작합니다.

**참고**  
이 연습에서는 [AWS IoT Core 자습서 시작하기](iot-gs.md) 자습서를 완료하고 해당 자습서에서 디바이스의 터미널 창을 사용한다고 가정합니다.

### 와일드카드 주제 필터 구독
<a name="sdk-tutorials-experiment-wild"></a>

이 연습에서는 와일드카드 주제 필터를 구독하고 메시지 주제에 따라 수신된 메시지를 처리하기 위해 `pubsub.py`를 호출하는 데 사용되는 명령줄을 수정합니다.

#### 연습 절차
<a name="sdk-tutorials-experiment-wild-steps"></a>

이 연습에서는 디바이스에 온도 컨트롤과 조명 컨트롤이 있다고 가정합니다. 이러한 주제 이름을 사용하여 해당 주제에 대한 메시지를 식별합니다.

1. 연습을 시작하기 전에 디바이스의 [AWS IoT Core 자습서 시작하기](iot-gs.md) 자습서에서 이 명령을 실행하여 연습에 필요한 모든 것이 준비되었는지 확인하세요.

   ```
   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
   ```

   [시작하기 자습서](connecting-to-existing-device.md#gs-device-node-app-run)에서 본 것과 동일한 출력이 표시되어야 합니다.

1. 이 연습에서는 다음 명령행 파라미터를 변경합니다.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/sdk-tutorials.html)

   초기 명령줄을 이렇게 변경하면 이 명령줄이 생성됩니다. 디바이스의 터미널 창에 이 명령을 입력합니다.

   ```
   python3 pubsub.py --message "" --count 2 --topic device/+/details --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpoint your-iot-endpoint
   ```

   프로그램은 다음과 같이 표시되어야 합니다.

   ```
   Connecting to a3qexamplesffp-ats.iot.us-west-2.amazonaws.com with client ID 'test-24d7cdcc-cc01-458c-8488-2d05849691e1'...
   Connected!
   Subscribing to topic 'device/+/details'...
   Subscribed with QoS.AT_LEAST_ONCE
   Waiting for all messages to be received...
   ```

   터미널에 이와 같은 항목이 표시되면 디바이스가 준비되고 주제 이름이 `device`(으)로 시작하고 `/detail`(으)로 끝나는 메시지를 수신 대기 중인 것입니다. 그럼 테스트해 보겠습니다.

1. 다음은 디바이스에서 수신할 수 있는 몇 가지 메시지입니다.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/sdk-tutorials.html)

1.  AWS IoT 콘솔에서 MQTT 테스트 클라이언트를 사용하여 이전 단계에서 설명한 메시지를 디바이스로 전송합니다.

   1.  AWS IoT 콘솔에서 [MQTT 테스트 클라이언트](https://console.aws.amazon.com/iot/home#/test)를 엽니다.

   1. **주제 구독(Subscribe to a topic)**의 **Subscription topic field(구독 주제 필드)**에 주제 필터 **device/\$1/details**를 입력한 다음 **주제 구독(Subscribe to topic)**을 선택합니다.

   1. MQTT 테스트 클라이언트의 **구독(Subscriptions)** 열에서 **device/\$1/details**를 선택합니다.

   1. 앞의 표에 있는 각 주제에 대해 MQTT 테스트 클라이언트에서 다음을 수행합니다.

      1. **게시(Publish)**에서 테이블의 **주제 이름(Topic name)** 열에 있는 값을 입력합니다.

      1. 주제 이름 아래의 메시지 페이로드 필드에 테이블의 **메시지 페이로드(Message payload)** 열에 있는 값을 입력합니다.

      1. `pubsub.py`가 실행 중인 터미널 창을 살펴보고 MQTT 테스트 클라이언트에서 **주제에 게시(Publish to topic)**를 선택합니다.

      터미널 창에서 `pubsub.py`가 메시지를 수신했음을 확인해야 합니다.

#### 연습 결과
<a name="sdk-tutorials-experiment-wild-result"></a>

`pubsub.py`를 통해 와일드카드 주제 필터를 사용하여 메시지를 구독하고 수신하여 터미널 창에 표시했습니다. 단일 주제 필터를 구독하고 두 개의 개별 주제가 있는 메시지를 처리하기 위해 콜백 함수가 호출된 방법에 주목하세요.

### 주제 필터 구독 처리
<a name="sdk-tutorials-experiment-process"></a>

이전 연습을 기반으로 `pubsub.py` 샘플 앱을 수정하여 메시지 주제를 평가하고 주제를 기반으로 구독된 메시지를 처리합니다.

#### 연습 절차
<a name="sdk-tutorials-experiment-process-steps"></a>

**메시지 주제를 평가하려면**

1. `pubsub.py`를 `pubsub2.py`에 복사합니다.

1. 즐겨 사용하는 텍스트 편집기나 IDE에서 `pubsub2.py`를 엽니다.

1. `pubsub2.py`에서 `on_message_received` 함수를 찾습니다.

1. `on_message_received`에서 `print("Received message`로 시작하는 줄 뒤와 `global received_count`로 시작하는 줄 앞에 다음 코드를 삽입합니다.

   ```
       topic_parsed = False
       if "/" in topic:
           parsed_topic = topic.split("/")
           if len(parsed_topic) == 3:
               # this topic has the correct format
               if (parsed_topic[0] == 'device') and (parsed_topic[2] == 'details'):
                   # this is a topic we care about, so check the 2nd element
                   if (parsed_topic[1] == 'temp'):
                       print("Received temperature request: {}".format(payload))
                       topic_parsed = True
                   if (parsed_topic[1] == 'light'):
                       print("Received light request: {}".format(payload))
                       topic_parsed = True
       if not topic_parsed:
           print("Unrecognized message topic.")
   ```

1. 변경 사항을 저장하고 이 명령줄을 사용하여 수정된 프로그램을 실행합니다.

   ```
   python3 pubsub2.py --message "" --count 2 --topic device/+/details --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 콘솔에서 [MQTT 테스트 클라이언트](https://console.aws.amazon.com/iot/home#/test)를 엽니다.

1. **주제 구독(Subscribe to a topic)**의 **Subscription topic field(구독 주제 필드)**에 주제 필터 **device/\$1/details**를 입력한 다음 **주제 구독(Subscribe to topic)**을 선택합니다.

1. MQTT 테스트 클라이언트의 **구독(Subscriptions)** 열에서 **device/\$1/details**를 선택합니다.

1. 이 표에 있는 각 주제에 대해 MQTT 테스트 클라이언트에서 다음을 수행합니다.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/sdk-tutorials.html)

   1. **게시(Publish)**에서 테이블의 **주제 이름(Topic name)** 열에 있는 값을 입력합니다.

   1. 주제 이름 아래의 메시지 페이로드 필드에 테이블의 **메시지 페이로드(Message payload)** 열에 있는 값을 입력합니다.

   1. `pubsub.py`가 실행 중인 터미널 창을 살펴보고 MQTT 테스트 클라이언트에서 **주제에 게시(Publish to topic)**를 선택합니다.

   터미널 창에서 `pubsub.py`가 메시지를 수신했음을 확인해야 합니다.

터미널 창에서 이와 유사한 결과가 나타날 것입니다.

```
Connecting to a3qexamplesffp-ats.iot.us-west-2.amazonaws.com with client ID 'test-af794be0-7542-45a0-b0af-0b0ea7474517'...
Connected!
Subscribing to topic 'device/+/details'...
Subscribed with QoS.AT_LEAST_ONCE
Waiting for all messages to be received...
Received message from topic 'device/light/details': b'{ "desiredLight": 100, "currentLight": 50 }'
Received light request: b'{ "desiredLight": 100, "currentLight": 50 }'
Received message from topic 'device/temp/details': b'{ "desiredTemp": 20, "currentTemp": 15 }'
Received temperature request: b'{ "desiredTemp": 20, "currentTemp": 15 }'
2 message(s) received.
Disconnecting...
Disconnected!
```

#### 연습 결과
<a name="sdk-tutorials-experiment-process-result"></a>

이 연습에서는 샘플 앱이 콜백 함수에서 여러 메시지를 인식하고 처리할 수 있도록 코드를 추가했습니다. 이를 통해 디바이스가 메시지를 수신하고 이에 대한 조치를 취할 수 있습니다.

디바이스에서 여러 메시지를 수신하고 처리하는 또 다른 방법은 서로 다른 메시지를 별도로 구독하고 각 구독을 자체 콜백 함수에 할당하는 것입니다.

### 디바이스에서 메시지 게시
<a name="sdk-tutorials-experiment-publish"></a>

pubsub.py 샘플 앱을 사용하여 디바이스에서 메시지를 게시할 수 있습니다. 메시지를 그대로 게시하지만 메시지를 JSON 문서로 읽을 수 없습니다. 이 연습에서는 읽을 수 있는 메시지 페이로드에 JSON 문서를 게시할 수 있도록 샘플 앱을 수정합니다 AWS IoT Core.

#### 연습 절차
<a name="sdk-tutorials-experiment-publish-steps"></a>

이 연습에서는 `device/data` 주제와 함께 다음 메시지가 전송됩니다.

```
{
    "timestamp": 1601048303,
    "sensorId": 28,
    "sensorData": [
        {
        "sensorName": "Wind speed",
        "sensorValue": 34.2211224
        }
    ]
}
```

**이 연습에서 발생한 메시지를 모니터링하기 위해 MQTT 테스트 클라이언트를 준비하려면**

1. **주제 구독(Subscribe to a topic)**의 **Subscription topic field(구독 주제 필드)**에 주제 필터 **device/data**를 입력한 다음 **주제 구독(Subscribe to topic)**을 선택합니다.

1. MQTT 테스트 클라이언트의 **구독(Subscriptions)** 열에서 **device/data**를 선택합니다.

1. MQTT 테스트 클라이언트 창을 열어 두고 디바이스의 메시지를 기다립니다.

**pubsub.py 샘플 앱을 사용하여 JSON 문서를 전송하려면**

1. 디바이스에서 `pubsub.py`를 `pubsub3.py`로 복사합니다.

1. 게시하는 메시지의 형식을 변경하도록 `pubsub3.py`를 편집합니다.

   1. 텍스트 편집기에서 `pubsub3.py`을(를) 엽니다.

   1. 다음 코드 행을 찾습니다.

      `message = "{} [{}]".format(message_string, publish_count)`

   1. 다음과 같이 변경하세요.

      `message = "{}".format(message_string)`

   1. 다음 코드 행을 찾습니다.

      `message_json = json.dumps(message)`

   1. 다음과 같이 변경하세요.

      `message = "{}".json.dumps(json.loads(message))`

   1. 변경 내용을 저장합니다.

1. 디바이스에서 이 명령을 실행하여 메시지를 두 번 전송합니다.

   ```
   python3 pubsub3.py  --ca_file ~/certs/Amazon-root-CA-1.pem  --cert ~/certs/device.pem.crt  --key ~/certs/private.pem.key  --topic device/data  --count 2 --message '{"timestamp":1601048303,"sensorId":28,"sensorData":[{"sensorName":"Wind speed","sensorValue":34.2211224}]}'  --endpoint your-iot-endpoint
   ```

1. MQTT 테스트 클라이언트에서 다음과 같이 메시지 페이로드에서 JSON 문서를 해석하고 형식을 지정했는지 확인합니다.  
![\[AWS IoT 콘솔의 MQTT 클라이언트에 JSON 메시지 페이로드가 표시되는 방법을 보여주는 이미지입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/mqtt-test-client-output.png)

기본적으로 `pubsub3.py`는 전송하는 메시지도 구독합니다. 앱의 출력에서 메시지를 수신한 것을 볼 수 있습니다. 터미널 창은 다음과 유사해야 합니다.

```
Connecting to a3qEXAMPLEsffp-ats.iot.us-west-2.amazonaws.com with client ID 'test-5cff18ae-1e92-4c38-a9d4-7b9771afc52f'...
Connected!
Subscribing to topic 'device/data'...
Subscribed with QoS.AT_LEAST_ONCE
Sending 2 message(s)
Publishing message to topic 'device/data': {"timestamp":1601048303,"sensorId":28,"sensorData":[{"sensorName":"Wind speed","sensorValue":34.2211224}]}
Received message from topic 'device/data': b'{"timestamp":1601048303,"sensorId":28,"sensorData":[{"sensorName":"Wind speed","sensorValue":34.2211224}]}'
Publishing message to topic 'device/data': {"timestamp":1601048303,"sensorId":28,"sensorData":[{"sensorName":"Wind speed","sensorValue":34.2211224}]}
Received message from topic 'device/data': b'{"timestamp":1601048303,"sensorId":28,"sensorData":[{"sensorName":"Wind speed","sensorValue":34.2211224}]}'
2 message(s) received.
Disconnecting...
Disconnected!
```

#### 연습 결과
<a name="sdk-tutorials-experiment-publish-result"></a>

이를 통해 디바이스는에 보낼 메시지를 생성 AWS IoT Core 하여 기본 연결을 테스트하고가 처리할 디바이스 메시지를 제공할 수 AWS IoT Core 있습니다. 예를 들어이 앱을 사용하여 디바이스에서 테스트 데이터를 전송하여 AWS IoT 규칙 작업을 테스트할 수 있습니다.

## 결과 검토
<a name="sdk-tutorials-conclusion"></a>

이 자습서의 예제는 디바이스가 AWS IoT 솔루션의 기본 부분 AWS IoT Core인와 통신하는 방법의 기본 사항에 대한 실습 경험을 제공합니다. 디바이스와 통신할 수 있는 경우 서비스 및 디바이스가 AWS 작동할 AWS IoT Core수 있는 다른 디바이스에 메시지를 전달할 수 있습니다. 마찬가지로 AWS 서비스 및 기타 디바이스는 디바이스로 다시 전송되는 메시지를 생성하는 정보를 처리할 수 있습니다.

 AWS IoT Core 더 자세히 살펴볼 준비가 되면 다음 자습서를 시도해 보세요.
+ [자습서: Amazon SNS 알림 전송](iot-sns-rule.md)
+ [자습서: DynamoDB 테이블에 디바이스 데이터 저장](iot-ddb-rule.md)
+ [자습서: AWS Lambda 함수를 사용하여 알림 형식 지정](iot-lambda-rule.md)

# 자습서: AWS IoT Device SDK for Embedded C 사용
<a name="iot-embedded-c-sdk"></a>

이 섹션에서는 AWS IoT Device SDK for Embedded C를 실행하는 방법에 대해 설명합니다.

**Topics**
+ [1단계: AWS IoT Device SDK for Embedded C 설치](#install-embedded-c-sdk)
+ [2단계: 샘플 앱 구성](#iot-c-sdk-app-config)
+ [3단계: 샘플 애플리케이션 빌드 및 실행](#iot-c-sdk-app-run)

## 1단계: AWS IoT Device SDK for Embedded C 설치
<a name="install-embedded-c-sdk"></a>

AWS IoT Device SDK for Embedded C는 일반적으로 최적화된 C 언어 런타임을 필요로 하는 리소스 제약 디바이스를 대상으로 합니다. 모든 운영 체제에서 SDK를 사용하고, 모든 프로세서 유형(예: MCU 및 MPU)에서 호스팅할 수 있습니다. 더 많은 메모리 및 처리 리소스를 사용할 수 있는 경우, 상위 순위의 AWS IoT 디바이스 및 모바일 SDK(예: C\$1\$1, Java, JavaScript 및 Python) 중 하나를 사용하도록 하세요.

일반적으로 AWS IoT Device SDK for Embedded C는 임베디드 운영 체제를 실행하는 MCU 또는 저사양의 MPU를 사용하는 시스템용입니다. 이 섹션의 프로그래밍 예제에서는 디바이스가 Linux를 사용한다고 가정합니다.

**Example**  

1. [GitHub](https://github.com/aws/aws-iot-device-sdk-embedded-C)에서 AWS IoT Device SDK for Embedded C를 디바이스로 다운로드하세요.

   ```
   git clone https://github.com/aws/aws-iot-device-sdk-embedded-c.git --recurse-submodules
   ```

   그러면 현재 디렉토리에 `aws-iot-device-sdk-embedded-c`라는 디렉터리가 생성됩니다.

1. 해당 디렉터리로 이동하여 최신 릴리스를 체크아웃합니다. 최신 릴리스 태그는 [github.com/aws/aws-iot-device-sdk-embedded-C/tags](https://github.com/aws/aws-iot-device-sdk-embedded-C/tags)를 참조하세요.

   ```
   cd aws-iot-device-sdk-embedded-c
   git checkout latest-release-tag
   ```

1. OpenSSL 버전 1.1.0 이상을 설치합니다. OpenSSL 개발 라이브러리는 패키지 관리자를 통해 설치될 때 일반적으로 ‘libssl-dev’ 또는 ‘openssl-devel’이라고 합니다.

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

## 2단계: 샘플 앱 구성
<a name="iot-c-sdk-app-config"></a>

AWS IoT Device SDK for Embedded C에는 사용자가 시도할 수 있는 샘플 애플리케이션이 포함되어 있습니다. 간단한 설명을 위해 이 자습서에서는 `mqtt_demo_mutual_auth` 애플리케이션을 사용합니다. 이 애플리케이션은 AWS IoT Core 메시지 브로커에 연결하여 MQTT 주제를 구독하고 게시하는 방법을 보여줍니다.

1. [AWS IoT Core 자습서 시작하기](iot-gs.md)에서 만든 인증서와 개인 키를 `build/bin/certificates` 디렉터리에 복사합니다.
**참고**  
디바이스 및 루트 CA 인증서는 만료 또는 취소될 수 있습니다. 인증서가 만료되거나 취소되면 새 CA 인증서 또는 프라이빗 키와 디바이스 인증서를 디바이스에 복사해야 합니다.

1. 개인 AWS IoT Core 엔드포인트, 프라이빗 키, 인증서 및 루트 CA 인증서를 사용하여 샘플을 구성해야 합니다. `aws-iot-device-sdk-embedded-c/demos/mqtt/mqtt_demo_mutual_auth` 디렉터리로 이동합니다.

   AWS CLI를 설치한 경우 이 명령을 사용하여 계정의 엔드포인트 URL을 찾을 수 있습니다.

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

   AWS CLI를 설치하지 않은 경우 [AWS IoT 콘솔](https://console.aws.amazon.com/iot/home)을 엽니다. 탐색 창에서 **Manage(관리)**를 선택한 다음 **Things(사물)**를 선택합니다. 디바이스에서 IoT 사물을 선택한 다음 **상호 작용(Interact)**을 선택합니다. 사물 세부 정보 페이지의 **HTTPS** 섹션에 엔드포인트가 표시됩니다.

1. `demo_config.h` 파일을 열어 다음의 값을 업데이트합니다.  
AWS\$1IOT\$1ENDPOINT  
개인 엔드포인트입니다.  
CLIENT\$1CERT\$1PATH  
인증서 파일 경로(예: `certificates/device.pem.crt"`)입니다.  
CLIENT\$1PRIVATE\$1KEY\$1PATH  
프라이빗 키 파일 이름(예: `certificates/private.pem.key`)입니다.

   다음 예를 참조하세요.

   ```
   // Get from demo_config.h
   // =================================================
   #define AWS_IOT_ENDPOINT               "my-endpoint-ats.iot.us-east-1.amazonaws.com"
   #define AWS_MQTT_PORT                  8883
   #define CLIENT_IDENTIFIER              "testclient"
   #define ROOT_CA_CERT_PATH              "certificates/AmazonRootCA1.crt"
   #define CLIENT_CERT_PATH               "certificates/my-device-cert.pem.crt"
   #define CLIENT_PRIVATE_KEY_PATH        "certificates/my-device-private-key.pem.key"
   // =================================================
   ```

1. 이 명령을 사용하여 디바이스에 CMake가 설치되어 있는지 확인하세요.

   ```
   cmake --version
   ```

   컴파일러에 대한 버전 정보가 표시되면 다음 섹션을 계속 진행할 수 있습니다.

   오류가 발생하거나 정보가 표시되지 않는 경우 이 명령을 사용하여 cmake 패키지를 설치해야 합니다.

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

   **cmake --version** 명령을 다시 실행하고 CMake가 설치되었으며 계속할 준비가 되었는지 확인합니다.

1. 이 명령을 사용하여 디바이스에 개발 도구가 설치되어 있는지 확인하세요.

   ```
   gcc --version
   ```

   컴파일러에 대한 버전 정보가 표시되면 다음 섹션을 계속 진행할 수 있습니다.

   오류가 발생하거나 컴파일러 정보가 표시되지 않는 경우 이 명령을 사용하여 `build-essential` 패키지를 설치해야 합니다.

   ```
   sudo apt-get install build-essential
   ```

   **gcc --version** 명령을 다시 실행하고 빌드 도구가 설치되었으며 계속할 준비가 되었는지 확인합니다.

## 3단계: 샘플 애플리케이션 빌드 및 실행
<a name="iot-c-sdk-app-run"></a>

이 절차에서는 디바이스에서 `mqtt_demo_mutual_auth` 애플리케이션을 생성하고 AWS IoT Device SDK for Embedded C를 사용하여 [AWS IoT 콘솔](https://console.aws.amazon.com/iot/home)에 연결하는 방법을 설명합니다.

**AWS IoT Device SDK for Embedded C 샘플 애플리케이션을 실행하려면**

1. `aws-iot-device-sdk-embedded-c`로 이동하여 빌드 디렉터리를 생성합니다.

   ```
   mkdir build && cd build
   ```

1. 다음 CMake 명령을 입력하여 빌드에 필요한 Makefile을 생성합니다.

   ```
   cmake ..  
   ```

1. 다음 명령어를 입력하여 실행 가능한 앱 파일을 빌드합니다.

   ```
   make
   ```

1. 이 명령으로 `mqtt_demo_mutual_auth` 앱을 실행합니다.

   ```
   cd bin
   ./mqtt_demo_mutual_auth
   ```

   다음과 유사한 출력 화면이 표시되어야 합니다.  
![\[AWS IoT Device SDK for Embedded C 샘플 애플리케이션을 실행하기 위한 명령줄 출력입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/successful-run2.png)

이제 디바이스가 AWS IoT Device SDK for Embedded C를 사용하여 AWS IoT에 연결되었습니다.

AWS IoT 콘솔을 사용하여 샘플 앱이 게시하는 MQTT 메시지를 확인할 수도 있습니다. [AWS IoT 콘솔](https://console.aws.amazon.com/iot/home)에서 MQTT 클라이언트를 사용하는 방법에 대한 내용은 [MQTT 클라이언트를 사용하여 AWS IoT MQTT 메시지 보기](view-mqtt-messages.md) 단원을 참조하세요.