

# CloudFront 배포에 WebSocket 사용
<a name="distribution-working-with.websockets"></a>

Amazon CloudFront는 클라이언트와 서버 사이에 수명이 긴 양방향 연결이 필요할 때 유용한 TCP 기반 프로토콜인 WebSocket의 사용을 지원합니다. 지속적 연결이 실시간 애플리케이션의 요구 사항에 포함되는 경우가 흔히 있습니다. WebSockets를 사용할 수 있는 시나리오에는 채팅 플랫폼, 온라인 협업 공간, 멀티 플레이어 게임 및 금융 거래 플랫폼과 같이 실시간 데이터 피드를 제공하는 서비스 등이 포함됩니다. WebSocket 연결에서는 데이터가 전이중 통신의 양방향으로 흐를 수 있습니다.

WebSocket 기능은 모든 배포판에서 작동하도록 자동으로 활성화됩니다. WebSocket을 사용하려면 배포에 연결된 캐시 동작에서 다음 중 하나를 구성합니다.
+ 모든 뷰어 요청 헤더를 오리진에 전달합니다. [AllViewer 관리형 오리진](using-managed-origin-request-policies.md#managed-origin-request-policy-all-viewer) 요청 정책을 사용할 수 있습니다.
+ 특히 원본 요청 정책에서 `Sec-WebSocket-Key` 및 `Sec-WebSocket-Version` 요청 헤더를 구체적으로 전달하세요.

## WebSocket 프로토콜의 작동 방식
<a name="distribution-working-with.websockets.how-it-works"></a>

WebSocket 프로토콜은 독립적인 TCP 기반의 프로토콜이며, 이를 통해 HTTP의 오버헤드 및 잠재적인 지연 시간 연장을 방지할 수 있습니다.

WebSocket 연결을 설정하기 위해, 클라이언트가 HTTP의 업그레이드 의미론을 사용하는 정규 HTTP 요청을 전송하여 프로토콜을 변경합니다. 그 후에는 서버가 핸드셰이크를 완료할 수 있습니다. WebSocket 연결은 개방 상태를 유지하며 클라이언트 또는 서버가 매회 새로운 연결을 설정할 필요 없이 서로에게 데이터 프레임을 전송할 수 있습니다.

기본적으로 WebSocket 프로토콜은 정규 WebSocket 연결에 포트 80을, TLS를 통한 WebSocket 연결에는 포트 443을 사용합니다. CloudFront [뷰어 프로토콜 정책](DownloadDistValuesCacheBehavior.md#DownloadDistValuesViewerProtocolPolicy) 및 [프로토콜(사용자 지정 오리진만 해당)](DownloadDistValuesOrigin.md#DownloadDistValuesOriginProtocolPolicy)에 대해 선택한 옵션은 WebSocket 연결뿐 아니라 HTTP 트래픽에도 적용됩니다.

## WebSocket 요구 사항
<a name="distribution-working-with.websockets.requirements"></a>

WebSocket 요청은 다음 표준 형식으로 [RFC 6455](https://datatracker.ietf.org/doc/html/rfc6455)를 준수해야 합니다.

**Example 예제 클라이언트 요청**  

```
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Origin: https://example.com
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
```

**Example 샘플 서버 응답**  

```
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
Sec-WebSocket-Protocol: chat
```

WebSocket 연결이 클라이언트나 서버 또는 네트워크 장애로 인해 끊어진 겨우, 클라이언트 애플리케이션이 서버와의 연결을 다시 시작해야 합니다.

## 권장 WebSocket 헤더
<a name="distribution-working-with.websockets.recomended-settings"></a>

WebSocket을 사용할 때 예상치 못한 압축 관련 문제를 방지하려면 [오리진 요청 정책](origin-request-create-origin-request-policy.md)에 다음 헤더를 포함하는 것이 좋습니다.
+ `Sec-WebSocket-Key`
+ `Sec-WebSocket-Version`
+ `Sec-WebSocket-Protocol`
+ `Sec-WebSocket-Accept`
+ `Sec-WebSocket-Extensions`

**참고**  
현재 CloudFront는 HTTP/1.1 프로토콜을 통한 WebSocket 연결만 지원합니다.