

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

# AWS IoT Jobs 라이브러리 데모
<a name="freertos-jobs-demo"></a>

**중요**  <a name="deprecation-message-demo"></a>
이 데모는 더 이상 사용되지 않는 Amazon-FreeRTOS 리포지토리에서 호스팅됩니다. 새 프로젝트를 생성할 때는 [여기서 시작](freertos-getting-started-modular.md)하는 것이 좋습니다. 현재 사용되지 않는 Amazon-FreeRTOS 리포지토리를 기반으로 하는 기존 FreeRTOS 프로젝트가 이미 있는 경우에는 [Amazon-FreeRTOS Github 리포지토리 마이그레이션 가이드](github-repo-migration.md) 섹션을 참조하세요.

## 소개
<a name="freertos-jobs-demo-introduction"></a>

AWS IoT Jobs 라이브러리 데모는 MQTT 연결을 통해 [AWS IoT Jobs 서비스](https://docs.aws.amazon.com/iot/latest/developerguide/iot-jobs.html)에 연결하고, AWS IoT에서 작업을 검색하고, 디바이스에서 이 작업을 처리하는 방법을 보여줍니다. AWS IoT Jobs 데모 프로젝트는 [FreeRTOS Windows 포트](https://www.freertos.org/FreeRTOS-Windows-Simulator-Emulator-for-Visual-Studio-and-Eclipse-MingW.html)를 사용하므로 Windows의 [Visual Studio Community](https://visualstudio.microsoft.com/vs/community/) 버전으로 빌드하고 평가할 수 있습니다. 마이크로컨트롤러 하드웨어는 필요하지 않습니다. 이 데모는 [coreMQTT 상호 인증 데모](mqtt-demo-ma.md)와 동일한 방식으로 TLS를 사용하여 AWS IoT MQTT 브로커에 대한 보안 연결을 설정합니다.

**참고**  
FreeRTOS 데모를 설정하고 실행하려면 [FreeRTOS 시작하기](freertos-getting-started.md)의 단계를 따릅니다.

## 소스 코드 구성
<a name="freertos-jobs-demo-source-code-org"></a>

데모 코드는 `jobs_demo.c` 파일에 있으며 [GitHub](https://github.com/aws/amazon-freertos/blob/main/demos/jobs_for_aws/jobs_demo.c) 웹 사이트 또는 `freertos/demos/jobs_for_aws/` 디렉터리에서 찾을 수 있습니다.

## AWS IoT MQTT 브로커 연결 구성
<a name="freertos-jobs-demo-configure-mqtt-broker"></a>

이 데모에서는 AWS IoT MQTT 브로커에 대한 MQTT 연결을 사용합니다. 이 연결은 [coreMQTT 상호 인증 데모](mqtt-demo-ma.md)와 동일한 방식으로 구성됩니다.

## 기능
<a name="freertos-jobs-demo-functionality"></a>

이 데모에서는 AWS IoT에서 작업을 수신하고 디바이스에서 이 작업을 처리하는 데 사용되는 워크플로를 보여줍니다. 이 데모는 대화형이며 AWS IoT 콘솔 또는 AWS Command Line Interface(AWS CLI)를 사용하여 작업을 생성해야 합니다. 작업 생성에 대한 자세한 내용은 *AWS CLI 명령 참조*의 [create-job](https://docs.aws.amazon.com/cli/latest/reference/iot/create-job.html)을 참조하세요. 이 데모는 메시지를 콘솔에 출력할 수 있도록 작업 문서에서 `action` 키가 `print`로 설정되어야 합니다.

이 작업 문서의 형식은 다음과 같습니다.

```
{
    "action": "print",
    "message": "ADD_MESSAGE_HERE"
}
```

AWS CLI를 사용하여 다음 예제 명령으로 작업을 생성할 수 있습니다.

```
aws iot create-job \
    --job-id t12 \
    --targets arn:aws:iot:region:123456789012:thing/device1 \
    --document '{"action":"print","message":"hello world!"}'
```

또한 이 데모는 메시지를 주제에 다시 게시할 수 있도록 `action` 키가 `publish`로 설정된 작업 문서도 사용합니다. 이 작업 문서의 형식은 다음과 같습니다.

```
{
    "action": "publish",
    "message": "ADD_MESSAGE_HERE",
    "topic": "topic/name/here"
}
```

데모는 데모를 종료하도록 `action` 키가 `exit`로 설정된 작업 문서를 수신할 때까지 루프를 반복합니다. 이 작업 문서의 형식은 다음과 같습니다.

```
{
    "action: "exit"
}
```

### Jobs 데모의 진입점
<a name="freertos-jobs-demo-functionality-entry-point"></a>

Jobs 데모 진입점 함수의 소스 코드는 [GitHub](https://github.com/aws/amazon-freertos/blob/main/demos/jobs_for_aws/jobs_demo.c#L773-L967)에서 찾을 수 있습니다. 이 함수는 다음 작업을 수행합니다.

1. `mqtt_demo_helpers.c`의 헬퍼 함수를 사용하여 MQTT 연결을 설정합니다.

1. `mqtt_demo_helpers.c`의 헬퍼 함수를 사용하여 `NextJobExecutionChanged` API에 대한 MQTT 주제를 구독합니다. 주제 문자열은 AWS IoT Jobs 라이브러리에 정의된 매크로를 사용하여 이전에 어셈블되었습니다.

1. `mqtt_demo_helpers.c`의 헬퍼 함수를 사용하여 `StartNextPendingJobExecution` API에 대한 MQTT 주제에 게시합니다. 주제 문자열은 AWS IoT Jobs 라이브러리에 정의된 매크로를 사용하여 이전에 어셈블되었습니다.

1. `prvEventCallback`를 반복적으로 직접 호출하여 처리를 위해 `MQTT_ProcessLoop`에 전달되는 메시지를 수신합니다.

1. 데모가 종료 작업을 수신하면 `mqtt_demo_helpers.c` 파일의 헬퍼 함수를 사용하여 MQTT 주제 구독을 취소하고 연결을 끊습니다.

### 수신된 MQTT 메시지에 대한 콜백
<a name="freertos-jobs-demo-functionality-callback"></a>

[prvEventCallback](https://github.com/aws/amazon-freertos/blob/main/demos/jobs_for_aws/jobs_demo.c#L674-L769) 함수는 AWS IoT Jobs `Jobs_MatchTopic` 라이브러리에서 을 호출하여 들어오는 MQTT 메시지를 분류합니다. 메시지 유형이 새 작업에 해당하는 경우 `prvNextJobHandler()`가 호출됩니다.

[PrvNextJobHandler](https://github.com/aws/amazon-freertos/blob/main/demos/jobs_for_aws/jobs_demo.c#L601-L670) 함수 및 이 함수가 호출하는 함수는 JSON 형식의 메시지에서 작업 문서를 파싱하고 작업에 지정된 작업을 실행합니다. 특히 주목할 것은 `prvSendUpdateForJob` 함수입니다.

### 실행 중인 작업에 대한 업데이트 전송
<a name="freertos-jobs-demo-functionality-send-update"></a>

[prvSendUpdateForJob()](https://github.com/aws/amazon-freertos/blob/main/demos/jobs_for_aws/jobs_demo.c#L413-L457) 함수는 Jobs 라이브러리에서 `Jobs_Update()`를 호출하여 바로 이어지는 MQTT 게시 작업에 사용되는 주제 문자열을 채웁니다.