

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

# 네트워크 전송 인터페이스 이식
<a name="afr-porting-network-transport-interface"></a>

## TLS 라이브러리 통합
<a name="afr-porting-tls"></a>

전송 계층 보안(TLS) 인증의 경우 선호하는 TLS 스택을 사용합니다. FreeRTOS 라이브러리로 테스트되었으므로 [Mbed TLS](https://tls.mbed.org/)를 사용하는 것이 좋습니다. 이 [GitHub](https://github.com/FreeRTOS/FreeRTOS) 리포지토리에서 예제를 찾을 수 있습니다.

디바이스에서 사용하는 TLS 구현에 관계없이 TCP/IP 스택을 사용하여 TLS 스택의 기본 전송 후크를 구현해야 합니다. [AWS IoT에서 지원하는 TLS 암호 제품군](https://docs.aws.amazon.com/iot/latest/developerguide/transport-security.html#tls-cipher-suite-support)을 지원해야 합니다.

## 네트워크 전송 인터페이스 라이브러리 이식
<a name="network-intro"></a>

[coreMQTT](https://www.freertos.org/mqtt/index.html) 및 [CoreHTTP](https://www.freertos.org/http/index.html)를 사용하려면 네트워크 전송 인터페이스를 구현해야 합니다. 네트워크 전송 인터페이스에는 단일 네트워크 연결에서 데이터를 보내고 받는 데 필요한 함수 포인터와 컨텍스트 데이터가 포함되어 있습니다. 자세한 내용은 [전송 인터페이스](https://www.freertos.org/network-interface.html)를 참조하세요. FreeRTOS는 이러한 구현을 검증하기 위한 일련의 네트워크 전송 인터페이스 테스트를 기본 제공합니다. 다음 섹션에서는 이러한 테스트를 실행하도록 프로젝트를 설정하는 방법을 안내합니다.

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

이 테스트를 이식하려면 다음이 필요합니다.
+ 검증된 FreeRTOS 커널 포트로 FreeRTOS를 빌드할 수 있는 빌드 시스템이 포함된 프로젝트.
+ 정상 작동하는 네트워크 드라이버 구현.

## 이식
<a name="porting-network-transport-interface"></a>
+ [ FreeRTOS-Libraries-Integration-Tests](https://github.com/FreeRTOS/FreeRTOS-Libraries-Integration-Tests)를 하위 모델로 프로젝트에 추가합니다. 하위 모듈은 빌드가 가능하다면 프로젝트 내 어디에 배치하든 상관이 없습니다.
+ `config_template/test_execution_config_template.h` 및 `config_template/test_param_config_template.h`를 빌드 경로의 프로젝트 위치에 복사하고 이름을 `test_execution_config.h` 및 `test_param_config.h`로 바꿉니다.
+ 관련 파일을 빌드 시스템에 포함합니다. `CMake`를 사용하는 경우 `src/transport_interface_tests.cmake` 및 `qualification_test.cmake`가 관련 파일을 포함하는 데 사용됩니다.
+ 적절한 프로젝트 위치에서 다음 함수를 구현합니다.
+ 
  + `network connect function`: 서명은 `src/common/network_connection.h`에서 `NetworkConnectFunc`에 의해 정의됩니다. 이 함수는 네트워크 컨텍스트에 대한 포인터, 호스트 정보에 대한 포인터, 네트워크 보안 인증 정보에 대한 포인터를 받습니다. 제공된 네트워크 보안 인증 정보를 사용하여 호스트 정보에 지정된 서버와의 연결을 설정합니다.
  + `network disconnect function`: 서명은 `src/common/network_connection.h`에서 `NetworkDisconnectFunc`에 의해 정의됩니다. 이 함수는 네트워크 컨텍스트에 대한 포인터를 받습니다. 네트워크 컨텍스트에 저장된 이전에 설정된 연결을 해제합니다.
  + `setupTransportInterfaceTestParam()`: 이 함수는 `src/transport_interface/transport_interface_tests.h`에 정의되어 있습니다. 구현은 `transport_interface_tests.h`에 정의된 것과 정확히 같은 이름 및 서명을 가져야 합니다. 이 함수는 *TransportInterfaceTestParam* 구조에 대한 포인터를 받습니다. 전송 인터페이스 테스트에서 사용되는 *TransportInterfaceTestParam* 구조의 필드를 채웁니다.
+ 테스트 출력 로그가 디바이스 로그와 인터리브되지 않도록 **UNITY\$1OUTPUT\$1CHAR**을 구현합니다.
+ 애플리케이션에서 `runQualificationTest()`를 직접 호출합니다. 직접 호출 전에 디바이스 하드웨어를 제대로 초기화하고 네트워크를 연결해야 합니다.

### 보안 인증 정보 관리(디바이스 내 생성 키)
<a name="cred-management-key"></a>

`test_param_config.h`에서 **FORCE\$1GENERATE\$1NEW\$1KEY\$1PAIR**을 1로 설정한 경우 디바이스 애플리케이션은 새 디바이스 내 키 페어를 생성하고 퍼블릭 키를 출력합니다. 디바이스 애플리케이션은 에코 서버와 TLS 연결을 설정할 때 **ECHO\$1SERVER\$1ROOT\$1CA** 및 **TRANSPORT\$1CLIENT\$1CERTIFICATE**를 에코 서버 루트 CA 및 클라이언트 인증서로 사용합니다. IDT는 검증 실행 중에 이러한 파라미터를 설정합니다.

### 보안 인증 정보 관리(키 가져오기)
<a name="cred-management-importing-key"></a>

디바이스 애플리케이션은 에코 서버와 TLS 연결을 설정할 때 `test_param_config.h`의 **ECHO\$1SERVER\$1ROOT\$1CA**, **TRANSPORT\$1CLIENT\$1CERTIFICATE** 및 **TRANSPORT\$1CLIENT\$1PRIVATE\$1KEY**를 에코 서버 루트 CA, 클라이언트 인증서 및 클라이언트 프라이빗 키로 사용합니다. IDT는 검증 실행 중에 이러한 파라미터를 설정합니다.

## 테스트
<a name="testing-transport-interface"></a>

이 섹션에서는 검증 테스트를 사용하여 로컬에서 전송 인터페이스를 테스트하는 방법을 설명합니다. 추가 세부 정보는 GitHub에서 FreeRTOS-Libraries-Integration-Tests의 [transport\$1interface](https://github.com/FreeRTOS/FreeRTOS-Libraries-Integration-Tests/tree/main/src/transport_interface) 섹션에 제공된 README.md 파일을 통해 확인할 수 있습니다.

또는 IDT를 사용하여 실행을 자동화할 수도 있습니다. 자세한 내용은 *FreeRTOS 사용 설명서*의 [FreeRTOS용AWS IoT Device Tester](https://docs.aws.amazon.com/freertos/latest/userguide/device-tester-for-freertos-ug.html)를 참조하세요.

### 테스트 활성화
<a name="enabling-test"></a>

`test_execution_config.h`를 열고 **TRANSPORT\$1INTERFACE\$1TEST\$1ENABLED**를 1로 정의합니다.

### 테스트를 위해 에코 서버를 설정합니다.
<a name="configuring-echo-server-test"></a>

로컬 테스트에는 테스트를 실행하는 디바이스에서 액세스할 수 있는 에코 서버가 필요합니다. 전송 인터페이스 구현이 TLS를 지원하는 경우 에코 서버는 TLS를 지원해야 합니다. 아직 이 구현이 없다면 [FreeRTOS-Libraries-Integration-Tests](https://github.com/FreeRTOS/FreeRTOS-Libraries-Integration-Tests/tree/main/tools/echo_server) GitHub 리포지토리에 에코 서버 구현이 있습니다.

### 테스트를 위한 프로젝트 구성
<a name="configure-project"></a>

`test_param_config.h`에서 **ECHO\$1SERVER\$1ENDPOINT** 및 **ECHO\$1SERVER\$1PORT**를 이전 단계의 엔드포인트 및 서버 설정으로 업데이트합니다.

### 보안 인증 정보 설정(디바이스 내 생성 키)
<a name="setup-credentials-device-key"></a>
+ **ECHO\$1SERVER\$1ROOT\$1CA**를 에코 서버의 서버 인증서로 설정합니다.
+ **FORCE\$1GENERATE\$1NEW\$1KEY\$1PAIR**를 1로 설정하여 키 페어를 생성하고 퍼블릭 키를 가져옵니다.
+ 키 생성 후 **FORCE\$1GENERATE\$1NEW\$1KEY\$1PAIR**를 다시 0으로 설정합니다.
+ 퍼블릭 키 및 서버 키와 인증서를 사용하여 클라이언트 인증서를 생성합니다.
+ **TRANSPORT\$1CLIENT\$1CERTIFICATE**를 생성된 클라이언트 인증서로 설정합니다.

### 보안 인증 정보 설정(키 가져오기)
<a name="setup-credentials-import-key"></a>
+ **ECHO\$1SERVER\$1ROOT\$1CA**를 에코 서버의 서버 인증서로 설정합니다.
+ **TRANSPORT\$1CLIENT\$1CERTIFICATE**를 사전 생성된 클라이언트 인증서로 설정합니다.
+ **TRANSPORT\$1CLIENT\$1PRIVATE\$1KEY**를 사전 생성된 클라이언트 프라이빗 키로 설정합니다.

### 애플리케이션 빌드 및 플래시
<a name="build-flash"></a>

원하는 도구 체인을 사용하여 애플리케이션을 빌드하고 플래시합니다. `runQualificationTest()`가 간접 호출되면 전송 인터페이스 테스트가 실행됩니다. 테스트 결과가 직렬 포트로 출력됩니다.

**참고**  
FreeRTOS용 디바이스를 공식적으로 검증하려면 디바이스의 이식된 소스 코드를 OTA PAL 및 OTA E2E 테스트 그룹과 비교하여 검증해야 합니다 AWS IoT Device Tester. [FreeRTOS 사용 설명서의 FreeRTOS AWS IoT Device Tester 용 사용](https://docs.aws.amazon.com/freertos/latest/userguide/device-tester-for-freertos-ug.html)의 지침에 따라 포트 검증 AWS IoT Device Tester 을 설정합니다. *FreeRTOS * 특정 라이브러리의 포트를 테스트하려면 폴더의 `device.json` 파일 AWS IoT Device Tester `configs`에서 올바른 테스트 그룹을 활성화해야 합니다.