sungwony

[GCP] Google Cloud Platform - App Engine 본문

cloud & devops/google cloud

[GCP] Google Cloud Platform - App Engine

일상이상삼상 2019. 10. 29. 00:50

이 포스팅은 Coursera의 Google Cloud Platform Fundamentals:Core Infrastructure 강의를 요약 정리 한 것입니다.


App Engine

 

우리는 지금까지 GCP에서 어플리케이션을 위해 제공된 컴퓨터 인프라 프로덕트 2가지를 살펴보았다. 하나는 컴퓨팅 엔진이고 다른 하나는 쿠버네티스 엔진이다. 이것들은 어플리케이션을 실행할때 선택하는 인프라라는 공통점을 가지고 있다. 컴퓨팅 엔진을 위한 가상 머신과 쿠버네티스 엔진을 위한 컨테이너에 기초한다. 그러나 만약 인프라를 전혀 신경쓰지 않고 코드에만 집중하고 싶다면 어떻게 할 수 있을까? 이를 위해서 존재하는 것이 'App Engine'이다.

 

PaaS부터 시작해보자. PaaS는 플랫폼으로서의 서비스임을 상기하자. App Engine 플랫폼은 코드를 실행하는데 필요한 하드웨어와 네트워크 인프라를 관리한다. App Engine에 어플리케이션을 배포하기 위해선 App Engine에 코드를 제출하기만 하면 된다. 그 이후 작업은 App Engine 서비스에서 나머지 작업을 처리한다. App Engine은 No SQL 데이터베이스, 인메모리 캐싱, 로드 밸런싱, 헬스체크, 로깅, 유저 인증과 같은 많은 웹 어플리케이션에서 필요한 내장 서비스를 제공한다. 이런 서비스를 이용하기 위해 애플리케이션을 코드화하고 App Engine에서는 이를 제공한다. App Engine은 수신되는 트래픽 양에 따라 어플리케이션을 자동으로 확장한다. 사용자는 사용하는 리소스에 대해 지불하기만 하면 된다. 프로비전이나 유지를 위한 서버는 필요하지 않다. 그렇기 때문에 App Engine은 웹 어플리케이션이나 모바일 백엔드오 같이 워크로드가 매우 가변적이거나 예측할 수 없는 어플리케이션에 특히 적합하다. App Engine은 standard와 flexible 두 가지 환경을 제공한다. 이 각각에 대해 알아보자.

 

 

Google App Engine Standard 환경

 

App Engine 환경에서 Standard가 더 간단한 편에 속한다. Standard 환경은 Flexible 환경에 비해 간단한 배포 경험과 간결한 오토스케일을 제공한다. Standard 환경에서는 일부 서비스에서 무료로 사용할 수 있는 일일 할당량을 제공한다. Standard 환경에서는 낮은 활용률의 어플리케이션을 무료로 가동할 수 있다는 특징이 있다. 구글은 다양한 언어의 App Engine SDK를 제공한다. 그렇기 때문에 실제 App Engine 서비스에 업로드 하기 전에 로컬에서 테스트할 수 있다. SDK는 또한 배포를 위한 간단한 명령어를 제공한다. 그렇다면 무엇이 실제로 코드를 실행하는지 궁금할 것이다. 실행되는 바이너리는 정확히 무엇일까?

 

App Engine에서 바이너리를 지칭하는 용어는 런타임(runtime)이다. App Engine Standard 환경에서는 구글에 의해 제공된 런타임을 사용한다. App Engine Standard 환경에서는 특정 버전의 자바, Python, PHP, Go를 위한 런타임을 제공한다. 런타임은 또한 App Engine API를 서포트하는 라이브러리를 포함한다. 그리고 Standard 환경 런타임과 라이브러리는 많은 어플리케이션을 위해 모두 필요한 것이다. 만약 다른 언어의 코드를 원한다면 Standard 환경은 적합하지 않다. 이 경우에는 Flexible 환경을 고려하는게 좋다.

 

Standard 환경에서는 코드를 "샌드박스(sandbox)"에서 실행하도록 하여 코드를 제한한다. 샌드박스는 그것이 실행되는 서버의 물리적인 위치 하드웨어, 운영 체제와는 독립적인 소프트웨어 구조이다. 샌드박스는 App Engine Standard 환경이 매우 세분화된 방식으로 어플리케이션을 확장하고 관리할 수 있는 이유 중 하나이다. 모든 샌드박스와 마찬가지로 그것은 약간의 제약을 가한다. 예를들어 어플리케이션은 로컬 파일 시스템에 쓸 수 없다. 데이터를 영구적으로 만들어야 할 필요가 있는 경우 데이터베이스 서비스에 써야만 한다. 또한 어플리케이션이 받는 모든 요청은 60초의 타임아웃을 갖으며 임의의 third-party 소프트웨어를 설치할 수 없다. 만약 이런 제약을 받고싶지 않다면 Flexible 환경을 선택할 수 있다. 

 

 

Google App Engine Flexible 환경

 

Standard 환경의 Sandbox 모델과 같은 규제를 받고싶지는 않지만 App Engine의 이점을 계속해서 가지고싶다면 App Engine Flexible 모델을 활용할 수 있다. Sandbox 대신 App Engine Flexible 환경에서는 App Engine을 실행하는 컨테이너를 지정할 수 있다. 어플리케이션은 Docker Google Compute Engine 가상 머신의 컨테이너에서 실행된다. App Engine은 이 컴퓨팅 엔진 머신을 관리한다. 헬스 체크를 실행하고 필요할 경우 회복시키며, 그것들이 실행되는 지리적 지역을 선택할 수 있고, 운영 체제에 대해 중요한 역호환성 업데이트가 자동으로 적용된다. 이 모든것으로 인해 사용자는 온전히 코드에 집중할 수 있다. App Engine Flexible Environment app은 표준 실행 시간을 사용하며, 데이터 저장소, memcached, 작업 대기열 등의 App Engine 서비스에 액세스 할 수 있다. 표준 환경은 어플리케이션의 인스턴스를 더 빨리 시작하지만 어플리케이션이 실행되는 인프라에 대한 액세스 권한은 더 적다는 점을 유의해야 한다. 예를들어 Flexible 환경은 사용자를 어플리케이션이 실행되는 가상 머신에 SSH 접속하게 한다. 또한 스크래치 기반에 로컬 디스크를 사용할 수 있고 타사 소프트웨어를 설치할 수 있으며, 어플리케이션에서 App Engine을 거치지 않고 네트워크를 호출할 수 있도록 한다. 반면에 완전히 유휴 상태인 응용 프로그램에 대해서는 Standard 환경에서 청구서가 0으로 떨어질 수 있다.

 

다음으로 App Engine과 쿠버네티스 엔진을 비교해보자. App Engine Standard 환경은 서비스가 어플리케이션의 배포 및 확장을 최대한으로 관리하고싶은 사람들을 위한 것이다. 쿠버네티스 엔진은 어플리케이션 소유자에게 쿠버네티스의 완전한 유연성을 제공한다. App Engine Flexible 에디션은 그 중간쯤에 존재한다. 또한 App Engine 환경은 컨테이너를 목적을 위한 수단으로 취급하지만 쿠버네티스 엔진의 경우 컨테이너는 근본적인 조직 원칙이다.