

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

# 디바이스와 작업
<a name="jobs-devices"></a>

디바이스는 MQTT, HTTP 서명 버전 4 또는 HTTP TLS를 사용하여 AWS IoT작업과 통신할 수 있습니다. 디바이스가 AWS IoT작업과 통신할 때 사용할 엔드포인트를 확인하려면 **DescribeEndpoint** 명령을 실행합니다. 예를 들면 다음 명령을 실행하는 경우

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

다음과 같은 결과가 출력됩니다.

```
{
    "endpointAddress": "a1b2c3d4e5f6g7-ats.iot.us-west-2.amazonaws.com"
}
```

## MQTT 프로토콜 사용
<a name="jobs-using-mqtt"></a>

디바이스는 MQTT 프로토콜을 사용하여 AWS IoT작업과 통신할 수 있습니다. 디바이스는 MQTT 주제를 구독하여 새 작업에 대한 알림을 받고 AWS IoT작업 서비스로부터 응답을 받습니다. 또한 MQTT 주제에 게시하여 작업 시작 상태에 대한 쿼리를 실행하거나 업데이트하기도 합니다. 또한 디바이스마다 자체적으로 일반 MQTT 주제가 있습니다. MQTT 주제 게시 및 구독에 대한 자세한 내용은 [디바이스 통신 프로토콜](protocols.md) 단원을 참조하세요.

이 통신 방법을 사용하면 디바이스가 디바이스별 인증서와 프라이빗 키를 사용하여 AWS IoT작업으로 인증합니다.

디바이스는 다음 주제를 구독할 수 있습니다. `thing-name`은 디바이스와 연결된 사물의 이름입니다.
+ 

**`$aws/things/thing-name/jobs/notify`**  
보류 중인 작업 시작 목록에서 작업 시작이 추가되거나 제거될 때 알림을 받으려면 이 주제를 구독합니다.
+ 

**`$aws/things/thing-name/jobs/notify-next`**  
보류 중인 다음 작업 실행이 변경될 때 알림을 받으려면 이 주제를 구독합니다.
+ 

**`$aws/things/thing-name/jobs/request-name/accepted`**  
AWS IoT작업 서비스는 MQTT 주제에 성공 및 실패 메시지를 게시합니다. 이 주제는 요청에 사용된 주제에 `accepted` 또는 `rejected`를 추가해 구성합니다. 여기서 `request-name`는 `Get`와 같은 요청의 이름이며 주제는 `$aws/things/myThing/jobs/get`.AWS IoTJobs가 `$aws/things/myThing/jobs/get/accepted` 주제에 성공 메시지를 게시할 수 있습니다.
+ 

**`$aws/things/thing-name/jobs/request-name/rejected`**  
여기서 `request-name`은 `Get`과 같은 요청의 이름입니다. 요청이 실패하면 AWS IoT작업에서 `$aws/things/myThing/jobs/get/rejected` 주제에 실패 메시지를 게시합니다.

다음 HTTPS API 작업을 사용할 수도 있습니다.
+ [https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_UpdateJobExecution.html](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_UpdateJobExecution.html) API를 호출하여 작업 실행 상태를 업데이트할 수 있습니다.
+ [https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_DescribeJobExecution.html](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_DescribeJobExecution.html) API를 호출하여 작업 실행 상태에 대한 쿼리를 실행할 수 있습니다.
+ [https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_GetPendingJobExecutions.html](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_GetPendingJobExecutions.html) API를 호출하여 대기 중인 작업 실행 목록을 가져올 수 있습니다.
+ `jobId`를 `$next`로 사용하여 [https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_DescribeJobExecution.html](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_DescribeJobExecution.html) API를 호출하여 다음 보류 중인 작업 실행을 가져올 수 있습니다.
+ [https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_StartNextPendingJobExecution.html](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_StartNextPendingJobExecution.html) API를 호출하여 다음 대기 중인 작업 실행을 가져와 시작할 수 있습니다.

## HTTP 서명 버전 4 사용
<a name="jobs-using-http-v4"></a>

디바이스는 포트 443에서 HTTP 서명 버전 4를 사용하여 AWS IoT작업과 통신할 수 있습니다. 이는 AWS SDK와 CLI에 의해 사용되는 방법입니다. 이러한 도구에 대한 자세한 내용은 [AWS CLI 명령 참조: iot-jobs-data](https://docs.aws.amazon.com/cli/latest/reference/iot-jobs-data/index.html) 또는 [AWS SDK 및 도구](https://aws.amazon.com/tools/#sdk)와 기본 언어의 IotJobsDataPlane 단원을 참조하세요.

이 통신 방법을 사용하면 디바이스가 IAM 자격 증명을 사용하여 AWS IoT작업으로 인증합니다.

이 방법을 사용하는 경우 다음 명령을 사용할 수 있습니다.
+ **DescribeJobExecution**

  `aws iot-jobs-data describe-job-execution ...` 
+ **GetPendingJobExecutions**

  `aws iot-jobs-data get-pending-job-executions ...` 
+ **StartNextPendingJobExecution**

  `aws iot-jobs-data start-next-pending-job-execution ...` 
+ **UpdateJobExecution**

  `aws iot-jobs-data update-job-execution ...` 

## HTTP TLS 사용
<a name="jobs-using-http-tls"></a>

디바이스는이 프로토콜을 지원하는 타사 소프트웨어 클라이언트를 사용하여 포트 8443에서 HTTP TLS를 사용하여 AWS IoT작업과 통신할 수 있습니다.

디바이스는 이 방법으로 X.509 인증서 기반 인증을 사용합니다(예: 디바이스별 인증서 및 프라이빗 키).

이 방법을 사용하는 경우 다음 명령을 사용할 수 있습니다.
+ **DescribeJobExecution**
+ **GetPendingJobExecutions**
+ **StartNextPendingJobExecution**
+ **UpdateJobExecution**

## 작업 서비스와 작업할 수 있도록 디바이스를 프로그래밍
<a name="programming-devices"></a>

이 섹션의 예제에서는 MQTT를 사용하여 디바이스가 AWS IoT 작업 서비스와 작업하는 방식을 보여줍니다. 또는 해당 API 또는 CLI 명령을 사용할 수 있습니다. 여기 예제에서는 `MyThing` 디바이스가 다음 MQTT 주제를 구독한다고 가정합니다.
+ `$aws/things/MyThing/jobs/notify`(또는 `$aws/things/MyThing/jobs/notify-next`)
+ `$aws/things/MyThing/jobs/get/accepted`
+ `$aws/things/MyThing/jobs/get/rejected`
+ `$aws/things/MyThing/jobs/jobId/get/accepted`
+ `$aws/things/MyThing/jobs/jobId/get/rejected`

 에 코드 서명을 사용하는 경우 AWS IoT디바이스 코드는 코드 파일의 서명을 확인해야 합니다. 이 서명은 작업 문서의 `codesign` 속성에 있습니다. 코드 파일 서명 확인에 대한 자세한 내용은 [디바이스 에이전트 샘플](https://github.com/aws/aws-iot-device-sdk-js#jobsAgent)을 참조하세요.

**Topics**
+ [작업 서비스와 작업할 수 있도록 디바이스를 프로그래밍](#programming-devices)
+ [디바이스 워크플로우](jobs-workflow-device-online.md)
+ [작업 워크플로](jobs-workflow-jobs-online.md)
+ [작업 알림](jobs-comm-notifications.md)