로컬 개발 서버 사용

Cloud SDKPython 2용 App Engine SDK에는 로컬에서 실행할 수 있는 로컬 개발 서버(dev_appserver.py)가 있어 프로덕션 App Engine에서 실행되는 애플리케이션을 시뮬레이션할 수 있습니다. 시뮬레이션된 환경에서는 제한된 시스템 기능 및 Python 2 모듈 가져오기와 같은 일부 샌드박스 제한이 적용되지만 요청 타임아웃이나 할당량과 같은 다른 제한은 적용되지 않습니다.

또한 로컬 개발 서버는 태스크를 로컬로 실행하여 Datastore, Memcache, Task Queues를 포함한 App Engine용 SDK의 라이브러리에서 제공되는 서비스를 시뮬레이션합니다. 애플리케이션이 개발 서버에서 실행되는 경우, Google API HTTP 엔드포인트를 사용하여 프로덕션 인프라에 대한 원격 API 호출을 수행할 수 있습니다.

로컬 개발 서버 실행

앱의 app.yaml 구성 파일을 만든 후 dev_appserver.py 명령어로 로컬 개발 서버를 시작하여 앱을 로컬에서 실행할 수 있습니다.

로컬 개발 서버를 시작하려면 다음 안내를 따르세요.

  1. 다음과 같이 앱의 app.yaml 구성 파일이 있는 디렉토리에서 dev_appserver.py 명령어를 실행합니다.

    앱의 디렉토리 경로를 지정합니다. 예를 들면 다음과 같습니다.

    dev_appserver.py [PATH_TO_YOUR_APP]

    또는 특정 서비스의 구성 파일을 지정할 수 있습니다. 예를 들면 다음과 같습니다.

    dev_appserver.py app.yaml

    포트를 변경하려면 --port 옵션을 포함합니다.

    dev_appserver.py --port=9999 [PATH_TO_YOUR_APP]

    dev_appserver.py가 작동하지 않나요?

    dev_appserver.py 명령어 옵션에 대한 자세한 내용은 로컬 개발 서버 옵션을 참조하세요.

  2. 이제 로컬 개발 서버가 실행되고 요청을 수신 대기합니다. 웹브라우저에서 http://localhost:8080/을 방문하여 앱 동작을 확인할 수 있습니다.

    --port 옵션으로 커스텀 포트를 지정한 경우, 해당 포트로 브라우저를 열어야 합니다.

명령줄에서 로컬 서버를 중지하려면 다음을 누릅니다.

  • macOS 또는 Linux: Control-C
  • Windows: Control-Break

애플리케이션 ID 지정

예를 들어 이메일 주소를 위장하기 위해 로컬 서버에서 앱 ID에 액세스하려면 get_application_id() 함수를 사용합니다. 실행 중인 앱의 호스트 이름을 가져오려면 get_default_version_hostname() 함수를 사용합니다.

애플리케이션 런타임 환경 감지

코드가 프로덕션과 로컬 개발 서버 중 어디에서 실행 중인지 확인하려면 SERVER_SOFTWARE 환경 변수를 확인합니다.

if os.getenv('SERVER_SOFTWARE', '').startswith('Google App Engine/'):
  # Production
else:
  # Local development server

로컬 Datastore 사용

로컬 개발 서버는 로컬 서버 호출 사이에서 지속되는 로컬 파일을 사용하여 App Engine Datastore를 시뮬레이션합니다.

색인과 index.yaml에 대한 자세한 내용은 Datastore 색인Datastore 색인 구성 페이지를 참조하세요.

로컬 Datastore 찾아보기

앱이 로컬 개발 서버를 사용하여 로컬 Datastore에 데이터를 쓴 경우, 로컬 개발 콘솔에서 로컬 Datastore를 둘러볼 수 있습니다.

로컬 Datastore를 둘러보려면 다음 단계를 따르세요.

  1. 개발 서버를 시작합니다.

  2. 로컬 개발 콘솔에서 Datastore Viewer에 액세스합니다. (URL: http://localhost:8000/datastore)

  3. 로컬 Datastore 콘텐츠를 확인합니다.

ID 할당 정책 지정

프로덕션 App Engine의 경우, 항목 ID를 자동으로 생성하도록 Datastore를 설정할 수 있습니다.

프로덕션 서버의 자동 ID 할당 정책은 개발 서버에서 사용하는 것과는 완전히 다르지만 로컬 서버의 자동 ID 할당 정책을 설정할 수도 있습니다.

자동 ID 할당 정책을 지정하려면 --auto_id_policy 옵션을 사용합니다.

dev_appserver.py --auto_id_policy=sequential

여기서 --auto_id_policy는 다음 중 하나일 수 있습니다.

  • scattered: (기본값) ID가 대략적으로 균일하게 분포된 정수의 반복되지 않는 시퀀스에서 할당됩니다.
  • sequential: 연속된 정수의 시퀀스에서 ID가 할당됩니다.

로컬 Datastore 지우기

애플리케이션의 로컬 Datastore를 지우려면 다음과 같이 로컬 개발 서버를 호출합니다.

dev_appserver.py --clear_datastore=yes app.yaml

로컬 Datastore 위치 변경

Datastore 파일에 사용되는 위치를 변경하려면 --datastore_path 옵션을 사용합니다.

dev_appserver.py --datastore_path=/tmp/myapp_datastore app.yaml

사용자 서비스 사용

App Engine은 애플리케이션의 인증과 승인이 간소화되도록 사용자 서비스를 제공합니다. 로컬 개발 서버는 자체 로그인 및 로그아웃 페이지를 사용하여 Google 계정 동작을 시뮬레이션합니다. 로컬 개발 서버에서 실행되는 동안 users.create_login_url 함수와 users.create_logout_url 함수는 로컬 서버에 있는 /_ah/login/_ah/logout의 URL을 반환합니다.

메일 사용

로컬 개발 서버는 SMTP 서버 또는 Sendmail의 로컬 설치를 사용하여 App Engine 메일 서비스를 호출하는 이메일을 보낼 수 있습니다.

SMTP 사용

SMTP 서버에서 메일 지원을 사용하려면 다음과 같이 dev_appserver.py를 호출합니다.

dev_appserver.py --smtp_host=smtp.example.com --smtp_port=25 \
    --smtp_user=ajohnson --smtp_password=k1tt3ns [PATH_TO_YOUR_APP]

여기서 --smtp_host, --smtp_port, --smtp_user, --smtp_password 옵션을 고유한 값으로 설정합니다.

Sendmail 사용

Sendmail에서 메일 지원을 사용하려면 다음과 같이 dev_appserver.py를 호출합니다.

dev_appserver.py --enable_sendmail=yes [PATH_TO_YOUR_APP]

로컬 서버는 sendmail 명령어를 사용하여 설치 기본 구성으로 이메일 메시지를 보냅니다.

URL Fetch 사용

애플리케이션이 URL Fetch API를 사용하여 HTTP 요청을 수행하는 경우 로컬 개발 서버는 컴퓨터에서 직접 요청을 수행합니다. 프록시 서버를 사용하여 웹사이트에 액세스하는 경우 로컬 서버에서의 URL Fetch 동작은 프로덕션 App Engine에서와 다를 수 있습니다.

대화형 콘솔 사용

개발자는 대화형 콘솔을 사용하여 임의의 Python 코드를 웹 양식에 입력하고 앱 환경 내에서 실행할 수 있습니다. 애플리케이션 내부의 .py 파일과 동일하게 애플리케이션 환경과 서비스에 대한 액세스 권한을 제공합니다.

대화형 콘솔을 사용하려면 다음 안내를 따르세요.

  1. 개발 서버를 시작합니다.

  2. 로컬 개발 콘솔에서 대화형 콘솔에 액세스합니다. (URL: http://localhost:8000/console)

  3. 텍스트 영역에 실행할 Python 코드를 입력한 다음 양식을 제출하여 실행합니다. 예를 들어, 다음 코드는 텍스트 콘텐츠가 HelloGreeting이라는 Datastore 항목을 추가합니다.

      from google.appengine.ext import ndb
      class Greeting(ndb.Model):
        content = ndb.TextProperty()
    
      e = Greeting(content="Hello")
      e.put()
    

PDB로 디버깅

Python PDB 디버거를 사용하려면 다음 단계를 따르세요.

  1. 다음 줄을 코드에 추가합니다.

    import pdb; pdb.set_trace();
    

    dev_appserver가 이 시점에서 중단되고 PDB REPL로 이동하므로 명령줄에서 코드를 디버그할 수 있습니다.

  2. 애플리케이션이 pdb.set_trace() 호출을 동시에 여러 번 요청하면 여러 디버깅 세션이 동시에 시작되어 각각의 세션이 출력을 STDOUT으로 보냅니다. 이를 방지하려면 다음과 같이 dev_appserver 다중 스레드와 다중 처리 지원을 중지하여 요청을 직렬화합니다.

    1. 다음에 대한 다중 스레드를 중지합니다.

      • --threadsafe_override=false 플래그를 사용하는 모든 서비스
      • --threadsafe_override=<SERVICENAME>:false 플래그를 사용하는 서비스 한 개
      • --threadsafe_override=<SERVICE1NAME>:false,<SERVICE2NAME>:false 플래그를 사용하는 여러 서비스
      1. 다음의 다중 처리를 중지합니다.
        • --max_module_instances=1 플래그를 사용하는 모든 서비스
        • --max_module_instances=<SERVICENAME>:1 플래그를 사용하는 서비스 하나
        • --max_module_instances=<SERVICE1NAME>:1,<SERVICE2NAME>:1 플래그를 사용하는 여러 서비스
이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

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

Python 2용 App Engine 표준 환경