들어가며
![Cloud Run Functions-2](https://storage.googleapis.com/gweb-cloudblog-publish/images/2_2nd_gen_Cloud_Functions.max-1700x1700.jpg)
아키텍처 변경
1세대 Cloud Functions는 App Engine 인프라를 기반으로 구축되어 하나의 인스턴스는 한 개의 요청만 처리할 수 있고, 런타임과 리소스 할당 측면에서 제한이 있었습니다.
주요 기능 개선
동시성 처리
- 기존 Cloud Functions: 인스턴스당 1개의 요청만 처리 가능
- Cloud Run functions: 인스턴스당 최대 1000개의 동시 요청 처리 가능
이를 통해 비용 효율성이 크게 향상되었습니다.
실행 시간 제한
- 기존 Cloud Functions: 최대 9분
- Cloud Run functions: 최대 60분까지 실행 가능
- HTTP 트리거는 최대 60분, 이벤트 트리거는 최대 9분 실행 가능
실행 시간이 늘어남에 따라 장기 실행 배치 작업도 가능해졌습니다.
인스턴스 크기
- 기존 Cloud Functions: 2개의 vCPU로 최대 8GiB RAM 사용 가능
- Cloud Run functions: 4개의 vCPU로 최대 16GiB RAM 사용 가능
![Cloud Run Functions-3](https://storage.googleapis.com/gweb-cloudblog-publish/images/1_2nd_gen_Cloud_Functions.max-1800x1800.jpg)
개발자 경험 개선
언어 지원
- 기존: Node.js, Python, Go, Java, Ruby, PHP, .NET 등 제한된 언어만 지원
- 현재: 컨테이너 기반으로 동작하여 모든 프로그래밍 언어 지원 가능
개발 도구 지원
- 함수 프레임워크를 통한 로컬 테스트 기능 강화
- 컨테이너 기반 테스트 환경 제공으로 실제 운영 환경과 더 유사한 테스트 가능
- CI/CD 파이프라인 통합
- IDE 플러그인 지원
배포 프로세스 개선
- 함수 배포 시 자동 버전 관리 지원
- 블루/그린 배포 전략 구현 가능
- 롤백 기능 제공으로 안정성 향상
- 직접 트래픽 분할 지정 가능
Cloud Run Functions가 동작하는 방식에 대해 더 알아보고 싶다면 ‘GCP Cloud Function 둘러보기 1‘ 편을 참고해주세요.
비용 구조 변경
새로운 과금 모델
Cloud Run Functions로 전환되면서 가격 정책에도 변화가 있었습니다. 1세대 Cloud Functions는 함수 실행 시간과 호출 횟수를 기준으로 과금이 이루어졌습니다. 이는 실제 리소스 사용량과 관계없이 단순 실행 시간에 따라 과금이 되는 방식이기 때문에 비효율적일 수 있습니다. 메모리 할당량은 고정되어 있어서, 실제로는 적은 메모리만 사용하더라도 할당된 전체 메모리에 대해 비용을 지불해야 했습니다. 또한, 실행 시간의 변동이 큰 함수의 경우 정확한 비용 예측이 어렵다는 단점이 있습니다.
2세대 Cloud Run Functions는 Cloud Run의 가격 정책을 채택하면서 더욱 정교한 과금 체계를 제공합니다. 실제 컨테이너가 사용하는 컴퓨팅 리소스(vCPU, 메모리)를 기반으로 과금이 이루어지기 때문에 리소스 최적화를 통한 비용 절감이 가능해졌습니다. 특히 Cloud Run의 인프라를 활용함으로써 최대 16GB RAM과 4 vCPU까지 확장할 수 있으며, 인스턴스당 최대 1,000개의 동시 요청을 처리할 수 있어 더 높은 확장성을 제공합니다.
리소스 효율성
Cloud Run Functions는 1세대와 달리 동시성을 지원합니다. 이에 인스턴스당 최대 1,000개의 동시 요청을 처리할 수 있게 되면서 리소스 활용도가 크게 향상되었습니다.
예를 들어, 1세대에서는 각 인스턴스가 한 번에 하나의 요청만 처리할 수 있어 10개의 동시 요청을 처리하기 위해서는 10개의 개별 인스턴스가 필요했습니다. 반면 2세대에서는 동시성 지원으로 인해 같은 10개의 요청을 1~3개의 인스턴스로도 효율적으로 처리할 수 있게 되었습니다. 사용하는 인스턴스 수가 줄어들면서 전체적인 리소스 사용량이 감소하고, 결과적으로 동일한 워크로드에 대해 더 적은 비용이 발생하게 됩니다.
특히 트래픽이 급증하는 상황에서도 새로운 인스턴스를 과도하게 생성하지 않고 기존 인스턴스의 동시성을 활용하여 효율적으로 요청을 처리할 수 있게 되었습니다. 이러한 개선은 비용 효율성뿐만 아니라 전반적인 시스템의 안정성 향상에도 도움이 됩니다.
운영상의 이점
모니터링 및 로깅
Cloud Run의 고급 모니터링 기능을 활용할 수 있으며, Cloud Monitoring과의 원활한 통합을 제공합니다. 특히 2세대에서는 더욱 세분화된 메트릭과 향상된 가시성을 제공하여 운영 효율성을 높일 수 있습니다.
- 상세한 Metrics: CPU 사용률, 메모리 사용량, 요청 지연 시간 등을 100ms 단위로 수집하여 더욱 정확한 리소스 사용 현황을 파악할 수 있습니다. 이를 통해 리소스 프로비저닝을 최적화하고 비용을 절감할 수 있습니다.
- 분산 추적: Cloud Trace와의 통합으로 마이크로서비스 아키텍처에서 요청의 전체 흐름을 추적할 수 있습니다. 각 함수 간의 의존성과 병목 구간을 쉽게 식별하여 성능 최적화가 가능합니다.
- 실시간 로그 분석: Cloud Logging을 통해 구조화된 로그를 실시간으로 수집하고 분석할 수 있습니다. 로그 기반 메트릭을 생성하여 비즈니스 KPI를 모니터링하거나 이상 징후를 감지할 수 있습니다. Cloud Logging에서 알림 설정하는 방법은 ‘GCP Cloud Logging으로 로그 관리하기‘ 편을 참고해주세요.
- 에러 리포팅: Cloud Error Reporting으로 발생하는 오류를 자동으로 감지하고 집계합니다. 오류 발생 패턴을 분석하여 신속한 문제 해결이 가능합니다.
- 커스텀 대시보드: Cloud Monitoring의 워크스페이스에서 필요한 메트릭을 조합하여 맞춤형 대시보드를 구성할 수 있습니다. SLO 모니터링이나 비용 추적 등 목적에 맞는 대시보드 구성이 가능합니다.
이러한 기능들은 Cloud Run의 인프라를 활용하기 때문에 가능해졌으며, 특히 대규모 프로덕션 환경에서 안정적인 운영과 문제 해결에 도움이 됩니다.
보안
Cloud Run의 보안 기능을 통합하여 더욱 강화된 보안을 제공합니다. 특히 엔터프라이즈 환경에서 요구되는 높은 수준의 보안 요구사항을 충족합니다.
- IAM 권한 관리 개선: 더욱 세분화된 IAM 역할과 권한을 통해 최소 권한 원칙을 쉽게 적용할 수 있습니다. 서비스 계정 별로 세밀한 권한 제어가 가능합니다.
- 고성능 Direct VPC egress: VPC 내부 리소스에 대한 직접적인 접근이 가능하며, 내부 통신 시 지연 시간을 최소화할 수 있습니다. 프라이빗 네트워크 내에서의 안전한 통신을 보장합니다.
- Secret Manager 통합: 민감한 구성 정보를 안전하게 관리하고 함수에서 직접 참조할 수 있습니다.
마이그레이션
Google Cloud에서는 여전히 Cloud Functions 1세대를 지원하고 있지만, 가능한 새로운 함수에는 2세대를 사용하기를 권장하고 있습니다.
Cloud Functions 1세대에서 2세대로의 마이그레이션을 위해서는 새롭게 2세대 함수를 배포해야 합니다.
- Artifact Registry API 활성화
gcloud services enable artifactregistry.googleapis.com
- gcloud 명령어를 이용하여 2세대 함수 배포
gcloud functions deploy FUNCTION_NAME \ --gen2 \ # 2세대 --runtime=RUNTIME \ # 예: python312, nodejs22, java21 등 --region=REGION \ --source=. \ --entry-point=ENTRY_POINT \ --max-instances=50 \ --memory=512MB --trigger-http
동시성, 메모리 제한 등의 설정이 다르기 때문에 필요한 경우 배포 과정에서 설정을 수정해야 합니다.
성공적으로 실행되는 것을 확인한 뒤 기존 1세대 함수를 삭제해주세요.
gcloud functions delete OLD_FUNCTION_NAME --region=REGION
결론
![Cloud Run Functions](https://www.nnt-consulting.com/tech/blog/wp-content/uploads/2024/12/스크린샷-2024-12-05-오전-11.02.58.png)
Cloud Functions에서 Cloud Run Functions로의 전환은 서버리스 컴퓨팅에서 중요한 변화를 가져왔습니다. 특히 동시성 처리, 리소스 최적화, 개발자 경험 측면에서의 개선은 대용량 워크로드 처리를 가능하게 만들었습니다.
이러한 아키텍처의 변화는 개발자에게 더 높은 유연성과 확장성을 제공하는 동시에, 세밀한 운영 비용 최적화를 가능하게 합니다. 2세대 Cloud Run Functions는 현대적인 클라우드 네이티브 애플리케이션을 더욱 효율적으로 구축하고 운영할 수 있는 핵심 서비스로 자리잡을 것입니다.