콘텐츠로 이동하기
서버리스

Cloud Run용 WebSocket, HTTP/2, gRPC 양방향 스트림 소개

2021년 2월 22일
Ahmet Alp Balkan

Senior Developer Advocate

Google Cloud 사용해 보기

$300의 무료 크레딧과 20개 이상의 항상 무료인 제품으로 Google Cloud 사용을 시작해보세요.

무료 체험

 * 본 아티클의 원문은 2021년 1월 22일 Google Cloud 블로그(영문)에 게재되었습니다. 

Cloud Run을 위한 다양하고 새로운 트래픽 전달 기능인 엔드 투 엔드 HTTP/2 연결, WebSocket 지원, gRPC 양방향 스트리밍을 출시한다는 소식을 전해드립니다. 이로써 gRPC에서 제공하는 RPC 유형이 완성되었습니다. 이러한 기능을 사용하면 서버리스 인프라의 장점을 활용하면서 기존에 지원되지 않았던 새로운 종류의 애플리케이션을 Cloud Run에 배포할 수 있습니다. 이 기능은 현재 모든 Cloud Run 위치에서 퍼블릭 프리뷰로 제공됩니다.

스트리밍 지원은 반응성과 성능이 우수한 애플리케이션을 빌드하는 데 있어 중요한 부분입니다. 초기에 출시된 Cloud Run에서는 클라이언트의 요청과 서비스의 응답 모두가 버퍼링을 야기했기 때문에 스트리밍을 지원하지 않았습니다. 지난 10월 Google Cloud에서는 서버리스 컨테이너에서 클라이언트로 데이터를 스트리밍할 수 있는 서버 측 스트리밍 지원을 발표했으며 이로써 이전의 응답 한도인 32MB가 상향되고 gRPC를 위한 서버 측 스트리밍을 지원할 수 있게 되었습니다. 하지만 여전히 클라이언트 스트리밍양방향 스트리밍에서 WebSocket과 gRPC를 실행하는 것이 허용되지 않았습니다.

WebSocket 및 gRPC 양방향 스트리밍

이제 Cloud Run에는 새로운 양방향 스트리밍 기능이 지원되어 WebSocket(예: 소셜 피드, 공동작업 편집, 멀티플레이 게임)은 물론 모든 범위의 gRPC 양방향 스트리밍 API를 사용하는 애플리케이션을 실행할 수 있습니다. 이러한 양방향 스트리밍 기능을 사용하면 같은 요청에 대해 서버와 클라이언트 양쪽에서 데이터를 지속적으로 교환할 수 있습니다. WebSocket과 양방향 RPC를 사용하면 반응성이 우수한 애플리케이션과 API를 빌드할 수 있습니다. 즉 WebSocket과 같은 프로토콜을 사용해 Cloud Run 기반의 채팅 앱을 빌드하거나 gRPC를 사용해 스트리밍 API를 설계할 수 있습니다.

아래 예시에서는 Cloud Run에서 컨테이너로 실행되는 공동작업 실시간 '화이트보드' 애플리케이션을 보여 줍니다. 두 WebSocket 세션이 각각 서로 다른 브라우저 창에서 제공되며 두 창에서 캔버스가 실시간으로 업데이트되는 것을 확인할 수 있습니다.

https://storage.googleapis.com/gweb-cloudblog-publish/original_images/WebSockets_and_gRPC_bidirectional_streaming.gif

Cloud Run에서 WebSocket을 사용하면 별도의 구성이 필요 없으며 즉시 사용할 수 있습니다. gRPC로 클라이언트 측 스트리밍이나 양방향 스트리밍을 사용하려면 HTTP/2 지원이 필요한데 이 내용에 대해서는 다음 섹션에서 살펴보겠습니다.

Cloud Run에서 WebSocket 샘플 애플리케이션을 사용해 보려면 이 링크를 클릭하여 Socket.io에서 화이트보드 예시를 배포하세요.

WebSocket 스트림에는 아직 Cloud Run 서비스에서 구성한 요청 제한 시간이 적용된다는 점을 유의하세요. 따라서 WebSocket을 사용하려는 경우 그에 맞게 요청 제한 시간을 설정해야 합니다.

엔드 투 엔드 HTTP/2 지원

다른 많은 앱과 달리 Cloud Run은 첫 번째 출시부터 gRPC용 엔드 투 엔드 HTTP/2를 포함한 HTTP/2를 지원했습니다. 클라이언트가 프로토콜을 사용하도록 자동으로 업그레이드하는 방법으로 지원이 가능했으며 그 덕분에 서비스의 속도와 효율성을 향상할 수 있었습니다. 하지만 지금까지는 HTTP/2 요청이 컨테이너로 전송되면 HTTP/1로 다운그레이드되는 문제가 있었습니다.

이제부터는 Cloud Run에서 엔드 투 엔드 HTTP/2 전송 기능을 사용할 수 있습니다. 이 기능은 기존에 HTTP/2를 지원하는 애플리케이션에 특히 유용하며 HTTP/2를 지원하지 않는 앱의 경우 HTTP/2 트래픽이 컨테이너에 도착할 때까지 Cloud Run에서 트래픽을 처리합니다.

서비스에서 엔드 투 엔드 HTTP/2를 사용해 트래픽을 전달하도록 하려면 애플리케이션에서 HTTP/2 일반 텍스트('h2c'라고도 함) 형식으로 요청을 처리할 수 있어야 합니다. Google Cloud에서는 개발자가 'h2c' 프로토콜을 사용해 볼 수 있는 샘플 h2c 서버 애플리케이션(Go로 작성)을 개발했습니다. 링크된 저장소를 클론하여 실행하면 이 앱을 빌드하고 Cloud Run에 배포할 수 있습니다.

로드 중...

위 예시 명령어에서 '--use-http2' 옵션은 애플리케이션이 'h2c' 프로토콜을 지원하며 서비스가 HTTP/2 요청을 다운그레이드 없이 처리할 수 있음을 의미합니다.

서비스를 배포한 후에는 다음 명령어를 실행하여 요청이 HTTP/1로 다운그레이드되지 않고 HTTP/2를 사용하여 처리되었는지 확인합니다.

curl -v --http2-prior-knowledge https://<SERVICE_URL>

Google Cloud Console에서도 HTTP/2를 사용하도록 서비스를 구성할 수 있습니다.

https://storage.googleapis.com/gweb-cloudblog-publish/images/advance_settings.max-1000x1000.jpg

시작하기 

이제 이 새로운 네트워킹 기능을 사용하여 더욱 다양한 웹 서비스와 API를 Cloud Run에서 배포 및 실행할 수 있습니다. 새로운 기능과 현재 미리보기로 제공되는 기능에 대해 자세히 알아보려면 WebSockets 데모 앱 또는 샘플 h2c 서버 앱을 확인하세요.

문제가 발생하거나 제안사항이 있다면 알려주세요. Google에서 진행하는 연구에 참여하면 Cloud Run의 미래를 함께 만들 수 있습니다.
게시 위치