Cloud Run이란 무엇인가요?

Cloud Run은 Google의 확장 가능한 인프라에서 직접 컨테이너를 실행할 수 있게 해주는 관리형 컴퓨팅 플랫폼입니다.

컨테이너 이미지를 빌드할 경우 모든 프로그래밍 언어로 작성된 코드를 Cloud Run에 배포할 수 있습니다. 실제로 컨테이너 이미지 빌드는 선택사항입니다. Go, Node.js, Python, Java, .NET Core, Ruby 또는 지원되는 프레임워크를 사용하는 경우 사용 중인 언어의 권장사항에 따라 컨테이너를 빌드하는 소스 기반 배포 옵션을 사용할 수 있습니다.

Google은 Cloud Run을 Google Cloud에서 다른 서비스와 함께 잘 작동하도록 빌드했으므로 완전한 기능을 갖춘 애플리케이션을 빌드할 수 있습니다.

간단히 말해, Cloud Run에서는 개발자가 코드 작성에 시간을 쓰고 Cloud Run 서비스를 운영, 구성, 확장하는 데는 시간을 거의 쓰지 않아도 됩니다. Cloud Run을 사용하면 생산성을 높이기 위해 클러스터를 만들거나 인프라를 관리할 필요가 없습니다.

서비스, 작업, 작업자 풀: 코드 실행을 위한 세 가지 방법

Cloud Run에서 코드는 서비스, 작업 또는 작업자 풀로 실행될 수 있습니다. 이러한 모든 리소스 유형은 동일한 환경에서 실행되며 Google Cloud의 다른 서비스와 동일한 통합을 사용할 수 있습니다.

다음 표에서는 각 Cloud Run 리소스 유형에서 제공하는 옵션을 간략하게 보여줍니다.

리소스 설명
서비스 다양한 주요 측정항목을 기반으로 자동 확장되는 스테이트리스(Stateless) 임시 인스턴스를 사용하여 고유하고 안정적인 엔드포인트로 전송된 HTTP 요청에 응답하고 이벤트와 함수에도 응답합니다.
작업 수동으로 또는 일정에 따라 실행되고 완료될 때까지 실행되는 요청 기반이 아닌 병렬 처리 가능한 작업을 처리합니다.
작업자 풀 가져오기 기반 워크로드(예: Kafka 소비자, Pub/Sub pull 큐, RabbitMQ 소비자)와 같은 요청 기반이 아닌 워크로드를 처리합니다.

Cloud Run 서비스

Cloud Run 서비스는 안정적인 HTTPS 엔드포인트를 실행하는 데 필요한 인프라를 제공합니다. 사용자는 코드가 TCP 포트에서 리슨하고 HTTP 요청을 처리하는지 확인해야 합니다.

다음 다이어그램은 HTTPS 엔드포인트를 사용하여 클라이언트의 웹 요청과 이벤트를 처리하기 위해 여러 컨테이너 인스턴스를 실행하는 Cloud Run 서비스를 보여줍니다.

Cloud Run 서비스는 웹 요청 및 이벤트를 처리하기 위해 컨테이너를 실행합니다.

표준 서비스에는 다음 기능이 포함됩니다.

모든 서비스의 고유 HTTPS 엔드포인트
모든 Cloud Run 서비스에는 *.run.app 도메인의 고유한 하위 도메인에 HTTPS 엔드포인트가 있습니다. 커스텀 도메인을 구성할 수도 있습니다. Cloud Run에서는 TLS가 자동으로 관리되고, WebSocket, HTTP/2(엔드 투 엔드), gRPC(엔드 투 엔드)가 지원됩니다.
빠른 요청 기반 자동 확장
Cloud Run은 결제 설정이 인스턴스 기반 결제로 설정된 경우 빠르게 수평 확장되어 모든 수신 요청을 처리하거나 요청 외의 증가된 CPU 사용률을 처리합니다. 인스턴스 1,000개까지 서비스를 신속하게 확장할 수 있고, 할당량 증가를 요청하면 그 이상으로 확장 가능합니다. 수요가 증가하면 Cloud Run이 유휴 컨테이너를 삭제합니다. 비용이나 다운스트림 시스템 과부하가 걱정될 경우에는 최대 인스턴스 수를 제한할 수 있습니다.
선택적 수동 확장
기본적으로 Cloud Run은 더 많은 트래픽을 처리하기 위해 더 많은 인스턴스로 자동 확장되지만 수동 확장을 사용하여 이 동작을 재정의하여 확장 동작을 제어할 수 있습니다.
기본 제공되는 트래픽 관리

새 버전을 배포할 위험을 줄이기 위해 Cloud Run에서는 수신 트래픽을 최신 버전으로 라우팅하거나 이전 버전으로 롤백하거나 동시에 여러 버전으로 트래픽을 분할하는 등의 점진적 출시 수행을 지원합니다.

예를 들어 요청의 1%를 새 버전으로 전송하는 것으로 시작해서 원격 분석을 모니터링하면서 백분율을 늘릴 수 있습니다.

공개 및 비공개 서비스

인터넷에서 Cloud Run 서비스에 연결하거나 다음 방법으로 액세스를 제한할 수 있습니다.

Firebase 호스팅 및 Cloud CDN과 같은 콘텐츠 전송 네트워크(CDN)로 Cloud Run 서비스를 프론팅하여 클라이언트에 더 가까운 에지 위치에서 캐시 가능한 애셋을 제공할 수 있습니다.

0개 및 최소 인스턴스로 조정

기본적으로 결제가 인스턴스 기반 결제로 설정된 경우 Cloud Run은 모든 수신 요청을 처리하거나 요청 외의 증가된 CPU 사용률을 처리하기 위해 인스턴스를 자동으로 추가 및 삭제합니다.

서비스에 수신 요청이 없으면 마지막 남은 인스턴스도 삭제됩니다. 이 동작을 일반적으로 Scale-to-zero라고 부릅니다. 이후 요청이 수신될 때 활성 인스턴스가 없으면 Cloud Run에서 새 인스턴스를 만듭니다. 이렇게 하면 컨테이너의 요청 처리 준비에 걸리는 시간에 따라 첫 번째 요청의 응답 시간이 늘어납니다.

이 동작을 변경하려면 다음 방법 중 하나를 사용합니다.

서비스 사용량에 따른 가격 책정

Scale-to-zero는 100밀리초의 세밀한 단위로 인스턴스에 할당되는 CPU 및 메모리에 대한 비용이 청구되므로 경제적인 면에서 매력적입니다. 최소 인스턴스를 구성하지 않은 경우 서비스를 사용하지 않으면 비용이 청구되지 않습니다. 넉넉한 혜택을 제공하는 무료 등급이 있습니다. 자세한 내용은 가격 책정을 참조하세요.

사용 설정할 수 있는 결제 설정에는 두 가지가 있습니다.

요청 기반
인스턴스가 요청을 처리하지 않으면 비용이 청구되지 않습니다. 요청별 비용을 지불합니다.
인스턴스 기반
인스턴스의 전체 기간에 대한 비용이 청구됩니다. 요청별 비용은 없습니다.

넉넉한 혜택을 제공하는 무료 등급이 있습니다. 자세한 내용은 가격 책정을, 서비스에 요청 기반 또는 인스턴스 기반 결제를 사용 설정하는 방법은 결제 설정을 참조하세요.

폐기 가능한 컨테이너 파일 시스템

Cloud Run의 인스턴스는 일회용입니다. 모든 컨테이너에는 인메모리 방식의 쓰기 가능한 파일 시스템 오버레이가 포함되며, 컨테이너가 종료되면 사라집니다. Cloud Run은 수평 축소 등의 경우 인스턴스에 요청 전송을 중지하고 종료할 시간을 결정합니다.

Cloud Run이 인스턴스를 종료하려고 할 때 경고를 받기 위해 애플리케이션에서 SIGTERM 신호를 잡을 수 있습니다. 이렇게 하면 코드가 로컬 버퍼를 플러시하고 외부 데이터 스토어에 로컬 데이터를 유지할 수 있습니다.

파일을 영구적으로 유지하려면 Cloud Storage와 통합하거나 네트워크 파일 시스템(NFS)을 마운트합니다.

Cloud Run 서비스를 사용해야 하는 경우

Cloud Run 서비스는 요청, 이벤트 또는 함수를 처리하는 코드에 매우 효과적입니다. 사용 사례의 예를 들면 다음과 같습니다.

웹사이트 및 웹 애플리케이션
원하는 스택을 사용해서 웹앱을 빌드하고 SQL 데이터베이스에 액세스하고, 동적 HTML 페이지를 렌더링합니다.
API 및 마이크로서비스
REST API, GraphQL API 또는 HTTP나 gRPC로 통신하는 비공개 마이크로서비스를 빌드할 수 있습니다.
스트리밍 데이터 처리
Cloud Run 서비스는 Pub/Sub 푸시 구독에서 메시지를 수신하고 Eventarc에서 이벤트를 수신할 수 있습니다.
비동기 워크로드
Cloud Run Functions는 Pub/Sub 주제의 메시지, Cloud Storage 버킷의 변경사항, Firebase 이벤트와 같은 비동기 이벤트에 응답할 수 있습니다.
AI 추론
GPU가 구성되었는지 여부와 관계없이 Cloud Run 서비스는 추론 모델 및 모델 학습과 같은 AI 워크로드를 호스팅할 수 있습니다.

Cloud Run 작업

스크립트를 사용하는 등 코드에서 작업을 수행하다가 중지하는 경우 Cloud Run 작업을 사용하여 코드를 실행할 수 있습니다. Google Cloud CLI를 사용하거나, 반복 작업을 예약하거나, 워크플로의 일부로 실행하여 명령줄에서 작업을 실행할 수 있습니다.

작업을 더 빠르게 실행하는 배열 작업

스크립트 또는 도구를 실행할 때 일반적으로 그렇듯이 작업이 코드 실행을 위해 하나의 인스턴스를 시작할 수 있습니다.

하지만 여러 개의 동일하고 독립적인 인스턴스를 동시에 시작하는 배열 작업을 사용할 수도 있습니다. 배열 작업을 사용하면 여러 개의 독립된 태스크로 분할할 수 있는 작업을 빠르게 처리할 수 있습니다.

다음 다이어그램은 7개의 태스크가 있는 작업을 순차적으로 실행하는 데 4개의 인스턴스가 독립적인 태스크를 동시에 처리할 수 있는 동일한 작업보다 시간이 더 오래 걸리는 것을 보여줍니다.

동시에 로드할 수 있는 작업을 더 빠르게 실행하는 배열 작업

예를 들어 Cloud Storage에서 이미지 1,000개의 크기를 조절하고 자르는 경우 연속 처리 속도가 Cloud Run에서 자동 확장을 관리하는 여러 인스턴스에서 동시에 처리할 때보다 느립니다.

Cloud Run 작업을 사용해야 하는 경우

Cloud Run 작업은 작업을 수행하고 작업이 완료되면 종료되는 코드를 실행하는 데 적합합니다. 예를 들면 다음과 같습니다.

스크립트 또는 도구
스크립트를 실행하여 데이터베이스 마이그레이션 또는 기타 운영 작업을 수행합니다.
배열 작업
Cloud Storage 버킷에 있는 모든 파일의 처리를 대량으로 동시에 수행합니다.
예약된 작업
정기적인 간격으로 인보이스를 만들고 전송하거나 데이터베이스 쿼리 결과를 XML로 저장하고 파일을 몇 시간 간격으로 업로드합니다.
AI 워크로드
GPU가 구성되었는지 여부와 관계없이 Cloud Run 작업은 일괄 추론, 모델 파인 튜닝, 모델 학습과 같은 AI 워크로드를 호스팅할 수 있습니다.

Google Cloud 통합

Cloud Run은 폭넓은 Google Cloud생태계와 통합되므로 이를 사용하면 완전한 기능을 갖춘 애플리케이션을 빌드할 수 있습니다.

필수적인 통합은 다음과 같습니다.

데이터 스토리지
Cloud Run은 Cloud SQL(관리형 MySQL, PostgreSQL, SQL Server), Memorystore(관리형 Redis 및 Memcached), Firestore, Spanner, Cloud Storage 등과 통합됩니다. 전체 목록은 데이터 스토리지를 참조하세요.
로깅 및 오류 보고
Cloud Logging은 컨테이너 로그를 자동으로 수집합니다. 로그에 예외가 있으면 Error Reporting이 이를 집계하고 알림을 표시합니다. 지원되는 언어는 Go, 자바, Node.js, PHP, Python, Ruby, .NET입니다.
서비스 ID
모든 Cloud Run 버전은 서비스 계정에 연결되고 Google Cloud 클라이언트 라이브러리는 이 서비스 계정을 투명하게 사용하여 Google Cloud API에 인증합니다.
지속적 배포
GitHub, Bitbucket, Cloud Source Repositories에 소스 코드를 저장할 경우 새 커밋을 자동으로 배포하도록 Cloud Run을 구성할 수 있습니다.
비공개 네트워킹
Cloud Run 인스턴스는 서버리스 VPC 액세스 커넥터를 통해 가상 프라이빗 클라우드 네트워크의 리소스에 연결할 수 있습니다. 이렇게 하면 서비스가 Compute Engine 가상 머신 또는 Google Kubernetes Engine 또는 Memorystore와 같이 Compute Engine을 기반으로 한 제품에 연결할 수 있습니다.
Google Cloud API
서비스 코드는 Google Cloud API로 투명하게 인증됩니다. 여기에는 Cloud Vision API, Speech-to-Text API, AutoML Natural Language API, Cloud Translation API 등의 AI 및 Machine Learning API가 포함됩니다.
백그라운드 작업
나중에 또는 웹 요청을 반환한 직후 실행되도록 코드를 예약할 수 있습니다. Cloud Run은 Cloud Tasks와 연동되어 확장 가능하고 안정적인 비동기 실행을 제공합니다.

Cloud Run과 연동되는 다양한 Google Cloud 서비스 목록은 Google Cloud 서비스에 연결을 참조하세요.

코드를 컨테이너 이미지에 패키징해야 함

서비스, 작업 또는 작업자 풀을 Cloud Run에 배포할 수 있으려면 이를 컨테이너 이미지에 패키징해야 합니다. 컨테이너에 익숙하지 않은 경우에는 간단한 다음 개념 소개를 참조하세요.

컨테이너 이미지 빌드

다이어그램에 표시된 것처럼 소스 코드, 애셋, 라이브러리 종속 항목을 사용하여 컨테이너 이미지를 빌드합니다. 컨테이너 이미지는 서비스 실행에 필요한 모든 것이 포함된 패키지입니다. 여기에는 빌드 아티팩트, 애셋, 시스템 패키지, 런타임(선택사항)이 포함됩니다. 컨테이너 이미지는 컨테이너화된 애플리케이션을 기본적으로 이동 가능하게 만들어 줍니다. 컨테이너가 실행될 수 있는 어디에서든 실행됩니다. 빌드 아티팩트의 예시에는 컴파일된 바이너리 또는 스크립트 파일이 포함되고, 런타임 예시에는 Node.js 자바스크립트 런타임 또는 자바 가상 머신(JVM)이 있습니다.

고급 실무자는 Cloud Run에서 코드를 실행하는 데 추가 부담이 들지 않는다는 사실을 중요하게 여깁니다. Cloud Run에서는 모든 바이너리를 실행할 수 있습니다.

편리함을 추구하거나 애플리케이션 컨테이너화를 Google에 위임하려는 사용자를 위해 Cloud Run은 오픈소스 Google Cloud 빌드팩과 통합되어 소스 기반 배포를 제공합니다.

다음 단계