애플리케이션 테스트 및 배포

리전 ID

REGION_ID는 앱을 만들 때 선택한 리전을 기준으로 Google에서 할당하는 축약된 코드입니다. 일부 리전 ID는 일반적으로 사용되는 국가 및 주/도 코드와 비슷하게 표시될 수 있지만 코드는 국가 또는 주/도와 일치하지 않습니다. 2020년 2월 이후에 생성된 앱의 경우 REGION_ID.r이 App Engine URL에 포함됩니다. 이 날짜 이전에 만든 기존 앱의 경우 URL에서 리전 ID는 선택사항입니다.

리전 ID에 대해 자세히 알아보세요.

애플리케이션을 로컬에서 실행 및 배포하고 App Engine에서 테스트하는 방법을 알아봅니다.

로컬에서 실행

배포 전에 애플리케이션 기능을 테스트하려면 자주 사용하는 개발 도구로 로컬 환경에서 애플리케이션을 실행합니다.

애플리케이션을 배포하기 전에

애플리케이션을 배포하기 전에 다음을 확인합니다.

애플리케이션 배포

다음 방법 중 하나를 사용하여 앱을 배포할 수 있습니다.

앱을 프로그래매틱 방식으로 배포하려면 Admin API를 사용합니다.

앱의 소스 코드 배포

Maven 또는 Gradle을 사용하여 앱의 로컬 빌드를 관리하고, 앱의 모든 종속 항목을 공개적으로 다운로드할 수 있는 경우, 앱의 pom.xml 또는 build.gradle 파일이 포함된 디렉터리에서 gcloud app deploy 명령어를 입력할 수 있습니다.

gcloud app deploy

이 명령어는 Cloud Build가 App Engine 빌드팩을 사용하여 앱을 빌드하고 App Engine에 배포하도록 지시합니다.

Maven을 사용하는 경우:

  • 빌드팩에 mvn clean package --batch-mode -DskipTests 빌드 명령어가 사용됩니다.

  • 앱의 루트 디렉터리에 mvnw 파일이 포함된 경우 빌드 명령어에 mvn 대신 ./mvnw가 사용됩니다. 그런 후 Cloud Build가 target 디렉터리에서 Main-Class 매니페스트 항목이 있는 .jar 파일을 찾고 java -jar <jarfile> 값으로 entrypoint를 만듭니다.

Gradle을 사용하는 경우:

  • 빌드팩에 gradle clean assemble -x test --build-cache 빌드 명령어가 사용됩니다.

  • 앱의 루트 디렉터리에 gradlew 파일이 포함된 경우 빌드 명령어에 gradle 대신 ./gradlew가 사용됩니다. 그런 후 Cloud Build가 build/libs 디렉터리에서 Main-Class 매니페스트 항목이 있는 .jar 파일을 찾고 java -jar <jarfile> 값으로 entrypoint를 만듭니다.

  • 프로젝트의 루트에 pom.xml이 없는지 확인합니다. Maven 프로젝트는 Gradle 프로젝트보다 우선 적용됩니다.

빌드 로그 보기

Cloud Build에서 빌드 및 배포 로그 스트리밍이 시작되고 Google Cloud console의 Cloud Build 기록 섹션에서 이를 확인할 수 있습니다. 앱 리전의 빌드를 보려면 페이지 상단에 있는 리전 드롭다운 메뉴를 사용하여 필터링할 리전을 선택합니다.

이 배포 기술에서는 다음 사항에 유의하세요.

  • 앱에 로컬에서만 사용 가능한 종속 항목이 포함된 경우, Cloud Build가 앱을 빌드할 수 없고 배포가 실패합니다. 이 경우에는 대신 App Engine Maven 또는 Gradle 플러그인을 사용하는 것이 좋습니다.

  • 앱을 빌드하면 Cloud Build 할당량이 사용되고 앱의 소스 코드를 저장하면 Cloud Storage 할당량이 사용됩니다. Cloud Build 및 Cloud Storage는 무료 할당량을 제공하므로, 무료 할당량을 초과하지 않는 한 App Engine 앱을 배포할 때 비용이 발생하지 않습니다. 자세한 내용은 가격 책정을 참조하세요.

  • 현재까지는 Gradle 빌드 명령어에 추가 인수를 지정할 수 없습니다. 자세한 내용은 Google Issue Tracker를 참조하세요.

App Engine Maven 또는 Gradle 플러그인 사용

App Engine은 앱을 빌드하고 배포하는 데 사용할 수 있는 Maven 및 Gradle 플러그인을 제공합니다. 예를 들어 App Engine Maven 플러그인을 설정한 다음에는 프로젝트의 pom.xml 파일이 포함된 디렉터리에서 다음 명령어를 입력할 수 있습니다.

mvn package appengine:deploy -Dapp.deploy.projectId=PROJECT_ID

PROJECT_ID를 Cloud 프로젝트의 ID로 바꿉니다. pom.xml 파일에 이미 프로젝트 ID가 지정된 경우 실행할 명령어에 -Dapp.deploy.projectId 속성을 포함하지 않아도 됩니다.

자세한 내용은 Apache Maven 및 App Engine 플러그인 사용 또는 Gradle 및 App Engine 플러그인 사용을 참조하세요.

실행 가능한 JAR 배포

빌드 프레임워크를 사용하여 실행 가능한 JAR을 로컬로 빌드하고 앱에 app.yaml 파일 만들기를 수행했는지에 따라 다음 중 하나를 수행합니다.

  • app.yaml 파일을 만든 경우:

    1. 실행 가능한 JAR 파일과 동일한 디렉터리에 파일을 복사합니다.

    2. app.yaml 및 JAR이 포함된 디렉터리에서 다음 명령어를 입력합니다.

      gcloud app deploy
  • app.yaml 파일을 만들지 않은 경우에는 다음 명령어를 입력합니다.

    gcloud app deploy your-executable.jar

    gcloud app deploy는 모든 기본값을 사용하여 최소 설정을 포함한 app.yaml 파일을 만듭니다.

파일 무시

.gcloudignore 파일을 사용하여 서비스를 배포할 때 App Engine에 업로드되지 않는 파일과 디렉터리를 지정할 수 있습니다. 이 작업은 배포를 통해 업로드할 필요가 없는 빌드 아티팩트와 기타 파일을 무시하려는 경우에 유용합니다.

빌드 이미지 관리

새 버전을 배포할 때마다 컨테이너 이미지가 Cloud Build 서비스를 사용하여 생성됩니다. 이 컨테이너 이미지는 앱의 리전에 빌드된 후 App Engine 표준 환경에서 실행됩니다.

빌드된 컨테이너 이미지는 Container Registryapp-engine-tmp/app 폴더에 저장됩니다. 이러한 이미지를 다운로드하여 다른 위치에서 실행하거나 보관할 수 있습니다. 배포가 완료되면 App Engine은 더 이상 컨테이너 이미지가 필요하지 않습니다. 이 이미지는 자동으로 삭제되지 않으므로 스토리지 할당량에 도달하지 않도록 하려면 필요 없는 이미지를 삭제하면 됩니다. Container Registry에서의 이미지 관리에 대한 자세한 내용은 Container Registry 문서를 참조하세요.

애플리케이션 보기

애플리케이션을 App Engine에 배포한 후 다음 명령어를 실행하면 브라우저를 시작하고 https://PROJECT_ID.REGION_ID.r.appspot.com에서 애플리케이션을 볼 수 있습니다.

gcloud app browse

트래픽 이동 전에 App Engine에서 테스트

새 버전에서 트래픽을 수신하도록 구성하기 전에 App Engine에서 버전을 테스트할 수 있습니다. 예를 들어 default 서비스의 새 버전을 테스트하려면 다음 안내를 따르세요.

  1. 새 버전을 배포하되 트래픽이 새 버전으로 자동 라우팅되지 않도록 합니다.

    mvn appengine:deploy -Dapp.deploy.projectId=PROJECT_ID -Dapp.deploy.promote=False

  2. 다음 URL로 이동하여 새 버전에 액세스합니다.

    https://VERSION_ID-dot-default-dot-PROJECT_ID.REGION_ID.r.appspot.com

    이제 App Engine 런타임 환경에서 새 버전을 테스트할 수 있습니다. 로그를 확인하여 애플리케이션을 디버깅할 수 있습니다. 자세한 내용은 애플리케이션 로그 작성을 참조하세요.

    App Engine은 https://PROJECT_ID.REGION_ID.r.appspot.com으로 전송된 요청을 이전에 트래픽을 수신하도록 구성된 버전으로 라우팅합니다.

  3. 트래픽을 새 버전으로 전송하려면 Google Cloud Console을 사용하여 트래픽을 마이그레이션합니다.

    버전 관리하기

    방금 배포한 버전을 선택하고 트래픽 마이그레이션을 클릭합니다.

URL의 default를 서비스 이름으로 바꾸면 동일한 프로세스를 사용하여 다른 서비스의 새 버전을 테스트할 수 있습니다.

https://VERSION-dot-SERVICE-dot-PROJECT_ID.REGION_ID.r.appspot.com

특정 서비스와 버전 타겟팅에 대한 자세한 내용은 요청 라우팅 방법을 참조하세요.

빌드 환경 변수 사용

빌드팩을 지원하는 런타임용 빌드 환경 변수를 설정할 수도 있습니다.

빌드 환경 변수는 구성 정보를 빌드팩에 전달할 수 있는 앱과 함께 배포된 키-값 쌍입니다. 예를 들어 컴파일러 옵션을 맞춤설정할 수 있습니다. app.yaml 파일에서 build_env_variables 필드를 구성하여 이러한 빌드 환경 변수를 추가하거나 삭제할 수 있습니다.

Cloud Debugger 사용

Debugger를 사용하여 실행 중인 앱을 중지하거나 속도를 늦추지 않고 코드 위치에서 배포된 앱의 상태를 검사할 수 있습니다.

자바 11 앱에서 Debugger를 사용하려면 app.yaml 파일의 entrypoint 필드에 다음 플래그를 포함해야 합니다.

-agentpath:/opt/cdbg/cdbg_java_agent.so=--log_dir=/var/log

이미 app.yaml에서 entrypoint를 지정 한 경우 파일은 entrypoint 필드의 java 명령어에 agentpath 플래그를 추가합니다.

entrypoint 필드를 지정하지 않았거나 앱을 배포할 때 app.yaml 파일을 생성하면 App Engine이 앱을 시작하는 데 사용하는 명령어에 플래그를 추가합니다.

Cloud Profiler 사용

Cloud Profiler는 오버헤드가 낮은 통계 프로파일러로, 프로덕션 애플리케이션에서 CPU 사용량과 메모리 할당 정보를 지속적으로 수집합니다. 이는 앱의 소스 코드에 정보를 부여하여 앱에서 가장 많은 리소스를 소비하는 부분을 파악하고 코드의 성능 특성을 이해하는 데 도움이 됩니다.

Cloud Profiler를 사용하려면 프로그램 시작에 설명된 대로 앱의 구성 파일을 설정하고 앱을 다시 배포합니다.