자바 8 로컬 개발 서버 사용

자바용 Cloud SDK에는 사용자의 컴퓨터에서 애플리케이션 테스트가 가능하도록 로컬 개발 서버가 포함되어 있습니다. 로컬 개발 서버는 App Engine 자바 런타임 환경 및 Datastore를 포함한 모든 해당 서비스를 에뮬레이션합니다.

개발용 웹 서버 실행

앱의 시스템 속성 및 환경 변수 설정에 대한 자세한 내용은 요청 처리 방법을 참조하세요.

또한 명령 프롬프트에서 개발용 웹 서버를 실행할 수 있습니다. 실행할 명령어는 SDK의 google-cloud-sdk/bin/ 디렉터리에 있습니다.

Windows 명령어 구문:

google-cloud-sdk\bin\java_dev_appserver.cmd [options] [WAR_DIRECTORY_LOCATION]

Linux 또는 macOS 명령어 구문은 다음과 같습니다.

google-cloud-sdk/bin/java_dev_appserver.sh [options] [WAR_DIRECTORY_LOCATION]

이 명령어는 애플리케이션의 WAR 디렉토리 위치를 인수로 사용합니다.

개발 서버 중지

웹 서버를 중지하려면 Ctrl-C를 누릅니다.

애플리케이션 런타임 환경 검색

코드가 프로덕션 또는 로컬 개발 서버에서 실행 중인지 확인하려면 SystemProperty.environment.value() 메서드 값을 확인하면 됩니다. 예를 들면 다음과 같습니다.

if (SystemProperty.environment.value() == SystemProperty.Environment.Value.Production) {
   // Production
 } else {
  // Local development server
  // which is: SystemProperty.Environment.Value.Development
}

로컬 Datastore 에뮬레이터 사용

개발용 웹 서버는 컴퓨터에서 로컬 파일 지원 Datastore를 사용하여 Datastore를 시뮬레이션합니다. Datastore 이름은 local_db.bin이며 애플리케이션의 WAR 디렉터리인 WEB-INF /appengine-generated/ 디렉터리에 생성됩니다. 이 Datastore는 애플리케이션과 함께 업로드되지 않습니다.

이 Datastore는 웹 서버 호출 간에 지속되므로, 다음에 웹 서버를 실행할 때에도 여기에 저장된 데이터를 계속 사용할 수 있습니다. Datastore의 내용을 지우려면 서버를 종료하고 이 파일을 삭제합니다.

Datastore 색인 구성에 설명된 대로, 개발 서버는 테스트 중에 수행되는 쿼리로부터 확인된, 애플리케이션에 필요한 Datastore 색인에 대한 구성을 생성할 수 있습니다. 그러면 WAR의 WEB-INF/appengine-generated/ 디렉터리에 datastore-indexes-auto.xml이라는 파일이 생성됩니다. 자동 색인 구성을 사용 중지하려면 <datastore-indexes> 요소에 autoGenerate="false" 속성을 사용하여 WEB-INF/ 디렉터리에서 datastore-indexes.xml 파일을 만들거나 수정합니다. 자세한 내용은 Datastore 색인 구성을 참조하세요.

개발 서버에서 Datastore 찾아보기

개발용 웹 서버를 사용하여 로컬 Datastore를 찾아보려면 다음 안내를 따르세요.

  1. 이전에 설명된 대로 개발 서버를 시작합니다.
  2. 개발용 콘솔로 이동합니다.
  3. 왼쪽 탐색 창에서 Datastore 뷰어를 클릭하여 로컬 Datastore 내용을 확인합니다.

Cloud Datastore 일관성 모델

기본적으로 로컬 Datastore는 전역 쿼리에서 즉시 표시되지 않는 Datastore 쓰기 비율이 10%로 설정되도록 구성됩니다.

이러한 일관성 수준을 조정하려면 애플리케이션에 표시하려는 eventual consistency 정도에 해당하는 값으로 datastore.default_high_rep_job_policy_unapplied_job_pct 시스템 속성을 설정합니다.

-Ddatastore.default_high_rep_job_policy_unapplied_job_pct=20

명령 프롬프트 java_dev_appserver.sh를 사용하여 이 속성을 설정할 경우 --jvm_flag=...를 사용하여 속성을 설정해야 합니다.

google_cloud_sdk/bin/java-dev_appserver.sh  --jvm_flag=-Ddatastore.default_high_rep_job_policy_unapplied_job_pct=20

datastore.default_high_rep_job_policy_unapplied_job_pct의 유효 범위는 0~100입니다. 이 범위 외부의 숫자를 사용할 경우 오류가 수신됩니다.

Maven을 사용하는 경우 jvmFlags를 사용하여 이 플래그를 인수로 appengine:devserver에 전달할 수 있습니다.

<jvmFlags>
  <jvmFlag>-Ddatastore.default_high_rep_job_policy_unapplied_job_pct=20</jvmFlag>
</jvmFlags>

자동 ID 할당 정책 지정

로컬 Datastore가 자동 개체 ID를 할당하는 방법을 구성할 수 있습니다. 다음 자동 ID 할당 정책은 개발 서버에서 지원됩니다.

sequential
ID가 연속된 일련의 정수로부터 할당됩니다.
scattered
ID가 대략적으로 균일하게 분포된 일련의 반복되지 않는 정수로부터 할당됩니다.

로컬 Datastore의 기본 정책은 scattered입니다.

자동 ID 정책을 지정하려면 datastore.auto_id_allocation_policy 시스템 속성을 sequential 또는 scattered로 설정합니다.

-Ddatastore.auto_id_allocation_policy=scattered

dev_appserver macro에 전달된 플래그를 통해 이 시스템 속성을 설정하려면 다음을 사용하세요.

java_dev_appserver --jvm_flag=-Ddatastore.auto_id_allocation_policy=scattered

사용자 계정 시뮬레이션

개발용 웹 서버는 고유한 로그인 및 로그아웃 페이지를 사용해서 Google 계정을 시뮬레이션합니다. 개발용 웹 서버에서 실행되는 동안 로그인 및 로그아웃 URL을 생성하는 메서드는 로컬 서버에서 /_ah/login/_ah/logout의 URL을 반환합니다.

개발 로그인 페이지에는 사용자가 이메일 주소를 입력할 수 있는 양식이 포함되어 있습니다. 세션에는 사용자가 활성 사용자로서 입력한 모든 이메일 주소가 사용됩니다.

로그인된 사용자가 애플리케이션에서 관리자로 인식되도록 하려면 양식에서 '관리자로 로그인' 체크박스를 선택합니다.

URL 가져오기 사용

애플리케이션이 URL 가져오기 API를 사용해서 HTTP 요청을 수행하는 경우 개발용 웹 서버는 컴퓨터에서 직접 요청을 수행합니다. 웹사이트에 액세스하기 위해 프록시 서버를 사용하는 경우 App Engine에서 애플리케이션이 실행될 때와 동작이 다를 수 있습니다.

개발용 콘솔

개발용 웹 서버에는 콘솔 웹 애플리케이션이 포함됩니다. 콘솔에서는 로컬 Datastore를 찾아볼 수 있습니다.

콘솔에 액세스하려면 서버의 URL(예: /_ah/admin http://localhost:8080/_ah/admin)에 방문하세요.

명령줄 인수

개발 서버 명령어에는 다음과 같은 명령줄 인수가 지원됩니다.

--address=...

서버에 사용할 호스트 주소입니다. 네트워크의 다른 컴퓨터에서 개발 서버에 액세스하려면 이 주소에 액세스할 수 있도록 설정해야 합니다. 주소가 0.0.0.0이면 localhost 액세스 및 호스트 이름 액세스가 모두 허용됩니다. 기본값은 localhost입니다.

--default_gcs_bucket=...

기본 Google Cloud Storage 버킷 이름을 설정합니다.

--disable_update_check

제공된 경우, 개발 서버가 새로운 SDK 릴리스 사용 가능 여부를 확인하기 위해 App Engine에 연결하지 않습니다. 기본적으로 서버는 시작 시에 새 버전을 확인하고 새 버전을 사용할 수 있으면 메시지를 출력합니다.

--generated_dir=...

생성된 파일이 만들어지는 디렉터리를 설정합니다.

--help

유용한 메시지를 출력한 후 종료합니다.

--jvm_flag=...

제공된 플래그를 JVM 인수로 전달합니다. 여러 플래그를 제공하기 위해 반복할 수 있습니다.

--port=...

서버에 사용할 포트 번호입니다. 기본값은 8080입니다.

--sdk_root=...

도구 위치가 다른 경우 Cloud SDK의 경로입니다.

--server=...

최신 SDK 버전을 확인하는 데 사용할 서버입니다.