Skip to content

Google Cloud Functions 사용해 보기

Google Cloud Platform ( 이하 GCP )에는 정말 다양한 서비스들이 있습니다만, 그중에서 Serverless ( 서버리스: 서버없는 아키텍쳐 )의 양축을 담당하는 Google Cloud Pub/Sub 과 Google Cloud Funtions ( 이하 GCF ) 가 있습니다.

그중에서 GCF를 사용하는 샘플을 만들어 보려 합니다.
사실 정확하게는 저희가 이번에 서비스를 만들면서 사용했던 작은 모듈을 실제로 소스코드 형태로 올려보는것입니다.

GCF는 말그대로 Function . 즉, 작은 모듈이기 때문에 뭔가 큰 서비스들의 작은 마이크로 아키텍쳐로 사용을 하거나 혹은 서비스 자체가 매우 작은 서버리스 형태일때 좋은 선택이 됩니다.

아래에서 진행할 GCF 예제는 특정 URL 로 특정한 정보를 입력하면 주어진 값에 해당하는 이미지를 리턴해주는 코드입니다. 일반적으로 많이 사용하는 GCF는 외부에서 뭔가 액션이 들어왔을때 서버에서 – 크론처럼 – 동작을 하거나 혹은, 특정한 결과값등을 리턴해주는 형태지만, 이번에는 조금 특이한 예제로 이미지를 다루고 사용자에게 직접 그 이미지를 리턴해주는 코드를 생성해 보도록 하겠습니다.

우선 결과 예제를 먼저 보겠습니다.

https://us-central1-fb-chatbot-2016-10-13.cloudfunctions.net/result-img?image1=15&image2=35&num1=45&num2=75 와 같은 주소로 접속하면 가능합니다. 이미지와 주소가 실제로 같진 않습니다. )

원리는 다음과 같습니다. 해당 URL을 접속하면 -> 입력한 Query 값을 이용하여 -> 이미지를 생성한뒤 -> 이미지 형태로 전송해주는 간단한 예제입니다. ( 저희 실제 서비스에 사용되는 코드입니다; )

우선 Function을 만들기 위해 GCP 콘솔에 접속합니다.

 

위와 같이 접속을 하면 처음에는 아래와 같은 화면이 표시 될것입니다. [ API 사용 설정]을 눌러줍니다. ( 시간이 약간 걸립니다. )

사용 설정이 끝나면 [함수 만들기] 를 선택하면 다음과 같은 화면이 나옵니다. 우선 찬찬히 체크해봅니다.

이름에는 자신이 원하는 함수 명을 입력합니다. 만약에 HTTP 트리거로 하게 될경우 이 함수명은 URL의 일부가 됩니다.  그외에는 본인이 구별하기 위한 식별자에 불과합니다.

지역은 현재 us-central1 만 지원합니다. 나중에 더 많은 지역 ( 리전 ) 이 추가 되겠죠? 사실 Function의 특성상 이건 크게 중요하진 않은거 같아요. 더구나 HTTP트리거가 아니라면요. ( 참고로 HTTP 트리거는 https 를 지원합니다. )

할당 메모리 부분은 조금 중요한데요. 메모리만이 아니라 CPU도 이것의 영향을 받습니다. 다음의 표를 확인해주세요.

예를들어서 이미지를 처리하거나 하는 경우 같은 경우에는 메모리와 CPU를 둘다 상당량 사용하게 됩니다. 이런경우 시간을 조금 단축하고자 하면 높은 메모리를 선택하면 CPU도 같이 빨라져서 속도가 빨라지게 됩니다. 재미있는점은 CPU를 2배 높은것을 선택하면 메모리도 2배 높아지고 동시에 가격도 높아지지만, 대신에 실행시간이 단축되서 총 비용은 줄어들게 됩니다. 물론 시간이 CPU/Ram 에 영향받지 않는 예를들어 특정 웹을 호출한다거나 등등의 작업인 경우에는 얘기가 달라지겠지만요. ( 우리는 이번에 이미지를 다루게 되므로 가장 빠른! 2.4GHz 짜리를 선택해 봅니다. )

제한시간은 타임아웃을 의미합니다. 저는 통상 10초를 세팅합니다.

트리거도 중요한데, 경우를 선택합니다. Pub/Sub이벤트 트리거일경우에는 게시/구독을 Storage와 연동하는 경우에는 GCS 버킷을 웹에서 연동되는 경우에는 HTTP트리거를 선택합니다. 일반적으로는 Pub/Sub 트리거를 가장 많이 사용하게 됩니다.

소스코드는 해당 Function 의 코드를 어떤식으로 관리할지를 표시하게 됩니다. 인라인 편집기를 쓰면 현재 페이지에서 직접하게 되고, ZIP파일을 업로드하거나, 이미 GCS 에 있는 파일을 이용할 경우에는 GCS Zip을. 만약에 Cloud Source Repository를 이용하게 될 경우 소스저장소를 선택하면 되는데, 개인적으로는 관리상의 편의로 CSR을 많이 씁니다. 여기서는 간단히 편집기를 이용해 보겠습니다.

기본으로 있는 코드를 보시면 helloworld 함수를 실행하도록 되어 있습니다, 이 함수명은 맨아래 실행할 함수에 바로 적용이 되므로 같은 이름을 넣으시면 됩니다. 다음과 같은 코드를 한번 보겠습니다.

코드에서 이미지를 직접 처리하는 부분은 우선 생략했습니다만, 경우에 따라 다른 이미지를 선택하실 수 있을것입니다. 예를들면 GCS에서 이미지를 가져와서 조립을 하거나 혹은 처음부터 이미지를 같이 업로드하여 조립하거나 등등을 할 수가 있습니다.

 

Be First to Comment

답글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.