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

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

로컬에서 실행

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

예: npm start

애플리케이션 배포

gcloud app deploy 명령어를 사용하여 애플리케이션을 App Engine에 배포합니다. 이 명령어는 Container Builder 서비스를 사용하여 컨테이너 이미지를 자동으로 빌드한 다음 이 이미지를 App Engine 가변형 환경에 배포합니다. 컨테이너에는 런타임 이미지에 적용된 모든 로컬 수정 사항이 포함됩니다.

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

시작하기 전에

애플리케이션을 배포하기 전에 해야 할 일은 다음과 같습니다.

성공적인 배포 보장

업데이트된 상태 확인 기능을 사용 설정하면 애플리케이션이 정상 상태가 되지 않을 경우 배포가 롤백됩니다.

첫 번째 애플리케이션을 가변형 환경에 배포하면 가상 머신(VM) 및 기타 인프라가 설정될 때까지 지연이 발생할 수 있습니다. 초기 설정 후에는 상태 확인 기능이 인스턴스가 정상이고 트래픽을 수신할 준비가 되었는지 확인하기 시작합니다. 애플리케이션이 지정한 시간 내에 준비 상태가 되지 않으면 배포가 실패하고 롤백됩니다.

애플리케이션을 준비하는 데 더 많은 시간이 필요할 수도 있습니다. 예를 들어, 큰 파일을 다운로드하거나 캐시를 미리 로드하여 애플리케이션을 초기화해야 할 수 있습니다. 업데이트된 상태 확인 기능을 사용할 경우, app.yaml 파일에서 app_start_timeout 구성 설정을 수정하여 시간을 늘릴 수 있습니다.

서비스 배포

애플리케이션의 서비스 버전 및 각 구성 파일을 배포하여 App Engine에 애플리케이션을 배포합니다.

애플리케이션의 서비스 버전을 배포하려면 서비스의 app.yaml 파일이 있는 디렉토리에서 다음 명령어를 실행합니다.

gcloud app deploy

명령어를 사용할 때 파일을 지정하지 않으면 현재 디렉토리의 app.yaml 파일만 배포됩니다. 기본적으로 deploy 명령어는 배포할 버전의 고유 ID를 생성하고, gcloud 도구에서 사용하도록 구성한 GCP 프로젝트에 버전을 배포하고, 모든 트래픽을 새 버전으로 라우팅합니다.

특정 파일을 대상으로 지정하거나 추가 매개변수를 포함하여 명령어의 기본 동작을 변경할 수 있습니다.

  • 서비스의 나머지 구성 파일을 배포하려면 각 파일을 별도로 대상으로 지정하고 배포해야 합니다. 예를 들면 다음과 같습니다.

    gcloud app deploy cron.yaml
    gcloud app deploy dispatch.yaml
    gcloud app deploy index.yaml
    
  • 커스텀 버전 ID를 지정하려면 --version 플래그를 사용합니다.

  • 트래픽이 새 버전으로 자동으로 라우팅되지 않게 하려면 --no-promote 플래그를 사용합니다.

  • 특정 GCP 프로젝트에 배포하려면 --project 플래그를 사용합니다.

예를 들어 app.yaml로 정의된 서비스를 특정 GCP 프로젝트에 배포하려면 커스텀 버전 ID를 할당하고 트래픽이 새 버전으로 라우팅되지 않도록 합니다.

gcloud app deploy --project PROJECT_ID --version VERSION_ID --no-promote

이 명령어에 대한 자세한 내용은 gcloud app deploy 참조를 확인하세요.

여러 서비스 배포

동일한 배포 명령어를 사용하여 애플리케이션을 구성하는 여러 서비스를 배포하거나 업데이트할 수 있습니다.

여러 서비스를 배포하려면 각 서비스의 app.yaml 파일을 별도로 배포해야 합니다. 예를 들면 다음과 같습니다.

gcloud app deploy service1/app.yaml
gcloud app deploy service2/app.yaml

하나의 배포 명령어를 사용하여 파일 여러 개를 지정할 수 있습니다.

gcloud app deploy service1/app.yaml service2/app.yaml

여러 서비스 배포를 위한 요구사항

  • 처음에 애플리케이션 버전을 default 서비스로 배포해야 이후에 서비스를 만들고 배포할 수 있습니다.

  • 각 서비스의 ID를 해당 app.yaml 구성 파일에 지정해야 합니다. 서비스 ID를 지정하려면 각 구성 파일에 service 요소 정의를 포함합니다. 기본적으로 구성 파일에서 이 요소 정의를 제외하면 해당 버전이 default 서비스에 배포됩니다.

파일 무시

.gcloudignore 파일을 사용하면 서비스를 배포할 때 GCP에 업로드하지 않을 파일 및 디렉토리를 지정할 수 있습니다. 이렇게 하면 배포를 통해 업로드할 필요가 없는 빌드 아티팩트 및 기타 파일을 무시하는 경우에 유용합니다.

gcloud 참조에서 .gcloudignore 파일의 구문에 대해 자세히 알아보세요.

배포용 컨테이너의 수동 빌드

Google Cloud Platform 외부에서 컨테이너 이미지를 빌드하는 경우, gcloud app deploy 명령어를 사용하여 이미지를 App Engine에 배포하려면 먼저 이미지를 컨테이너 이미지 저장소로 업로드해야 합니다.

예를 들어, 컨테이너 이미지를 Docker를 사용하여 로컬로 빌드하려면 이미지를 Google Container Registry로 푸시한 후 다음과 같이 이미지의 URL을 명령어의 --image-url 플래그에 지정합니다.

gcloud app deploy --image-url gcr.io/YOUR_PROJECT_ID/YOUR_CONTAINER_IMAGE

자동화된 지속적 배포 파이프라인 사용

Container Builder를 사용하여 지속적 배포 파이프라인에서 배포를 자동화할 수 있습니다. 자세한 내용은 Container Builder 문서에서 아티팩트 배포빌드 트리거를 사용하여 빌드 자동화를 참조하세요.

Node.js용 Docker 기본 이미지

Node.js 커스텀 런타임 애플리케이션을 처음부터 빌드하려면 Dockerfile에 제공된 기본 이미지를 사용합니다.

런타임 Docker 명령어
Node.js FROM gcr.io/google-appengine/nodejs

애플리케이션 보기

애플리케이션을 App Engine에 배포한 후에는 다음 명령어를 실행하여 브라우저를 실행하고 http://YOUR_PROJECT_ID.appspot.com에서 애플리케이션을 확인할 수 있습니다.

gcloud app browse

App Engine에서 테스트

새 버전에서 트래픽을 수신하도록 구성하기 전에 App Engine에서 해당 버전을 테스트할 수 있습니다. 예를 들어 default 서비스의 새 버전을 테스트하는 방법은 다음과 같습니다.

  1. 새 버전을 배포하고 --no-promote 플래그를 포함합니다.

    gcloud app deploy --no-promote
  2. 다음 URL로 이동하여 새 버전에 액세스합니다.

    http://VERSION_ID.default.YOUR_PROJECT_ID.appspot.com
    

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

    http://YOUR_PROJECT_ID.appspot.com으로 전송되는 요청은 여전히 이전에 트래픽을 수신하도록 구성된 버전으로 라우팅됩니다.

  3. 트래픽을 새 버전으로 전송하려면 GCP 콘솔을 사용하여 트래픽을 이전합니다.

    버전 관리

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

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

http://VERSION_ID.SERVICE_ID.YOUR_PROJECT_ID.appspot.com

특정 서비스 및 버전을 대상으로 지정하는 방법에 대한 자세한 내용은 요청 라우팅 방법을 참조하세요.

문제해결

다음은 앱을 배포할 때 발생할 수 있는 일반적인 오류 메시지입니다.

PERMISSION_DENIED: Operation not allowed
The "appengine.applications.create" permission is required.
GCP 프로젝트에 필요한 App Engine 애플리케이션이 포함되어 있지 않은 경우 gcloud app create 명령어를 실행하려고 시도하면 gcloud app deploy 명령어가 실패할 수 있습니다. 소유자 역할이 할당된 계정에만 App Engine 애플리케이션을 생성하는 데 필요한 권한이 있습니다.
이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

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

Node.js 문서용 App Engine 가변형 환경