App Engine 시작하기(Python 3)

1. 개요

befa7a877ccdd35d.png

Google App Engine 애플리케이션은 만들고 관리하기가 쉬우며, 트래픽 및 데이터 저장소의 요구사항이 변하면 쉽게 확장할 수 있습니다. App Engine을 사용하면 서버를 유지관리할 필요가 없습니다. 애플리케이션을 업로드하기만 하면 바로 사용할 수 있습니다.

이 Codelab에서는 Flask 웹 프레임워크로 작성된 간단한 Python 웹 앱을 배포하는 방법을 알아봅니다. 이 샘플에서는 Flask를 사용하지만 Django, Pyramid, Bottle, web.py를 비롯한 다른 웹 프레임워크를 사용할 수 있습니다.

이 가이드는 https://cloud.google.com/appengine/docs/standard/python3/quickstart에서 각색되었습니다.

학습할 내용

  • Google App Engine에서 간단한 Python 서버를 만드는 방법입니다.
  • 서버를 다운시키지 않고 코드를 업데이트하는 방법

필요한 항목

  • Python 사용에 관한 지식
  • vim, emacs, nano와 같은 표준 Linux 텍스트 편집기에 관한 기본 지식

설문조사

이 튜토리얼을 어떻게 사용하실 계획인가요?

읽기만 할 계획입니다 읽은 다음 연습 활동을 완료할 계획입니다

귀하의 Python 사용 경험이 어떤지 평가해 주세요.

초급 중급 고급

귀하의 Google Cloud 서비스 경험을 평가해 주세요.

<ph type="x-smartling-placeholder"></ph> 초보자 중급 숙련도

2. 설정 및 요건

자습형 환경 설정

  1. Google Cloud Console에 로그인하여 새 프로젝트를 만들거나 기존 프로젝트를 재사용합니다. 아직 Gmail이나 Google Workspace 계정이 없는 경우 계정을 만들어야 합니다.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • 프로젝트 이름은 이 프로젝트 참가자의 표시 이름입니다. 이는 Google API에서 사용하지 않는 문자열이며 언제든지 업데이트할 수 있습니다.
  • 프로젝트 ID는 모든 Google Cloud 프로젝트에서 고유하며, 변경할 수 없습니다(설정된 후에는 변경할 수 없음). Cloud 콘솔은 고유한 문자열을 자동으로 생성합니다. 일반적으로는 신경 쓰지 않아도 됩니다. 대부분의 Codelab에서는 프로젝트 ID (일반적으로 PROJECT_ID로 식별됨)를 참조해야 합니다. 생성된 ID가 마음에 들지 않으면 다른 임의 ID를 생성할 수 있습니다. 또는 직접 시도해 보고 사용 가능한지 확인할 수도 있습니다. 이 단계 이후에는 변경할 수 없으며 프로젝트 기간 동안 유지됩니다.
  • 참고로 세 번째 값은 일부 API에서 사용하는 프로젝트 번호입니다. 이 세 가지 값에 대한 자세한 내용은 문서를 참고하세요.
  1. 다음으로 Cloud 리소스/API를 사용하려면 Cloud 콘솔에서 결제를 사용 설정해야 합니다. 이 Codelab 실행에는 많은 비용이 들지 않습니다. 이 튜토리얼이 끝난 후에 요금이 청구되지 않도록 리소스를 종료하려면 만든 리소스 또는 프로젝트를 삭제하면 됩니다. Google Cloud 신규 사용자는 300달러(USD) 상당의 무료 체험판 프로그램에 참여할 수 있습니다.

Cloud Shell 시작

Google Cloud를 노트북에서 원격으로 실행할 수도 있지만 이 Codelab에서는 Cloud에서 실행되는 명령줄 환경인 Cloud Shell을 사용합니다.

Cloud Shell 활성화

  1. Cloud Console에서 Cloud Shell 활성화853e55310c205094.png를 클릭합니다.

3c1dabeca90e44e5.png

Cloud Shell을 처음 시작하는 경우에는 무엇이 있는지 설명하는 중간 화면이 표시됩니다. 중간 화면이 표시되면 계속을 클릭합니다.

92662c6a846a5c.png

Cloud Shell을 프로비저닝하고 연결하는 데 몇 분 정도만 걸립니다.

9f0e51b578fecce5.png

가상 머신에는 필요한 개발 도구가 모두 들어 있습니다. 영구적인 5GB 홈 디렉터리를 제공하고 Google Cloud에서 실행되므로 네트워크 성능과 인증이 크게 개선됩니다. 이 Codelab에서 대부분의 작업은 브라우저를 사용하여 수행할 수 있습니다.

Cloud Shell에 연결되면 인증이 완료되었고 프로젝트가 자신의 프로젝트 ID로 설정된 것을 확인할 수 있습니다.

  1. Cloud Shell에서 다음 명령어를 실행하여 인증되었는지 확인합니다.
gcloud auth list

명령어 결과

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. Cloud Shell에서 다음 명령어를 실행하여 gcloud 명령어가 프로젝트를 알고 있는지 확인합니다.
gcloud config list project

명령어 결과

[core]
project = <PROJECT_ID>

또는 다음 명령어로 설정할 수 있습니다.

gcloud config set project <PROJECT_ID>

명령어 결과

Updated property [core/project].

3. 웹 앱 작성

Cloud Shell이 실행되면 명령줄을 사용하여 Cloud SDK gcloud 명령어 또는 가상 머신 인스턴스에서 사용할 수 있는 다른 도구를 호출할 수 있습니다. 영구 디스크 저장소의 $HOME 디렉터리를 사용하여 여러 프로젝트와 Cloud Shell 세션 간에 파일을 저장할 수 있습니다. $HOME 디렉터리는 본인만 사용할 수 있으며 다른 사용자는 액세스할 수 없습니다.

먼저 애플리케이션의 $HOME 디렉터리에 새 폴더를 만듭니다.

mkdir ~/helloworld
cd ~/helloworld

main.py이라는 파일을 만듭니다.

touch main.py

선호하는 명령줄 편집기 (nano, vim 또는 emacs)를 사용하거나 Cloud Shell 편집기 버튼을 클릭하여 파일을 수정합니다.

10af7b1a6240e9f4.gif

Cloud Shell 편집기로 파일을 직접 편집하려면 다음 명령어를 사용합니다.

cloudshell edit main.py

main.py

import flask

# If `entrypoint` is not defined in app.yaml, App Engine will look for an app
# called `app` in `main.py`.
app = flask.Flask(__name__)


@app.get("/")
def hello():
    """Return a friendly HTTP greeting."""
    return "Hello World!\n"


if __name__ == "__main__":
    # Used when running locally only. When deploying to Google App
    # Engine, a webserver process such as Gunicorn will serve the app. This
    # can be configured by adding an `entrypoint` to app.yaml.
    app.run(host="localhost", port=8080, debug=True)

4. 종속 항목 정의

웹 앱의 종속 항목을 지정하려면 터미널로 돌아가서 사용할 정확한 Flask 버전으로 프로젝트의 루트 디렉터리에 requirements.txt 파일을 만듭니다.

touch requirements.txt

Cloud Shell 편집기로 파일을 편집하려면 다음 명령어를 사용합니다.

cloudshell edit requirements.txt

requirements.txt

# https://pypi.org/project/Flask
Flask==3.0.2

5. 배포 구성

App Engine에 웹 앱을 배포하려면 app.yaml 파일이 필요합니다. 이 구성 파일은 App Engine을 위한 웹 앱 설정을 정의합니다.

터미널에서 프로젝트의 루트 디렉터리에 있는 app.yaml 파일을 만들고 수정합니다.

touch app.yaml

Cloud Shell 편집기로 파일을 편집하려면 다음 명령어를 사용합니다.

cloudshell edit app.yaml

app.yaml

runtime: python312

6. 웹 앱 배포

터미널에서 디렉터리의 내용을 확인합니다.

ls

다음과 같은 3개의 파일이 있어야 합니다.

app.yaml  main.py  requirements.txt

다음 명령어를 사용하여 웹 앱을 배포합니다.

gcloud app deploy

처음에는 배포 리전을 선택해야 합니다.

Please choose the region where you want your App Engine application
located:

 [1] asia-east2
...
 [7] australia-southeast1
 [8] europe-west
 [9] europe-west2
...
 [12] northamerica-northeast1
 [13] southamerica-east1
...
 [19] us-west4
...
Please enter your numeric choice:

배포를 시작할지 확인합니다.

Creating App Engine application in project [PROJECT_ID] and region [REGION]....done.
Services to deploy:

descriptor:      [~/helloworld/app.yaml]
source:          [~/helloworld]
target project:  [PROJECT_ID]
target service:  [default]
target version:  [YYYYMMDDtHHMMSS]
target url:      [https://PROJECT_ID.REGION_ID.r.appspot.com]

Do you want to continue (Y/n)?

앱이 배포됩니다.

Beginning deployment of service [default]...
Created .gcloudignore file. See `gcloud topic gcloudignore` for details.
Uploading 3 files to Google Cloud Storage
100%
File upload done.
Updating service [default]...done.     
Setting traffic split for service [default]...done.
Deployed service [default] to [https://PROJECT_ID.REGION_ID.r.appspot.com]

이제 웹 앱이 https://PROJECT_ID.REGION_ID.r.appspot.com에서 HTTP 요청에 응답할 준비가 되었습니다.

7. 웹 앱 테스트

웹 앱이 https://PROJECT_ID.REGION_ID.r.appspot.com에서 HTTP 요청에 응답할 준비가 되었습니다.

먼저 gcloud app describe 명령어로 웹 앱 호스트 이름을 검색합니다.

APPENGINE_HOSTNAME=$(gcloud app describe --format "value(defaultHostname)")

다음과 같은 간단한 HTTP GET 요청으로 웹 앱을 테스트합니다.

curl https://$APPENGINE_HOSTNAME

다음과 같은 대답이 표시됩니다.

Hello World!

요약

이전 단계에서는 간단한 Python 웹 앱을 설정하고 App Engine에서 애플리케이션을 실행하고 배포했습니다.

8. 웹 앱 업데이트

main.py 파일에서 hello() 함수 본문을 변경하여 웹 앱을 수정합니다.

Cloud Shell 편집기로 파일을 편집하려면 다음 명령어를 사용합니다.

cloudshell edit main.py

main.py

import flask

# If `entrypoint` is not defined in app.yaml, App Engine will look for an app
# called `app` in `main.py`.
app = flask.Flask(__name__)


@app.get("/")
def hello():
    """Return a friendly HTTP greeting."""
    # return "Hello World!\n"  # ← Replace this line
    who = flask.request.args.get("who", "World")
    return f"Hello {who}!\n"


if __name__ == "__main__":
    # Used when running locally only. When deploying to Google App
    # Engine, a webserver process such as Gunicorn will serve the app. This
    # can be configured by adding an `entrypoint` to app.yaml.
    app.run(host="localhost", port=8080, debug=True)

터미널에서 다시 배포하여 웹 앱을 업데이트합니다.

gcloud app deploy --quiet

앱의 새 버전이 배포됩니다.

Beginning deployment of service [default]...
Uploading 1 file to Google Cloud Storage 
...
Deployed service [default] to [https://PROJECT_ID.REGION_ID.r.appspot.com]

이전과 마찬가지로 웹 앱의 새 버전을 테스트합니다.

curl https://$APPENGINE_HOSTNAME

다음과 같이 동일한 대답을 얻게 됩니다.

Hello World!

선택적 매개변수를 사용하여 테스트합니다.

curl https://$APPENGINE_HOSTNAME?who=Universe

다음과 같은 대답이 표시됩니다.

Hello Universe!

요약

이 단계에서는 서비스 중단 없이 웹 앱을 업데이트하고 재배포했습니다.

9. 축하합니다.

Python으로 첫 번째 App Engine 웹 애플리케이션을 작성하는 방법을 알아보았습니다.

자세히 알아보기

라이선스

이 작업물은 Creative Commons Attribution 2.0 일반 라이선스에 따라 사용이 허가되었습니다.