로컬 개발 서버를 사용하여 프로덕션에서 App Engine 애플리케이션을 실행하고 이를 사용해서 App Engine 번들 서비스에 액세스하는 과정을 시뮬레이션할 수 있습니다.
시뮬레이션된 환경에서는 제한된 시스템 기능 및 PHP 5 모듈 가져오기와 같은 일부 샌드박스 제한사항이 적용되지만 요청 제한 시간이나 할당량과 같은 다른 제한사항은 적용되지 않습니다.
또한 로컬 개발 서버는 태스크를 로컬로 실행하여 Datastore, Memcache, Task Queues를 포함한 App Engine용 SDK의 라이브러리에서 제공되는 서비스를 시뮬레이션합니다. 애플리케이션이 개발 서버에서 실행되는 경우, Google API HTTP 엔드포인트를 사용하여 프로덕션 인프라에 대한 원격 API 호출을 수행할 수 있습니다.
시작하기 전에
PHP 5가 지원 종료에 도달했으므로 더 이상 최신 버전의 dev_appserver.py
를 사용하여 애플리케이션을 로컬로 실행할 수 없습니다. devapp_server.py
의 보관처리된 버전을 다운로드하려면 다음 안내를 따르세요.
보관 파일에서 지원 종료에 도달한 런타임을 위한
dev_appserver.py
서버가 포함된 압축된 폴더를 다운로드합니다.디렉터리 콘텐츠를
/home
디렉터리와 같은 로컬 파일 시스템에 추출합니다.google_appengine/
디렉터리에서dev_appserver.py
를 찾을 수 있습니다.
로컬 개발 서버 설정
로컬 개발 서버 도구를 실행하려면 다음을 설정해야 합니다.
버전 2.7.12 이상의 Python 2 인터프리터가 설치되었는지 확인합니다.
셸의
DEVAPPSERVER_ROOT
환경 변수를 Python 2 인터프리터 경로로 설정합니다.
로컬 개발 서버 실행
로컬 개발 서버를 설정하고 앱의 app.yaml
구성 파일을 만든 후 dev_appserver.py
명령어를 사용하여 앱을 로컬에서 실행합니다.
로컬 개발 서버를 시작하려면 다음 안내를 따르세요.
app.yaml
구성 파일이 포함된 디렉터리에서dev_appserver.py
명령어를 실행합니다.Windows / macOS
앱의 디렉토리 경로를 지정합니다. 예:
python2 [DEVAPPSERVER_ROOT]/google_appengine/dev_appserver.py [PATH_TO_YOUR_APP]
또는 특정 서비스의 구성 파일을 지정할 수 있습니다. 예를 들면 다음과 같습니다.
python2 [DEVAPPSERVER_ROOT]/google_appengine/dev_appserver.py app.yaml
포트를 변경하려면
--port
옵션을 포함합니다.python2 [DEVAPPSERVER_ROOT]/google_appengine/dev_appserver.py --port=9999 [PATH_TO_YOUR_APP]
[DEVAPPSERVER_ROOT]
를devapp_server.py
의 보관처리된 버전의 압축을 푸는 폴더 경로로 바꿉니다.Linux/cust. php-cgi
Linux를 사용하거나
php-cgi
의 커스텀 버전을 사용하려는 경우php-cgi
에 대한 디렉터리 경로를 지정해야 합니다.로컬 머신에 사용자의 App Engine PHP 확장 프로그램 버전을 빌드합니다.
--php_executable_path
및--php_gae_extension_path
옵션을 모두 사용하여 로컬 개발 서버를 시작합니다.python2 DEVAPPSERVER_ROOT/google_appengine/dev_appserver.py --php_executable_path=[PATH_TO_PHP_CGI] --php_gae_extension_path=[PATH_TO_APPENGINE_EXTENSION] app.yaml
다음과 같이 바꿉니다.
- DEVAPPSERVER_ROOT를
devapp_server.py
의 보관처리된 버전의 압축을 푸는 폴더 경로로 바꿉니다. --php_executable_path
를 PHP 인터프리터의 위치로 바꿉니다.--php_gae_extension_path
를 이전 단계에서 빌드한gae_runtime_module.so
파일의 위치로 바꿉니다.
- DEVAPPSERVER_ROOT를
dev_appserver.py
명령어 옵션에 대한 자세한 내용은 로컬 개발 서버 옵션을 참조하세요.이제 로컬 개발 서버가 실행되고 요청을 리스닝합니다. 웹브라우저에서 http://localhost:8080/을 방문하여 앱 동작을 확인할 수 있습니다.
--port
옵션으로 커스텀 포트를 지정한 경우 이 포트로 브라우저를 열어야 합니다.
명령줄에서 로컬 서버를 중지하려면 다음을 누릅니다.
- macOS 또는 Linux: Control+C
- Windows: Control+Break
애플리케이션 ID 지정
예를 들어 이메일 주소를 스푸핑하기 위해 로컬 서버에서 앱 ID에 액세스하려면 AppIdentityService::getApplicationId
함수를 사용합니다. 실행 중인 앱의 호스트 이름을 가져오려면 AppIdentityService::getDefaultVersionHostname
함수를 사용합니다.
애플리케이션 런타임 환경 감지
코드가 프로덕션 또는 로컬 개발 서버에서 실행 중인지 확인하려면 SERVER_SOFTWARE
환경 변수 값을 확인하면 됩니다.
if (strpos(getenv('SERVER_SOFTWARE'), 'Development') === 0){
echo 'Local development server';
} else {
echo 'Production';
}
데이터 저장
PHP용 App Engine은 PHP의 스트림 API를 통해 Cloud Storage에 읽고 쓰기를 지원합니다. fopen, fwrite 또는 file_get_contents와 같이 PHP 스트림 구현을 지원하는 PHP 함수를 사용하면 Cloud Storage URI(gs://
)를 지정하여 Cloud Storage에 읽고 쓸 수 있습니다.
로컬 개발 서버는 요청 간에 보존되는 임시 로컬 파일을 읽고 씀으로써 이 기능을 에뮬레이션합니다.
로컬 Datastore 둘러보기
앱이 로컬 개발 서버를 사용하여 로컬 Datastore에 데이터를 쓴 경우, 로컬 개발 콘솔에서 로컬 Datastore를 둘러볼 수 있습니다.
로컬 Datastore를 둘러보려면 다음 단계를 따르세요.
로컬 개발 콘솔에서 Datastore Viewer에 액세스합니다. URL은
http://localhost:8000/datastore
입니다.로컬 Datastore 콘텐츠를 확인합니다.
사용자 서비스 사용
App Engine은 애플리케이션의 인증과 승인이 간소화되도록 사용자 서비스를 제공합니다. 로컬 개발 서버는 자체 로그인 및 로그아웃 페이지를 사용하여 Google 계정 동작을 시뮬레이션합니다. 로컬 개발 서버에서 실행되는 동안 createLoginURL
및 createLogoutURL
함수는 로컬 서버의 /_ah/login
및 /_ah/logout
에 대한 URL을 반환합니다.
메일 사용
로컬 개발 서버는 SMTP 서버 또는 Sendmail의 로컬 설치를 사용하여 App Engine 메일 서비스를 호출하는 이메일을 보낼 수 있습니다.
SMTP 사용
SMTP 서버에서 메일 지원을 사용 설정하려면 다음과 같이 dev_appserver.py
를 호출합니다.
python2 [DEVAPPSERVER_ROOT]/google_appengine/dev_appserver.py --smtp_host=smtp.example.com --smtp_port=25 \
--smtp_user=ajohnson --smtp_password=k1tt3ns [PATH_TO_YOUR_APP]
다음과 같이 바꿉니다.
[DEVAPPSERVER_ROOT]
를devapp_server.py
의 보관처리된 버전의 압축을 푸는 폴더 경로로 바꿉니다.--smtp_host
,--smtp_port
,--smtp_user
,--smtp_password
옵션을 고유한 구성 값으로 바꿉니다.
Sendmail 사용
Sendmail로 메일 지원을 사용 설정하려면 다음과 같이 dev_appserver.py
를 호출합니다.
python2 [DEVAPPSERVER_ROOT]/google_appengine/dev_appserver.py --enable_sendmail=yes [PATH_TO_YOUR_APP]
[DEVAPPSERVER_ROOT]
를 devapp_server.py
의 보관처리된 버전을 추출하는 폴더 경로로 바꿉니다.
로컬 서버는 sendmail
명령어를 사용하여 설치 기본 구성으로 이메일 메시지를 보냅니다.
URL 가져오기 사용
애플리케이션이 URL Fetch API를 사용하여 HTTP 요청을 수행하는 경우 로컬 개발 서버는 컴퓨터에서 직접 요청을 수행합니다. 웹사이트 액세스에 프록시 서버를 사용하는 경우, 로컬 서버에서의 URL 가져오기 동작은 프로덕션 App Engine의 경우와 다를 수 있습니다.
XDebug로 로컬 디버깅
XDebug 디버거와 호환되는 디버거가 있고 xdebug
모듈을 설치한 경우 로컬 개발 서버에서 XDebug를 사용할 수 있습니다.
Linux 또는 macOS의 개발 서버에서 XDebug를 사용 설정하려면 다음 단계를 따르세요.
IDE의 idekey로
XDEBUG_CONFIG
환경 변수를 내보내 다음에 연결합니다.export XDEBUG_CONFIG="idekey=netbeans-xdebug remote_host=localhost"
--php_remote_debugging=yes
를 사용하여 개발 서버를 호출합니다.