데이터 엔지니어링

GCP Cloud Function 둘러보기 1

간단한 소개

이벤트 기반 서버리스 함수

Cloud Function은 이벤트 기반의 서버리스 서비스형 함수입니다.

  • ‘이벤트 기반’ : 이벤트 발생시에만 함수를 실행하는 것을 의미합니다. 가격 또한 이벤트 발생횟수와 실행시간에 따라 부과됩니다.
  • ‘서버리스’ : 서버를 위한 별도의 자원을 투자하지 않고도 필요한 만큼 자원을 사용할 수 있습니다.
    👉 자세한 내용은 서버리스편을 참고해주세요!

Cloud Function의 활용도

  1. 데이터처리 & ETL : 배치로 단시간에 많은 데이터를 처리해야하는 경우 유용합니다. 반대로, 실시간 데이터를 처리해야하는 스트리밍 환경에서는 부적합하다고 볼 수 있습니다.
  2. WebHook & 이벤트 : 서비스 목적에 맞게 이와 같은 용도로 사용하면 더욱 효과적입니다.
  3. 경량형 API : HTTPS 이벤트의 경우, Cloud Function에서는 기본적으로 URL을 제공해주기 때문에 API로도 사용할 수 있습니다.

앞으로 나올 Topic

Cloud Function

크게는 1세대 vs 2세대, 실행 흐름, 가격 정책으로 진행됩니다!

Cloud Function 종류 살펴보기

Cloud Function에는 2가지 종류가 있습니다.

1세대 vs 2세대

Cloud Function
Cloud Function 1세대 vs 2세대 비교표 (공식문서)

공식문서에서 이와 같은 비교표를 볼 수 있습니다. 여기에서 가장 중요한 차이점은 용도에 따라 다르겠지만, 동시 실행, 트래픽 분할, 이벤트 유형입니다.

  • 트래픽 분할(Traffic splitting)
    배포된 여러가지 버전이 존재할 때, 각 버전을 이용하여 트래픽을 분할할 수 있도록 설정할 수 있습니다. 아래의 예시는 나중에 배포한 버전을 10%, 먼저 배포한 버전을 90%로 설정하여 트래픽을 분산시켰습니다.
    Cloud Function
  • 동시실행(Concurrency)
    Cloud Function동시실행 옵션을 잘 활용하면 비용 절약에 도움이 됩니다. 동시실행 옵션을 설정하면 한번에 여러 번의 요청이 들어올 경우, 하나의 인스턴스에서 여러 건의 요청을 처리하게 됩니다. Cloud Function은 서버리스로 운영되기 때문에 서버가 필요할 때마다 배치됩니다. 따라서 콜드 스타트 구간에 따라 실행시간이 늘어나는 걸 자주 경험해볼 수 있습니다. 인스턴트 1개를 실행하면, 기본적으로 [콜드 스타트 구간+실행시간]만큼의 시간이 걸립니다.만약 Concurrency 옵션이 설정되지 않고 Auto Scaling 옵션만 설정되어 있는 경우, 인스턴스 8개 실행시 각각에서 [콜드 스타트 구간 + 실행시간]이 걸립니다. 반대로 동시실행 옵션을 설정하면, 긴 시간이 걸리는 콜드스타드 구간이 1번만 존재하게 되어 전체 실행시간 자체를 줄일 수 있습니다.
    Cloud Function은 실행시간을 기준으로 가격을 책정하기 때문에 Concurrency 옵션을 잘 이용하면 전체 비용을 절감할 수 있습니다.물론 동시실행의 단점도 존재합니다. 하나의 인스턴스에서 여러개를 실행하다보니 동시에 같은 자원에 접근하는 구간이 반드시 발생하게 되어 Concurrency Safe를 고려한 코드를 미리 작성해두어야하고, 하나의 인스턴스에서 자원을 분할해 사용하다보니 Memory나 CPU와 같은 자원에 대한 제한이 걸릴 수 있습니다.
  • 이벤트 유형
    Eventarc은 GCP에서 이벤트를 라우팅해주는 서비스입니다. 이벤트를 라우팅한다는 것은 이벤트를 어디에 전송할지 정하고, 실제로 이벤트를 전송하는 역할을 담당하는 것을 의미합니다. 1세대와는 다르게 2세대에서는 기본적으로 Eventarc을 통해 이벤트를 라우팅하기 때문에 서비스할 수 있는 이벤트의 종류가 많아졌습니다.

따라가보기

*이후 글에서부터는 Cloud Function 2세대를 선택한 것을 가정하고 작성하였습니다

Cloud Function을 만들었는데 Cloud Run을 실행한다..?

Cloud Function은 실행시 서비스가 바로 실행되는 것이 아니라 Cloud Run을 통해 실행됩니다. 이 흐름을 자세히 알아보기 위해 Cloud Function 2세대의 실행흐름을 따라가봅시다.

Cloud Function

Cloud Function은 간단한 함수 작성만으로도 원하는 기능을 실행시킬 수 있도록 여러가지 서비스를 엮어 하나의 서비스로 구성되어있습니다.

1. 함수 소스 저장 (Cloud Storage)

작성한 함수의 소스 코드는 Cloud Storage에 저장됩니다.

2. 이미지 빌드 및 배포 (Cloud Build, Artifact Registry)

Cloud Build를 통해 생성된 이미지가 Artifact Registry에 저장됩니다. 다음과 같이 Docker 이미지로 생성되며, Artifact Registry에 대한 권한이 있다면 cli 환경에서도 직접 이미지를 pull 받아 실행해볼 수 있습니다.

Cloud Function

Cloud Function

3. 실행 (Cloud Run)

만들어진 이미지 컨테이너를 실행하는 것은 Cloud Run에서 담당합니다. Cloud Run에서는 위에서 설명한 것과 같은 [트래픽 분할, 동시실행]과 같은 기능이 있고, 실행시 필요한 자원을 미리 선택해 실행할 수 있습니다.

실행에 필요한 자원을 미리 고려해 선택하는 것은 매우 중요합니다. Memory, CPU와 같이 해당 함수를 실행할 자원과 최대 함수 실행 시간(Timeout)을 설정할 수 있습니다.

VPC, 인그레스, 아웃그레스 등의 네트워크 자원도 지정할 수 있습니다. 컴퓨팅 자원과 마찬가지로 네트워크 자원도 가격 책정에 영향을 줍니다.

추가적으로 Auto Scaling 기능을 활용하여 자동으로 인스턴스를 여러 개로 확장시켜 자원을 분산 실행하도록 설정할 수 있습니다.

4. 이벤트 전송 (Eventarc)

이벤트는 전부 Eventarc 서비스를 통해 라우팅되어 Cloud Function이 실행될 수 있도록 합니다.

가격 정책

그렇다면, 해당 서비스를 이용하기 위해 필요한 비용을 명확히 이해하는 것이 중요합니다.

실행 흐름을 이해한 후, 가격 정책을 살펴보면 조금 더 이해가 쉽습니다. 지금까지 Cloud Function의 실행흐름은 다음과 같이 정리할 수 있습니다.

  • 소스 저장 : Cloud Storage
  • 빌드 & 배포(CI/CD) : Cloud Build
  • 배포한 이미지 저장소 : Artifact Registry
  • 이벤트 전송 : Eventarc
  • 실행 : Cloud Run으로 실행

이 중 Cloud Build와 Artifact Registry, Eventarc은 Cloud Functions 사용 요금과는 관계없이 비용이 청구됩니다. 따라서 Cloud Function의 청구 비용이 무료 등급에 해당하는 경우에도 다른 서비스의 사용량에 따라 비용이 청구될 수 있습니다.

다른 서비스는 우선 고려하지 않고, Cloud Function의 가격 정책에 대해 알아보겠습니다. Cloud Function에서는 실행과 관련된 비용만 청구되므로 호출 횟수와 컴퓨팅 자원, 네트워킹에 따라 비용이 청구됩니다.

  • 호출 횟수 : 처음 200만 회는 무료, 이후 100만 건당 $0.40부과
  • 컴퓨팅 자원 : 표1 참조 (인스턴스 최소 수를 설정한 경우 제외)
    Cloud Function
    [표1] 컴퓨팅 자원 비용 (공식문서)

    등급은 생성 시 설정한 리전을 기준으로 설정됩니다.  함수 인스턴스 최소 수를 1 이상으로 설정한 경우, 함수가 실행되지 않는 시간에도 자원이 사용될 수 있어 해당 부분은 가격이 따로 책정됩니다.
  • 네트워크 아웃바운드, 인바운드 데이터 : 표2 참조
    Cloud Function
    [표2] 네트워크 자원 비용 (공식문서)

컴퓨팅 자원과 네트워크 가격 책정 방식을 자세히 살펴보면, 리전에 따라 책정되는 비용이 달라질 수 있음을 확인할 수 있습니다.

실제 청구되는 비용은 가격이 청구되는 방식을 이해하고, GCP에서 제공하는 가격 계산기를 이용하여 미리 확인해보는 것이 좋습니다. 또한 나머지 서비스에 대한 가격 책정은 아래 링크를 통해 참고해주세요.

 

Cloud Run과의 차이점

Cloud Function이 Cloud Run을 기반으로 하기 때문에, 비슷한 점이 많습니다.

위에서 살펴본 것처럼 Cloud Function은 실행할 함수와 이벤트를 작성하면 편리하게 구성할 수 있습니다. 반면 Cloud Run은 빌드와 배포에 자유도가 있어 조금 더 확장성 있게 사용할 수 있습니다.

정리하자면, Cloud function은 조금 더 단순하게 배포가 가능하며 이벤트 기반 서비스이지만, Cloud Run은 여러가지 서비스를 통합해서 서버리스로 배포하거나 Cloud Function보다 확장성 있는 마이크로 서비스를 구현하고 싶을 때 선택한다고 할 수 있습니다.

마치며..

공식 문서의 파편을 모아 해당 서비스가 어떻게 구성되어 있는지 확인하는 과정을 거쳐 해당 글을 완성하였습니다. 이 글을 읽는 분들은 조금 더 빠르게 Cloud Function 서비스를 이해하고 사용할 수 있었으면 좋겠습니다!

👉 다음 편에서는 Cloud Function을 직접 만들고 모니터링하는 방법을 확인해보겠습니다!

Share this post

About the author

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다