App Engine 가변형 환경에서 Python 앱 만들기

리전 ID

REGION_ID는 앱을 만들 때 선택한 리전을 기준으로 Google에서 할당하는 축약된 코드입니다. 일부 리전 ID는 일반적으로 사용되는 국가 및 주/도 코드와 비슷하게 표시될 수 있지만 코드는 국가 또는 주/도와 일치하지 않습니다. 2020년 2월 이후에 생성된 앱의 경우 REGION_ID.r이 App Engine URL에 포함됩니다. 이 날짜 이전에 만든 기존 앱의 경우 URL에서 리전 ID는 선택사항입니다.

리전 ID에 대해 자세히 알아보세요.

이 빠른 시작에서는 짧은 메시지를 표시하는 앱을 만들고 배포하는 방법을 보여줍니다. 샘플 애플리케이션은 최신 버전의 Python 3를 사용합니다. Python 런타임 버전 3.8 이상에서는 app.yaml 파일에 버전을 지정하여 동일한 코드 샘플을 사용할 수 있습니다.

Python 3.7 이하 버전의 코드 샘플은 GitHub에서 제공됩니다.

시작하기 전에

  1. Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
  2. Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기로 이동

  3. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  4. Cloud Build API 사용 설정

    API 사용 설정

  5. Google Cloud CLI를 설치합니다.
  6. gcloud CLI를 초기화하려면 다음 명령어를 실행합니다.

    gcloud init
  7. Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기로 이동

  8. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  9. Cloud Build API 사용 설정

    API 사용 설정

  10. Google Cloud CLI를 설치합니다.
  11. gcloud CLI를 초기화하려면 다음 명령어를 실행합니다.

    gcloud init

추가 기본 요건

  1. 프로젝트로 App Engine 앱을 초기화하고 리전을 선택합니다.

    gcloud app create --project=[YOUR_PROJECT_ID]
    

    메시지가 표시되면 App Engine 애플리케이션을 위치할 리전을 선택합니다.

  2. 다음 기본 요건을 설치합니다.

    • 다음 명령어를 실행하여 Python용 App Engine 확장 프로그램이 포함된 gcloud 구성요소를 설치합니다.

      gcloud components install app-engine-python
      

  3. Python 개발 환경을 준비합니다. 시스템에 최신 버전의 Python, pip, 기타 관련 도구를 설치하는 것이 좋습니다. Python 개발 환경 설정 가이드에서 안내를 참조하세요.

App Engine 위치

App Engine은 리전을 기반으로 합니다. 즉, 앱을 실행하는 인프라가 특정 리전에 위치해 있으며 해당 리전 내의 모든 영역에서 중복으로 사용할 수 있도록 Google이 관리합니다.

앱을 실행하는 리전을 선택하는 데 있어 중요한 기준은 지연 시간, 가용성 또는 내구성 요구사항입니다. 일반적으로 앱 사용자와 가장 가까운 리전을 선택할 수 있지만 App Engine을 사용할 수 있는 위치와 앱에서 사용하는 다른 Google Cloud 제품 및 서비스의 위치도 고려해야 합니다. 여러 위치에서 서비스를 사용하면 앱의 지연 시간과 가격 책정에 영향을 미칠 수 있습니다.

앱의 리전을 설정한 후에는 변경할 수 없습니다.

App Engine 애플리케이션을 이미 만든 경우 다음 중 한 가지 방법으로 해당 리전을 볼 수 있습니다.

이 빠른 시작에서는 App Engine에 배포할 수 있는 Flask 웹 프레임워크로 작성된 최신 Python 3 앱을 보여줍니다. 이 샘플에서는 Flask를 사용하지만 위와 같은 요구사항을 충족하는 모든 웹 프레임워크를 사용할 수 있습니다. 예를 들어 Django, Pyramid, Bottle, web.py 등의 프레임워크를 사용할 수 있습니다.

Hello World 앱 다운로드

간단한 App Engine용 Hello World 앱을 만들어 Google Cloud에 앱을 배포해 보겠습니다.

  1. Hello World 샘플 앱 저장소를 로컬 머신에 클론합니다.

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples
    

    또는 zip 파일로 샘플을 다운로드하고 압축을 풉니다.

  2. 샘플 코드가 있는 디렉터리로 변경합니다.

       cd python-docs-samples/appengine/flexible/hello_world
    

로컬 머신에서 Hello World 실행

로컬 컴퓨터에서 Hello World 앱을 실행하려면 다음 단계를 따르세요.

Mac OS/Linux

  1. 격리된 Python 환경을 만듭니다.
    python3 -m venv env
    source env/bin/activate
  2. 현재 위치가 샘플 코드가 있는 디렉터리가 아니면 hello_world 샘플 코드가 포함된 디렉터리로 이동합니다. 그런 후 종속 항목을 설치합니다.
    cd YOUR_SAMPLE_CODE_DIR
    pip install -r requirements.txt
  3. 애플리케이션을 실행합니다.
    python main.py
  4. 웹브라우저에 다음 주소를 입력합니다.
    http://localhost:8080

    Cloud Shell을 사용하는 경우에는 툴바에서 웹 미리보기를 클릭하고 포트 8080에서 미리보기를 대신 선택합니다.

Windows

PowerShell을 사용하여 Python 패키지를 실행합니다.

  1. PowerShell 설치 위치를 찾습니다.
  2. PowerShell 바로가기를 마우스 오른쪽 버튼으로 클릭하고 관리자 권한으로 시작합니다.
  3. 격리된 Python 환경을 만듭니다.
    python -m venv env
    .\env\Scripts\activate
  4. 프로젝트 디렉터리로 이동하여 종속 항목을 설치합니다. 현재 위치가 샘플 코드가 있는 디렉터리가 아니면 hello_world 샘플 코드가 포함된 디렉터리로 이동합니다. 그런 후 종속 항목을 설치합니다.
    cd YOUR_SAMPLE_CODE_DIR
    pip install -r requirements.txt
  5. 애플리케이션을 실행합니다.
    python main.py
  6. 웹브라우저에 다음 주소를 입력합니다.
    http://localhost:8080

샘플 앱의 Hello World 메시지가 페이지에 표시됩니다. 터미널 창에서 Ctrl+C 키를 눌러 웹 서버를 종료합니다.

App Engine에서 Hello World 배포 및 실행

App Engine 가변형 환경에 앱을 배포하려면 다음 단계를 따르세요.

  1. hello_world 디렉터리에서 다음 명령어를 실행하여 Hello World 앱을 배포합니다.

    gcloud app deploy

    선택적 플래그에 대해 알아보세요.

    일반 gcloud 명령어 플래그

    • 앱 버전을 고유하게 식별하는 ID를 지정하려면 --version 플래그를 포함합니다. 그렇지 않으면 ID가 자동으로 생성됩니다. 예를 들면 --version [YOUR_VERSION_ID]입니다.
    • --project 플래그를 포함하여 gcloud 도구에서 기본값으로 초기화한 값으로 대체 Google Cloud 프로젝트 ID를 지정합니다. 예를 들면 --project [YOUR_PROJECT_ID]입니다.

    예를 들면 다음과 같습니다.

    gcloud app deploy --version pre-prod-5 --project my-sample-app

    명령줄에서 앱을 배포하는 방법에 대한 자세한 내용은 앱 테스트 및 배포를 참조하세요. 전체 명령어 플래그 목록은 gcloud app deploy 참조를 확인하세요.

  2. 브라우저를 실행하여 https://PROJECT_ID.REGION_ID.r.appspot.com에서 앱을 확인합니다.

    gcloud app browse
    여기서 PROJECT_ID는 Google Cloud 프로젝트 ID를 나타냅니다.

이 경우, App Engine 인스턴스에서 실행 중인 웹 서버가 Hello World 메시지가 표시된 페이지를 제공합니다.

수고하셨습니다. App Engine 가변형 환경에 첫 번째 App Engine 앱을 배포했습니다.

애플리케이션을 배포하는 중에 오류가 발생했으면 문제 해결 팁을 확인하세요.

삭제 방법과 진행 가능한 다음 단계의 링크는 아래 섹션을 참조하세요.

삭제

Google Cloud 프로젝트를 삭제하면 프로젝트 내에서 사용되는 모든 리소스에 대한 결제를 중지하여 비용 청구를 방지할 수 있습니다.

  1. Google Cloud 콘솔에서 리소스 관리 페이지로 이동합니다.

    리소스 관리로 이동

  2. 프로젝트 목록에서 삭제할 프로젝트를 선택하고 삭제를 클릭합니다.
  3. 대화상자에서 프로젝트 ID를 입력한 후 종료를 클릭하여 프로젝트를 삭제합니다.

다음 단계

전체 플랫폼 알아보기

이제 App Engine 앱을 개발하고 배포하는 방법을 알아보았으므로 Google Cloud의 나머지 부분을 살펴볼 차례입니다. Google Cloud CLI가 이미 설치되어 있으므로 Cloud SQL, Cloud Storage, Firestore 등의 다양한 제품과 상호작용하는 도구가 제공됩니다.

App Engine 가변형 환경 알아보기

다음 항목을 통해 App Engine에 대해 더 알아볼 수 있습니다.

Hello World 코드 검토

Hello World는 가장 간단한 App Engine 앱으로, 한 가지 서비스만을 포함하고 버전도 하나뿐이며 모든 코드가 앱의 루트 디렉터리에 있습니다. 이 섹션은 각 앱 파일을 자세히 설명합니다.

main.py

Hello World 앱은 파일 하나로 이루어진 기초적인 Flask 앱입니다.

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello() -> str:
    """Return a friendly HTTP greeting.

    Returns:
        A string with the words 'Hello World!'.
    """
    return "Hello World!"

if __name__ == "__main__":
    # This is used when running locally only. When deploying to Google App
    # Engine, a webserver process such as Gunicorn will serve the app.
    app.run(host="127.0.0.1", port=8080, debug=True)

app.yaml

app.yaml 파일은 앱의 다음 구성을 설명합니다.

  • env: flex를 설정하여 앱에서 App Engine 가변형 환경을 사용함을 나타냅니다.
  • 앱에서 사용되는 런타임을 지정합니다. runtime_version 설정을 제외하면 App Engine이 최신 Python 버전을 앱의 기본 버전으로 사용합니다.

  • entrypoint는 App Engine에 앱을 시작할 방법을 알려줍니다. 이 앱은 Flask의 개발 서버(로컬에서 실행 시 사용) 대신 Python 앱을 제공하기 위해 gunicorn을 사용합니다. $PORT 변수는 App Engine이 앱을 시작할 때 설정합니다. entrypoint에 대한 자세한 내용은 앱 시작을 참조하세요.

# Copyright 2021 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

runtime: python
env: flex
entrypoint: gunicorn -b :$PORT main:app

runtime_config:
  operating_system: ubuntu22

# This sample incurs costs to run on the App Engine flexible environment.
# The settings below are to reduce costs during testing and are not appropriate
# for production use. For more information, see:
# https://cloud.google.com/appengine/docs/flexible/python/configuring-your-app-with-app-yaml
manual_scaling:
  instances: 1
resources:
  cpu: 1
  memory_gb: 0.5
  disk_size_gb: 10
  • Python 런타임의 작동 방식에 대한 자세한 내용은 Python 런타임을 참조하세요.

  • 버전과 서비스를 활용할 수 있도록 앱을 설계하는 방법에 대한 자세한 내용은 App Engine 개요를 참조하세요.

  • App Engine 구성 설정에 대한 자세한 내용은 app.yaml로 앱 구성을 참조하세요.

requirements.txt

requirements.txt 및 Python 패키지 관리자 pip로 애플리케이션 종속 항목을 선언하고 설치합니다. Hello World에는 웹 프레임워크인 Flask와 WSGI 서버인 Gunicorn이 필요합니다.

Flask==3.0.0; python_version > '3.6'
Flask==2.3.3; python_version < '3.7'
Werkzeug==3.0.1; python_version > '3.6'
Werkzeug==2.3.7; python_version < '3.7'
gunicorn==22.0.0

requirements.txt는 로컬에 설치되거나 App Engine에 배포할 때 설치되는 라이브러리를 정의합니다.