App Engine 표준 환경에서 Django 실행

Google App Engine 표준 환경에서 실행되는 Django 앱 개발을 쉽게 시작할 수 있습니다. App Engine은 트래픽에 따라 동적으로 확장하므로 사용자 수에 관계없이 모든 사용자에게 제공할 수 있도록 자유롭게 확장이 가능합니다.

이 가이드는 Django 웹 개발에 익숙하신 분을 대상으로 하며, 공식 Django 가이드 앱의 배포 단계인 맨 처음 Django 앱을 작성하는 과정을 설명합니다. 특히 처음으로 Django 개발을 하는 경우 먼저 이 가이드를 살펴보는 것이 좋습니다. 앱의 모델은 질문이 포함된 설문을 나타내며, Django 관리 콘솔을 사용하여 모델과 상호작용할 수 있습니다.

이 가이드에는 Python 3.7이 필요합니다.

시작하기 전에

각 단계를 완료할 때마다 해당하는 체크박스를 선택하세요.

  1. check_box_outline_blank check_box Google Cloud Platform Console에서 프로젝트를 만듭니다.
    프로젝트를 아직 만들지 않았으면 지금 만드세요. 프로젝트를 사용하면 배포, 액세스 제어, 결제, 서비스 등 앱용 Google Cloud Platform 리소스를 모두 관리할 수 있습니다.
    1. GCP Console을 엽니다.
    2. 상단의 드롭다운 메뉴에서 프로젝트 만들기를 선택합니다.
    3. 고급 옵션 보기를 클릭합니다. App Engine 위치에서 미국을 선택합니다.
    4. 프로젝트 이름을 입력합니다.
    5. 프로젝트 ID를 기록합니다. 프로젝트 ID는 프로젝트 이름과 다를 수 있습니다. 프로젝트 ID는 명령어와 구성에서 사용됩니다.
  2. check_box_outline_blank check_box 프로젝트 결제를 사용 설정합니다.무료 평가판도 신청하세요.

    아직 프로젝트 결제를 사용 설정하지 않았다면 지금 결제를 사용 설정합니다.무료 평가판도 신청하세요. 결제를 사용 설정하면 앱이 인스턴스 실행 및 데이터 저장과 같은 청구 가능한 리소스를 사용할 수 있습니다. 무료 평가 기간 중에는 서비스 비용이 청구되지 않습니다.

  3. check_box_outline_blank check_box Cloud SDK를 설치합니다.

    SDK를 아직 설치하지 않았다면 지금 Cloud SDK를 설치하고 초기화하세요. Cloud SDK에는 GCP에서 리소스를 만들고 관리할 수 있게 해주는 도구와 라이브러리가 포함되어 있습니다.

  4. check_box_outline_blank check_box 프로젝트에 API를 사용 설정합니다.

    그러면 GCP Console로 이동하여 이 가이드에서 사용하는 API를 자동으로 사용할 수 있습니다. 사용하는 API는 Google Cloud SQL API입니다.

앱 다운로드 및 실행

앞서 설명한 단계를 완료한 후 Django 샘플 앱을 다운로드 및 배포할 수 있습니다. 다음 섹션에서는 샘플을 구성하고 실행하고 배포하는 방법에 대해 설명합니다.

Django 앱 복제

Django 샘플 앱용 코드는 GitHub의 Google Cloud Platform Python 샘플 저장소에 있습니다.

저장소를 로컬 머신에 복제합니다.

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

샘플 코드가 있는 디렉토리로 이동합니다.

Linux/macOS

cd python-docs-samples/appengine/standard_python37/django

Windows

cd python-docs-samples\appengine\standard_python37\django

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

로컬 환경 설정

배포된 애플리케이션은 App Engine 환경에 기본 제공되는 Cloud SQL 프록시를 사용하여 Cloud SQL 인스턴스와 통신합니다. 하지만 애플리케이션을 로컬에서 테스트하려면 Cloud SQL 프록시의 로컬 사본을 개발 환경에 설치하여 사용해야 합니다.

Cloud SQL 프록시 자세히 알아보기

Cloud SQL 인스턴스에 대한 기본 관리 작업을 수행하려면 MySQL 클라이언트를 사용하면 됩니다.

SQL 프록시 설치

Cloud SQL 프록시를 다운로드하고 설치합니다. Cloud SQL 프록시는 로컬에서 실행할 때 Cloud SQL 인스턴스에 연결하는 데 사용합니다.

Linux 64비트

  1. 프록시를 다운로드합니다.
    wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
    
  2. 프록시 실행 파일을 만듭니다.
    chmod +x cloud_sql_proxy
    

Linux 32비트

  1. 프록시를 다운로드합니다.
    wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.386 -O cloud_sql_proxy
    
  2. 프록시 실행 파일을 만듭니다.
    chmod +x cloud_sql_proxy
    

macOS 64비트

  1. 프록시를 다운로드합니다.
    curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.darwin.amd64
    
  2. 프록시 실행 파일을 만듭니다.
    chmod +x cloud_sql_proxy
    

macOS 32비트

  1. 프록시를 다운로드합니다.
    curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.darwin.386
    
  2. 프록시 실행 파일을 만듭니다.
    chmod +x cloud_sql_proxy
    

Windows 64비트

https://dl.google.com/cloudsql/cloud_sql_proxy_x64.exe를 마우스 오른쪽 버튼으로 클릭하고 '다른 이름으로 링크 저장...'을 선택하여 프록시 이름을 cloud_sql_proxy.exe로 바꾼 후 다운로드합니다.

Windows 32비트

https://dl.google.com/cloudsql/cloud_sql_proxy_x86.exe를 마우스 오른쪽 버튼으로 클릭하고 '다른 이름으로 링크 저장...'을 선택하여 프록시 이름을 cloud_sql_proxy.exe로 바꾼 후 다운로드합니다.
사용 중인 운영 체제가 여기에 없으면 소스에서 프록시를 컴파일할 수도 있습니다.

Cloud SQL 인스턴스 만들기

  1. MySQL 2세대용 Cloud SQL 인스턴스를 만듭니다. 인스턴스 이름을 polls-instance 또는 비슷한 이름으로 지정합니다. 인스턴스가 준비되는 데 몇 분 정도 걸릴 수 있습니다. 인스턴스가 준비되면 인스턴스 목록에 표시됩니다.
  2. 이제 명령줄에서 Cloud SDK를 사용하여 다음 명령어를 실행합니다. 다음 단계를 진행하려면 connectionName에 표시된 값을 복사합니다.
    gcloud sql instances describe [YOUR_INSTANCE_NAME]

    connectionName 값의 형식은 다음과 같습니다. [PROJECT_NAME]:[REGION_NAME]:[INSTANCE_NAME]

Cloud SQL 인스턴스 초기화

  1. 이전 단계의 connectionName을 사용하여 Cloud SQL 프록시를 시작합니다.

    Linux/macOS

    ./cloud_sql_proxy -instances="[YOUR_INSTANCE_CONNECTION_NAME]"=tcp:3306

    Windows

    cloud_sql_proxy.exe -instances="[YOUR_INSTANCE_CONNECTION_NAME]"=tcp:3306

    [YOUR_INSTANCE_CONNECTION_NAME]을 이전 단계에서 기록한 connectionName 값으로 바꿉니다.

    이 단계에서는 로컬 테스트 용도로 로컬 컴퓨터에서 Cloud SQL 인스턴스로 연결을 설정합니다. 애플리케이션을 로컬에서 테스트하는 동안 Cloud SQL 프록시를 계속 실행합니다.

  2. 그런 다음 새 Cloud SQL 사용자 및 데이터베이스를 만듭니다.

    콘솔

    1. Cloud SQL 인스턴스 polls-instance새 데이터베이스를 GCP Console을 사용하여 만듭니다. 예를 들어 polls라는 이름을 사용할 수 있습니다.
    2. Cloud SQL 인스턴스 polls-instance새 사용자를 GCP Console을 사용하여 만듭니다.

    MYSQL 클라이언트

    1. 별도의 명령줄 탭에서 MySQL 클라이언트 또는 비슷한 프로그램을 사용하여 인스턴스에 연결합니다. 메시지가 표시되면 구성한 루트 비밀번호를 사용합니다.
      mysql --host 127.0.0.1 --user root --password
      
    2. 다음 명령을 사용하여 Cloud SQL 데이터베이스에서 필수 데이터베이스, 사용자, 액세스 권한을 만듭니다. [MYSQL_USER][MYSQL_PASSWORD]를 원하는 사용자 이름 및 비밀번호로 바꿉니다.
      CREATE DATABASE polls;
      CREATE USER '[MYSQL_USER]' IDENTIFIED BY '[MYSQL_PASSWORD]';
      GRANT ALL ON . TO '[MYSQL_USER]';
      

데이터베이스 설정 구성

  1. 수정하기 위해 mysite/settings.py를 엽니다.

  2. 두 곳에서 [YOUR-USERNAME][YOUR-PASSWORD]를 이전에 'Cloud SQL 인스턴스 만들기' 단계에서 만든 사용자 이름과 비밀번호로 바꿉니다. 이렇게 하면 App Engine 배포 및 로컬 테스트를 위해 데이터베이스에 대한 연결을 설정할 수 있습니다.

  3. 다음 명령어를 실행합니다. 다음 단계를 진행하려면 출력된 connectionName 값을 복사합니다.

    gcloud sql instances describe [YOUR_INSTANCE_NAME]
    
  4. [YOUR-CONNECTION-NAME]을 이전 단계에서 복사한 connectionName으로 바꿉니다.

  5. [YOUR-DATABASE]를 'Cloud SQL 인스턴스 초기화' 단계에서 선택한 이름으로 바꿉니다.

  6. settings.py를 닫고 저장합니다.

로컬 컴퓨터에서 앱 실행

  1. Django 앱을 로컬 컴퓨터에서 실행하려면 Python, pip, virtualenv를 포함한 Python 개발 환경을 설정해야 합니다. 자세한 내용은 Google Cloud Platform의 Python 개발 환경 설정을 참조하세요.

  2. 격리된 Python 환경을 만들고 종속 항목을 설치합니다.

    Linux/macOS

    virtualenv env
    source env/bin/activate
    pip install -r requirements.txt
    

    Windows

    virtualenv env
    env\scripts\activate
    pip install -r requirements.txt
    

  3. Django 마이그레이션을 실행하여 모델을 설정합니다.

    python manage.py makemigrations
    python manage.py makemigrations polls
    python manage.py migrate
    
  4. 로컬 웹 서버를 시작합니다.

    python manage.py runserver
    
  5. 웹브라우저에서 다음 주소를 입력합니다.

    http://localhost:8000
    

다음 텍스트가 있는 간단한 웹페이지가 표시됩니다. 'Hello, world. You're at the polls index.' 샘플 앱 페이지는 컴퓨터에서 실행 중인 Django 웹 서버에서 제공됩니다. 계속 진행할 준비가 되면 Ctrl+C를 눌러 로컬 웹 서버를 종료합니다.

Django 관리 콘솔 사용

  1. 수퍼유저를 만듭니다.

    python manage.py createsuperuser
    
  2. 로컬 웹 서버를 시작합니다.

    python manage.py runserver
    
  3. 다음 주소를 웹브라우저에 입력합니다. 관리 사이트에 로그인하려면 createsuperuser를 실행할 때 만든 사용자 이름과 비밀번호를 사용합니다.

    http://localhost:8000/admin/
    

App Engine 표준 환경에 앱 배포

  1. 모든 정적 콘텐츠를 폴더 하나로 수집합니다. 다음 명령어를 사용하면 앱의 모든 정적 파일이 settings.py에서 STATIC_ROOT로 지정된 폴더로 이동합니다.

    python manage.py collectstatic
    
  2. python-docs-samples/appengine/standard/django 파일이 있는 애플리케이션의 app.yaml 디렉토리에서 다음 명령어를 실행하여 앱을 업로드합니다.

    gcloud app deploy
    

    업데이트가 완료되었다는 메시지가 표시될 때까지 기다립니다.

클라우드에서 앱 실행 보기

웹브라우저에서 다음 주소를 입력합니다.

https://<your_project_id>.appspot.com

이번에는 App Engine 표준 환경에서 실행되는 웹 서버에서 요청을 처리합니다.

이 명령어는 app.yaml에서 설명된 대로 애플리케이션을 배포하고 새로 배포된 버전을 기본 버전으로 설정하여 새로운 모든 트래픽을 처리합니다.

앱을 업데이트하는 경우 앱을 처음 배포할 때 사용한 같은 명령어를 입력하여 업데이트된 버전을 배포할 수 있습니다. 새로 배포하면 앱의 새 버전을 만들고 기본 버전으로 승격합니다. 이전 버전의 앱은 유지됩니다. 이러한 모든 앱 버전은 청구 가능한 리소스입니다. 기본 버전이 아닌 앱 버전 삭제에 대한 자세한 내용은 삭제를 참조하세요.

프로덕션

프로덕션 환경에서 콘텐츠를 제공할 준비가 되면 다음 구성을 변경합니다.

  1. mysite/settings.py에서 DEBUG 변수를 False로 변경합니다.

코드 이해하기

Django 샘플 앱은 표준 Django 도구를 사용하여 생성되었습니다. 다음 명령어는 프로젝트 및 설문조사 앱을 만듭니다.

django-admin startproject mysite
python manage.py startapp polls

settings.py 파일에는 SQL 데이터베이스의 구성이 포함되어 있습니다. settings.py의 코드는 GAE_APPLICATION 환경 변수를 사용하여 앱이 App Engine에서 실행되는지 아니면 로컬 컴퓨터에서 실행되는지를 결정합니다. 앱이 App Engine에서 실행되면 /cloudsql Unix 소켓을 사용하여 MySQL 호스트에 연결합니다. 앱이 로컬 컴퓨터에서 실행되면 사용자 이름과 비밀번호가 필요한 TCP를 사용하여 MySQL 호스트에 연결합니다.

if os.getenv('GAE_APPLICATION', None):
    # Running on production App Engine, so connect to Google Cloud SQL using
    # the unix socket at /cloudsql/<your-cloudsql-connection string>
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'HOST': '/cloudsql/[YOUR-CONNECTION-NAME]',
            'USER': '[YOUR-USERNAME]',
            'PASSWORD': '[YOUR-PASSWORD]',
            'NAME': '[YOUR-DATABASE]',
        }
    }
else:
    # Running locally so connect to either a local MySQL instance or connect to
    # Cloud SQL via the proxy. To start the proxy via command line:
    #
    #     $ cloud_sql_proxy -instances=[INSTANCE_CONNECTION_NAME]=tcp:3306
    #
    # See https://cloud.google.com/sql/docs/mysql-connect-proxy
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'HOST': '127.0.0.1',
            'PORT': '3306',
            'NAME': '[YOUR-DATABASE]',
            'USER': '[YOUR-USERNAME]',
            'PASSWORD': '[YOUR-PASSWORD]',
        }
    }

app.yaml 파일에는 App Engine에 배포하기 위한 구성 정보가 포함되어 있습니다. 이 app.yaml 파일에서 App Engine이 static/ 디렉토리에서 정적 파일을 제공하도록 지정합니다.

runtime: python37

handlers:
# This configures Google App Engine to serve the files in the app's static
# directory.
- url: /static
  static_dir: static/

# This handler routes all requests not caught above to your main app. It is
# required when static routes are defined, but can be omitted (along with
# the entire handlers section) when there are no static files defined.
- url: /.*
  script: auto
이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...