[GCP]Serverless 서비스인 Cloud Run 알아보기 1부 — Cloud Run 개요

이정운 (Jungwoon Lee)
google-cloud-apac
Published in
11 min readNov 3, 2020

안녕하세요 이정운 입니다.

클라우드 환경의 다양한 서비스 설계 방식에서 기존의 VM 방식이 가진 정적인 한계와 시스템 유지보수에 대한 이슈 때문에 몇년 전부터 바람이 불었던 것이 Serverless 라고 불리워지는 새로운 형태의 서비스 였습니다. Serverless 는 말 그대로 실제 동작하는 서버가 없다는 것은 아니고 해당 서버를 운영 또는 관리할 필요가 없기 때문에 해당 의미를 더 강조해서 Serverless 라는 용어를 사용하게 되었습니다.(다른말로, 완전 관리형 서비스 라고도 합니다.) 즉, 실제 서비스를 운영할 때 서버를 어떻게 구동할지, 서버가 몇 대 필요할 지 또는 어느 순간 동적으로 증가/축소해야 하는지 등의 다앙한 인프라적 고민을 자동화와 다양한 기술등을 통해서 제거하여 사용자는 그냥 서비스만 개발해서 바로 올려서 쓰는 형태로 운영이 가능합니다.

해당 편의성에 의해서 많은 개발자들 사이에서 Serverless 솔루션을 인기를 얻고 있으며 대부분의 Public cloud 업체에서도 다양한 Serverless 서비스를 만들어서 제공하고 있습니다. Google Cloud 에서도 대표적으로 Cloud Functions 와 Cloud Run 이라는 2가지 Serverless 서비스를 제공하고 있습니다. 둘의 서비스는 많은 부분 유사하지만 Cloud Functions 는 직접 코드를 올려서 서비스를 제공하고 Cloud Run 은 컨테이너 기반으로 서비스를 제공한다는 것이 가장 큰 차이로 보시면 될듯 합니다. 그렇기 때문에, Cloud Functions 는 프로그래밍 언어나 버전에 제약을 가질 수 밖에 없으며 대신에 좀 더 다양한 기능을 GCP 에서 제공 가능합니다. 반대로, Cloud Run 은 Cloud Functions 처럼 프로그래밍 언어나 버전에 제약을 갖지 않고 컨테이너 환경으로 구동 가능한 어떤 것(?)이든 서비스가 가능하다는 장점을 가지고 있습니다.

최근에 컨테이너 환경에 대한 관심과 실제 사례가 많아지고 있고, 이와 더불어 Cloud Run 에 새로운 업데이트 소식도 많았지만, 이와 관련된 한글 아티클은 많지 않아서 이번 이야기에서는 부족하지만 Cloud Run 에 대해서 알아보는 시간을 가져보려고 합니다.

https://cloud.google.com/run

Cloud Run 은 간단하게 한 마디로 정의하자면 소개글에도 나와있지만 “컨테이너식 애플리케이션의 빠르고 안전한 배포 및 확장을 위한 완전 관리형 컴퓨팅 플랫폼” 입니다.

그럼 실제 테스트를 통해서 Cloud Run 이 어떤 역할을 할 수 있는지 간단하게 확인해보는 시간을 가져보도록 하겠습니다.

#1) Cloud Run 설정 및 배포

빠른 시작: 사전 빌드된 샘플 컨테이너 배포
https://cloud.google.com/run/docs/quickstarts/prebuilt-deploy

Cloud Run 을 사용하기 위해서는 실제로 구동될 컨테이너 기반으로 개발된 애플리케이션이 있어야 하지만 그 부분은 개발 관련이기도 하고 다른 자료등을 통해서도 쉽게 방법을 찾을 수 있으므로 해당 부분은 미리 준비되었다고 가정하고 Cloud Run 을 설정하는 작업부터 확인해 보도록 하겠습니다. (실제로 이번 이야기에서는 상단의 튜터리얼에서 제공하는 gcr.io/cloudrun/hello 컨테이너를 활용할 예정입니다.)

서비스를 만들기 위해서 GCP 관리콘솔 > Cloud Run > 서비스 만들기 메뉴를 클릭합니다. 그럼 하단과 같은 메뉴화면을 확인 가능합니다.

가장 먼저 확인이 가능한 것은 배포 플랫폼으로 Cloud Run(완전 관리형) 과 Cloud Run for Anthos 를 선택하는 것 입니다. 간단하게만 설명하면 Cloud Run(완전 관리형) 은 이름 그대로 GCP 에서 제공하는 완전 관리형 Cloud Run 서비스로 인프라 관리가 전혀 필요 없는 형태이며, Cloud Run for Anthos 는 기존 가지고 있는 GCP 의 관리형 Kubernetes 서비스인 GKE 위에서 Cloud Run 이 구동하는 형태입니다. 다시 말해 Cloud Run for Anthos 는 직접 배포되는 GKE 환경을 관리하거나 제어할 수 있으며 Anthos 를 통해서 On-prem 환경도 지원할 수 있다는 장점을 가지고 있습니다.

Cloud Run 플랫폼 선택
https://cloud.google.com/run/docs/choosing-a-platform

이번 이야기는 서두부터 Serverless 이야기를 했으므로 Cloud Run(완전 관리형) 을 선택하도록 하겠습니다.

원하시는대로 서비스 이름을 입력한 후 다음으로 선택하는 항목은 인증에 관련된 항목입니다. ‘인증되지 않은 호출 허용’ 은 말그대로 인증없이 호출을 허용하겠다는 것이며 ‘인증 필요’ 는 보안을 위해서 Cloud IAM 으로 승인된 사용자만 호출 할 수 있도록 제어하겠다는 것입니다. (좀 더 상세 내용은 하단의 링크를 참고하세요)

인증 개요
https://cloud.google.com/run/docs/authenticating/overview

Cloud Run 서비스 만들기 마법사에서 다음을 클릭하면 컨테이너를 어떤 식으로 배포할 것인지 선택할 수 있습니다. 메뉴 상단에 언급된 것과 같이 실제 컨테이너 이미지의 URL 주소를 직접 입력 할 수도 있으며 ‘소스 저장소에서 지속적으로 새 버전 배포’를 선택할 수도 있습니다.

URL 주소 입력은 ‘gcr.io/cloudrun/hello’ 와 같이 접근 가능한 저장소 안의 컨테이너 이미지 주소를 직접 입력하면 되며 ‘소스 저장소에서 지속적으로 새 버전 배포’ 는 GCP 내의 CSR 이나 외부의 GitHub 를 연동하여 해당 저장소에서 변경이 있을 때 동적으로 컨테이너 서비스를 빌드하고 배포할 수 있도록 Cloud Build 와 연결 설정을 넣을 수 있습니다.

이번 이야기는 간단하게 Cloud Run 을 테스트 해보는 것으로 URL 주소 입력에 ‘gcr.io/cloudrun/hello’ 을 넣어줍니다. 이 후 좀 더 자세한 배포 옵션을 확인하기 위해서 고급 옵션을 클릭하면 컨테이너 포트, 명령어, 메모리, vCPU 등과 같은 고급 옵션을 체크할 수 있습니다.

그중 Capacity 쪽의 업데이트가 많아서 이 부분을 조금 상세히 설명하면 먼저, 할당 메모리가 최대 4GiB 까지 할당이 가능해졌습니다.

다음으로 할당 CPU 도 최대 4 vCPU 까지 할당 할 수 있도록 업데이트 되었구요.

마지막으로 요청 시간 제한(Timeout)도 최대 1시간(3600초)로 증가 되었습니다.

다음으로 변경 가능한 중요한 옵션은 ‘컨테이너 당 최대 요청수’ 입니다. 해당 옵션은 동시 실행을 제어할 수 있는 옵션으로 Cloud Functions 와 Cloud Run 의 기술적인 최대 차이점 중의 하나 입니다.

옵션의 이름을 보면 알겠지만 Cloud Run 은 동시에 실행할 수 있는 요청수를 제어 할 수 있습니다. 예를 들어 이 값을 1로 하면 Cloud Run 은 Cloud Functions 와 동일하게 매 요청마다 컨테이너 인스턴스를 구동하여 처리하는 형태로 동작합니다. 그러므로 만약에 동시에 3개의 요청이 들어온다면 3 개의 컨테이너 인스턴스가 구동되어 처리 합니다. 그러나, 해당 옵션의 값을 3 이상으로 설정한다면 동시에 3개의 요청이 들어와도 1개의 컨테이너 인스턴스만 구동되어 해당 인스턴스에서 동시에 처리를 하는 형태를 가집니다. 당연히 이때 훨씬 높은 비용효율성을 보여줄 수 있습니다.

동시 실행
https://cloud.google.com/run/docs/about-concurrency

고급옵션의 마지막 부분은 자동 확장에 대한 부분입니다. 특히나, 최신 업데이트에서 serverless 서비스 임에도 불구하고 최소값을 적용할 수 있도록 업데이트가 되었습니다. 즉, 부하가 없는 경우에도 warm 형태의 최소 개수의 인스턴스를 남겨 둘 수 있으므로 serverless 서비스의 cold start 이슈 자체를 회피할 수 있는 방안을 제공할 수 있게 되었습니다.

또하나 재미있는 점은 최소 개수로 남아있는 인스턴스는 idle 인 경우에 일반 수행시의 가격 대비 약 1/10 으로 저렴하게 책정되어 있어서 부담없이 구성이 가능하지 않을까 합니다.

https://cloud.google.com/run/pricing

테스트 목적이기 때문에 고급옵션의 변수나 연결과 같은 설정은 다음 기회에 다루기로 하고 이외의 설정들을 기본값으로 두고 완료를 클릭하면 지정된 컨테이너 이미지에 대한 배포 및 Cloud Run 서비스 구동이 시작됩니다.

#2) Cloud Run 테스트

서비스 배포가 완료되면 하단과 같이 서비스 상태가 녹색이 된 것을 확인 가능하며 Cloud Run 서비스 호출을 위한 URL 을 확인가능합니다. (예:https://cloudrun001-r5tt5otuza-du.a.run.app)

그리고 해당 URL 을 호출하면 하단과 같이 정상적으로 샘플 서비스가 구동되는 것을 확인 가능합니다.

추가적으로 Cloud Run 메뉴에서 하단과 같이 각종 지표에 대한 전반적인 모니터링이 가능합니다.

또한, 컨테이너에서 발생되는 로그 확인도 가능하구요.

당연히, Google cloud 의 Cloud Monitoring 이나 Cloud Logging 에서 하단과 같이 통합적으로 모니터링을 하거나 로그를 조회하는 것도 가능합니다.

지금까지 아주 간단하게 Google cloud 에서 제공하는 컨테이너 기반의 Serverless 서비스인 Cloud Run 에 대한 대략적인 설명과 샘플 컨테이너를 배포해서 서비스 해보는 간단한 테스트를 정상적으로 수행해봤습니다. 보셔서 아시겠지만 Cloud Run 의 가장 큰 장점은 컨테이너 기반의 서비스만 작성하면 나머지 부분은 Serverless 로서 고민할 필요없이 서비스를 제공해주는 강점이 있습니다. 그럼 이번 포스팅은 여기서 마무리하고 다음에 다른 포스팅으로 다시 돌아오겠습니다.

Disclaimer: 본 글의 작성자는 Google 직원이지만 Google cloud 를 공부하는 한 개인으로서 작성된 글입니다. 본 글의 내용, 입장은 Google 을 대변하지 않으며 Google 이 해당 콘텐츠를 보장하지 않습니다.

참고 자료 #1

Cloud Run
https://cloud.google.com/run

빠른 시작: 사전 빌드된 샘플 컨테이너 배포
https://cloud.google.com/run/docs/quickstarts/prebuilt-deploy

Cloud Run 플랫폼 선택
https://cloud.google.com/run/docs/choosing-a-platform

인증 개요
https://cloud.google.com/run/docs/authenticating/overview

동시 실행
https://cloud.google.com/run/docs/about-concurrency

Pricing
https://cloud.google.com/run/pricing

--

--

이정운 (Jungwoon Lee)
google-cloud-apac

Technical engineer who dreams better future. (These thoughts are my own personal opinions, and do not reflect or represent Google’s opinions or plans.)