

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

# 디바이스 통신 프로토콜
<a name="protocols"></a><a name="iot-message-broker"></a>

AWS IoT Core 는 MQTT 및 MQTT over WebSocket Secure(WSS) 프로토콜을 사용하여 메시지를 게시하고 구독하는 디바이스 및 클라이언트와 HTTPS 프로토콜을 사용하여 메시지를 게시하는 디바이스 및 클라이언트를 지원합니다. 모든 프로토콜은 IPv4 및 IPv6을 지원합니다. 이 섹션에서는 디바이스 및 클라이언트에 대한 다양한 연결 옵션에 대해 설명합니다.

## TLS 프로토콜 버전
<a name="connection-protocol-tls"></a>

AWS IoT Core 는 [TLS](https://en.wikipedia.org/wiki/Transport_Layer_Security) [버전 1.2](https://en.wikipedia.org/wiki/Transport_Layer_Security#TLS_1.2) 및 [TLS 버전 1.3](https://en.wikipedia.org/wiki/Transport_Layer_Security#TLS_1.3)을 사용하여 모든 통신을 암호화합니다. [도메인 구성에서 TLS 설정을 구성](https://docs.aws.amazon.com//iot/latest/developerguide/iot-endpoints-tls-config.html)하여 엔드포인트에 대한 추가 TLS 정책 버전을 구성할 수 있습니다. 디바이스를 AWS IoT Core에 연결할 때 클라이언트는 [다중 계정 등록](https://docs.aws.amazon.com//iot/latest/developerguide/x509-client-certs.html#multiple-account-cert), [구성 가능한 엔드포인트](https://docs.aws.amazon.com//iot/latest/developerguide/iot-custom-endpoints-configurable.html), [사용자 지정 도메인](https://docs.aws.amazon.com//iot/latest/developerguide/iot-custom-endpoints-configurable-custom.html) 및 [VPC 엔드포인트](https://docs.aws.amazon.com//iot/latest/developerguide/IoTCore-VPC.html)와 같은 기능에 필요한 [서버 이름 표시(SNI) 확장](https://tools.ietf.org/html/rfc3546#section-3.1)을 전송할 수 있습니다. 자세한 내용은 [AWS IoT의 전송 보안](transport-security.html)을 참조하세요.

[AWS IoT 디바이스 SDKs](iot-connect-devices.md#iot-connect-device-sdks)는 MQTT 및 MQTT over WSS를 지원하고 클라이언트 연결의 보안 요구 사항을 지원합니다. 클라이언트를 AWS IoT에 연결하기 위해 [AWS IoT 디바이스 SDKs](iot-connect-devices.md#iot-connect-device-sdks)를 사용하는 것이 좋습니다.

## 프로토콜, 포트 매핑 및 인증
<a name="protocol-mapping"></a><a name="protocol-port-mapping"></a>

디바이스 또는 클라이언트를 메시지 브로커에 연결하는 방법은 [인증 유형](#connection-protocol-auth-mode)을 사용하여 구성할 수 있습니다. 기본적으로 또는 SNI 확장이 전송되지 않는 경우 인증 방법은 디바이스가 사용하는 애플리케이션 프로토콜, 포트 및 애플리케이션 계층 프로토콜 협상(ALPN) TLS 확장을 기반으로 합니다. 다음 표에는 포트, 포트 및 ALPN을 기반으로 예상되는 인증이 나열되어 있습니다.


**프로토콜, 인증 및 포트 매핑**  

| 프로토콜 | 지원되는 작업 | Authentication | 포트 | ALPN 프로토콜 이름 | 
| --- | --- | --- | --- | --- | 
| MQTT over WebSocket | 게시, 구독 | 서명 버전 4 | 443 | 해당 사항 없음 | 
| MQTT over WebSocket | 게시, 구독 | 사용자 지정 인증 | 443 | 해당 사항 없음 | 
| MQTT | 게시, 구독 | X.509 클라이언트 인증서 | 443† | `x-amzn-mqtt-ca` | 
| MQTT | 게시, 구독 | X.509 클라이언트 인증서 | 8883 | 해당 사항 없음 | 
| MQTT | 게시, 구독 | 사용자 지정 인증 | 443† | `mqtt` | 
| HTTPS | 게시 전용 | 서명 버전 4 | 443 | 해당 사항 없음 | 
| HTTPS | 게시 전용 | X.509 클라이언트 인증서 | 443† | `x-amzn-http-ca` | 
| HTTPS | 게시 전용 | X.509 클라이언트 인증서 | 8443 | 해당 사항 없음 | 
| HTTPS | 게시 전용 | 사용자 지정 인증 | 443 | 해당 사항 없음 | 

**애플리케이션 계층 프로토콜 협상(ALPN)**  
†기본 엔드포인트 구성을 사용할 때 X.509 클라이언트 인증서 인증을 사용하여 포트 443에 연결하는 클라이언트는 [애플리케이션 계층 프로토콜 협상(ALPN)](https://tools.ietf.org/html/rfc7301) TLS 확장을 구현하고 클라이언트가 `ClientHello` 메시지의 일부로 전송한 ALPN ProtocolNameList에 나열된 [ALPN 프로토콜 이름](https://tools.ietf.org/html/rfc7301#section-3.1)을 사용해야 합니다.  
포트 443에서 [IoT:Data-ATS](iot-connect-devices.md#iot-connect-device-endpoint-table) 엔드포인트는 ALPN x-amzn-http-ca HTTP를 지원하지만 [IoT:Jobs](iot-connect-devices.md#iot-connect-device-endpoint-table) 엔드포인트는 그렇지 않습니다.  
ALPN x-amzn-mqtt-ca를 지원하는 포트 8443 HTTPS 및 포트 443 MQTT에서 [사용자 지정 인증](custom-authentication.md)은 사용할 수 없습니다.

클라이언트는 AWS 계정디바이스 엔드포인트에 연결합니다. 계정의 디바이스 엔드포인트를 찾는 방법에 대한 자세한 내용은 [AWS IoT 디바이스 데이터 및 서비스 엔드포인트](iot-connect-devices.md#iot-connect-device-endpoints) 섹션을 참조하세요.

**참고**  
AWS SDKs 전체 URL이 필요하지 않습니다. [`pubsub.py` GitHub의 AWS IoT Device SDK for Python 샘플](https://github.com/aws/aws-iot-device-sdk-python-v2/blob/master/samples/pubsub.py#L100)과 같은 엔드포인트 호스트 이름만 필요합니다. 다음 표에 제공된 대로 전체 URL을 전달하면 잘못된 호스트 이름과 같은 오류가 발생할 수 있습니다.


**에 연결 AWS IoT Core**  

|  프로토콜  |  엔드포인트 또는 URL  | 
| --- | --- | 
| MQTT | `{{iot-endpoint}}` | 
| MQTT over WSS | `wss://{{iot-endpoint}}/mqtt` | 
| HTTPS | `https://{{iot-endpoint}}/topics` | 

## 디바이스 통신을 위한 애플리케이션 프로토콜 선택
<a name="protocol-selection"></a>

디바이스 엔드포인트를 통한 대부분의 IoT 디바이스 통신에 대해 대부분의 경우 Secure MQTT 또는 WebSocket Secure(WSS)를 통한 MQTT 프로토콜을 사용하지만 디바이스 엔드포인트에서는 HTTPS도 지원합니다.

다음 표에서는가 디바이스 통신을 위해 두 개의 상위 수준 프로토콜(MQTT 및 HTTPS)을 AWS IoT Core 사용하는 방법을 비교합니다.


**AWS IoT 디바이스 프로토콜(MQTT 및 HTTPS) side-by-side**  

|  기능  |  [MQTT](mqtt.md)  |  [HTTPS](http.md)  | 
| --- | --- | --- | 
| 게시/구독 지원 | 게시 및 구독 | 게시 전용 | 
| SDK 지원 | [AWS 디바이스 SDKs](iot-connect-devices.md#iot-connect-device-sdks) MQTT 및 WSS 프로토콜 지원 | SDK를 지원하지 않지만 언어별 메서드를 사용하여 HTTPS 요청을 할 수 있습니다. | 
| 서비스 품질 지원 | [MQTT QoS 레벨 0과 1](mqtt.md#mqtt-qos) | QoS는 값이 0 또는 1일 수 있는 쿼리 문자열 파라미터 ?qos=qos를 전달하여 지원됩니다. 이 쿼리 문자열을 추가하여 원하는 QoS 값으로 메시지를 게시할 수 있습니다. | 
| 디바이스가 오프라인 상태일 때 누락된 메시지를 받을 수 있음 | 예 | 아니요 | 
| `clientId` 현장 지원 | 예 | 아니요 | 
| 디바이스 연결 해제 감지 | 예 | 아니요 | 
| 통신 보안 | 예. [프로토콜, 포트 매핑 및 인증](#protocol-mapping) 섹션을 참조하세요. | 예. [프로토콜, 포트 매핑 및 인증](#protocol-mapping) 섹션을 참조하세요. | 
| 주제 정의 | 정의된 애플리케이션 | 정의된 애플리케이션 | 
| 메시지 데이터 형식 | 정의된 애플리케이션 | 정의된 애플리케이션 | 
| 프로토콜 오버헤드 | 낮음 | 높음 | 
| 전력 소비 | 낮음 | 높음 | 

## 디바이스 통신을 위한 인증 유형 선택
<a name="connection-protocol-auth-mode"></a>

구성 가능한 엔드포인트를 사용하여 IoT 엔드포인트의 인증 유형을 구성할 수 있습니다. 또는 기본 구성을 사용하여 디바이스가 애플리케이션 프로토콜, 포트 및 ALPN TLS 확장 조합으로 인증하는 방법을 결정합니다. 선택한 인증 유형에 따라 디바이스가 연결할 때 인증하는 방법이 결정됩니다 AWS IoT Core. 5가지 인증 유형이 있습니다.

**X.509 인증서**

가 디바이스를 인증하도록 AWS IoT Core 검증하는 [X.509 클라이언트 인증서를](https://docs.aws.amazon.com//iot/latest/developerguide/x509-client-certs.html) 사용하여 디바이스를 인증합니다. 이 인증 유형은 보안 MQTT(TLS를 통한 MQTT) 및 HTTPS 프로토콜에서 작동합니다.

**사용자 지정 권한 부여자가 있는 X.509 인증서**

[X.509 클라이언트 인증서](https://docs.aws.amazon.com//iot/latest/developerguide/x509-client-certs.html)를 사용하여 디바이스를 인증하고 X.509 클라이언트 인증서 정보를 수신하는 [사용자 지정 권한 부여자](https://docs.aws.amazon.com//iot/latest/developerguide/config-custom-auth.html)를 사용하여 추가 인증 작업을 수행합니다. 이 인증 유형은 보안 MQTT(TLS를 통한 MQTT) 및 HTTPS 프로토콜에서 작동합니다. 이 인증 유형은 X.509 사용자 지정 인증을 사용하여 구성 가능한 엔드포인트를 사용해야만 가능합니다. ALPN 옵션은 존재하지 않습니다.

**AWS 서명 버전 4(SigV4)**

Cognito 또는 백엔드 서비스를 사용하여 디바이스를 인증하고 소셜 및 엔터프라이즈 페더레이션을 지원합니다. 이 인증 유형은 WebSocket Secure(WSS)를 통한 MQTT 및 HTTPS 프로토콜에서 작동합니다.

**사용자 지정 권한 부여자**

 AWS IoT Core로 전송된 사용자 지정 인증 정보를 처리하도록 Lambda 함수를 구성하여 디바이스를 인증합니다. 이 인증 유형은 보안 MQTT(TLS를 통한 MQTT), HTTPS 및 WebSocket Secure(WSS)를 통한 MQTT와 함께 작동합니다.

**기본값**

디바이스가 사용하는 포트 및/또는 애플리케이션 계층 프로토콜 협상(ALPN) 확장을 기반으로 디바이스를 인증합니다. 일부 추가 인증 옵션은 지원되지 않습니다. 자세한 내용은 [프로토콜, 포트 매핑 및 인증](#protocol-mapping) 단원을 참조하십시오.

아래 표에는 인증 유형과 애플리케이션 프로토콜의 지원되는 모든 조합이 나와 있습니다.


**인증 유형 및 애플리케이션 프로토콜의 지원되는 조합**  

| 인증 유형 | Secure MQTT(TLS를 통한 MQTT) | WebSocket Secure(WSS)를 통한 MQTT | HTTPS | 기본값 | 
| --- | --- | --- | --- | --- | 
| X.509 인증서 | ✓ |  | ✓ |  | 
| 사용자 지정 권한 부여자가 있는 X.509 인증서 | ✓ |  | ✓ |  | 
| AWS 서명 버전 4(SigV4) |  | ✓ | ✓ |  | 
| 사용자 지정 권한 부여자 | ✓ | ✓ | ✓ |  | 
| 기본값 |  |  |  | ✓ | 

## 연결 지속 시간 제한
<a name="connection-duration"></a>

HTTPS 연결이 요청을 수신하고 응답하는 데 걸리는 시간보다 오래 지속되지 않을 수 있습니다.

MQTT 연결 지속 시간은 사용하는 인증 기능에 따라 다릅니다. 다음 표에는 각 기능에 이상적인 조건에서 최대 연결 지속 시간이 나열되어 있습니다.


**인증 기능별 MQTT 연결 지속 시간**  

|  기능  |  최대 지속 시간\*  | 
| --- | --- | 
| X.509 클라이언트 인증서 | 1\~2주 | 
| 사용자 지정 인증 | 1\~2주 | 
| 서명 버전 4 | 최대 24시간 | 

\* 보장되지 않음

X.509 인증서 및 사용자 정의 인증을 사용하면 연결 지속 시간에 엄격한 제한이 없지만 몇 분 정도로 짧을 수 있습니다. 연결 중단은 다양한 이유로 발생할 수 있습니다. 다음 목록에는 가장 일반적인 이유 중 일부가 나와 있습니다.
+ Wi-Fi 가용성 중단
+ 인터넷 서비스 제공업체(ISP) 연결 중단
+ 서비스 패치
+ 서비스 배포
+ 서비스 Auto Scaling
+ 사용할 수 없는 서비스 호스트
+ 로드 밸런서 문제 및 업데이트
+ 클라이언트 측 오류

디바이스는 연결 해제를 감지하고 다시 연결하기 위한 전략을 구현해야 합니다. 연결 해제 이벤트 및 처리 방법에 대한 자세한 내용은 [수명 주기 이벤트](life-cycle-events.md)에서 [연결/연결 해제 이벤트](life-cycle-events.md#connect-disconnect) 섹션을 참조하세요.