App Engine 가변형 환경에서 Go 빠른 시작

리전 ID

REGION_ID는 앱을 만들 때 선택한 리전을 기준으로 Google이 할당하는 코드입니다. 기존 앱은 App Engine URL에 REGION_ID.r을 포함하는 것이 선택사항이고, 신규 앱은 모두 곧 필수가 될 예정입니다.

원활한 전환을 위해 리전 ID를 사용하도록 App Engine을 천천히 업데이트하고 있습니다. 아직 Google Cloud 프로젝트가 업데이트되지 않은 경우에는 앱의 리전 ID가 표시되지 않습니다. 기존 앱에서 ID는 선택사항이므로 기존 앱에서 리전 ID를 사용할 수 있게 되더라도 URL을 업데이트하거나 다른 변경을 수행할 필요가 없습니다.

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

이 빠른 시작에서는 짧은 메시지를 표시하는 간단한 App Engine 앱을 만드는 방법을 보여줍니다.

시작하기 전에

이 빠른 시작을 실행하고 배포하기 전에 다음과 같이 Cloud SDK를 설치한 후 App Engine용 Cloud 프로젝트를 설정합니다.

  1. Cloud SDK를 다운로드하여 설치합니다.

    SDK 다운로드

    참고: Cloud SDK가 이미 설치되어 있으면 다음 명령어를 실행하여 업데이트하세요.

    gcloud components update
    
  2. 새 프로젝트를 만듭니다.

    gcloud projects create [YOUR_PROJECT_ID] --set-as-default
    

    [YOUR_PROJECT_ID]를 프로젝트를 고유하게 식별하는 문자열로 바꿉니다. 예를 들면 my-project-24입니다.

    프로젝트가 만들어졌는지 확인합니다.

    gcloud projects describe [YOUR_PROJECT_ID]
    

    다음과 같은 프로젝트 세부정보가 표시됩니다.

    createTime: year-month-hour
    lifecycleState: ACTIVE
    name: project-name
    parent:
    id: '433637338589'
    type: organization
    projectId: project-name-id
    projectNumber: 499227785679
    
  3. 프로젝트로 App Engine 앱을 초기화하고 리전을 선택합니다.

    gcloud app create --project=[YOUR_PROJECT_ID]
    

    메시지가 표시되면 App Engine 애플리케이션을 배치할 리전을 선택합니다.

  4. 프로젝트에 결제가 사용 설정되어 있는지 확인합니다. 애플리케이션을 App Engine에 배포하려면 결제 계정을 프로젝트에 연결해야 합니다.

    결제 사용 설정

    가변형 환경 배포가 활성화된 상태에서는 비용이 발생합니다. 작업이 완료되면 프로젝트를 삭제하여 계속 비용이 발생하지 않도록 하세요.

  5. 다음 기본 요건을 설치합니다.

    • 다음 명령어를 실행하여 Go용 App Engine 확장 프로그램을 포함하는 gcloud 구성요소를 설치합니다.

      gcloud components install app-engine-go
      

App Engine 위치

App Engine은 리전을 기반으로 합니다. 즉, 앱을 실행하는 인프라가 특정 리전에 있으며 리전 내 모든 영역에서 중복 사용할 수 있도록 Google에서 관리합니다.

앱을 실행하는 리전을 선택하는 데 있어 중요한 기준은 지연 시간, 가용성 또는 내구성 요구사항입니다. 일반적으로 앱 사용자와 가장 가까운 리전을 선택하지만 앱에서 사용하는 다른 Google Cloud 제품 및 서비스의 위치도 고려해야 합니다. 여러 위치에서 서비스를 사용하면 앱의 지연 시간과 가격이 영향을 받을 수 있습니다.

다음 리전에서 App Engine을 사용할 수 있습니다.

  • northamerica-northeast1(몬트리올)
  • us-central(아이오와)
  • us-west2(로스앤젤레스)
  • us-west3(솔트레이크시티)
  • us-west4(라스베이거스)
  • us-east1(사우스캐롤라이나)
  • us-east4(북버지니아)
  • southamerica-east1(상파울루)
  • europe-west(벨기에)
  • europe-west2(런던)
  • europe-west3(프랑크푸르트)
  • europe-west6(취리히)
  • asia-northeast1(도쿄)
  • asia-northeast2(오사카)
  • asia-northeast3(서울)
  • asia-east2(홍콩)
  • asia-south1(뭄바이)
  • australia-southeast1(시드니)

앱의 리전을 설정한 후에는 변경할 수 없습니다.

이미 App Engine 애플리케이션을 만든 경우 다음 중 한 가지 방법으로 리전을 볼 수 있습니다.

이 빠른 시작에서는 개발자에게 Go 프로그래밍 언어에 대한 지식이 있고 Go가 설치되어 있다고 가정합니다.

Hello World 앱 다운로드

간단한 Go용 Hello World 앱을 만들어 Google Cloud에 앱을 배포해 보겠습니다.

  1. Hello World 샘플 앱 저장소를 로컬 머신에 클론합니다.

    go get -u -d -v github.com/GoogleCloudPlatform/golang-samples
    

  2. 샘플 코드가 있는 디렉토리로 변경합니다.

    cd $GOPATH/src/github.com/GoogleCloudPlatform/golang-samples/appengine_flexible/helloworld
    

로컬 머신에서 Hello World 실행

로컬 컴퓨터에서 Hello World 앱을 실행하려면 다음 단계를 따르세요.

  1. 로컬 웹 서버를 시작합니다.

    go run *.go
    
  2. 웹브라우저에 다음 주소를 입력합니다.

    http://localhost:8080

샘플 앱의 Hello World 메시지가 페이지에 표시됩니다. 터미널 창에서 Ctrl+C 키를 눌러 웹 서버를 종료합니다.

App Engine에서 Hello World 배포 및 실행

App Engine 가변형 환경에 앱을 배포하려면 다음 단계를 따르세요.

  1. helloworld 디렉터리에서 다음 명령어를 실행하여 Hello World 앱을 배포합니다.

    gcloud app deploy

    선택적 플래그에 대해 알아보세요.

    일반 gcloud 명령어 플래그

    • 앱 버전을 고유하게 식별하는 ID를 지정하려면 --version 플래그를 포함합니다. 그렇지 않으면 ID가 자동으로 생성됩니다(예: --version [YOUR_VERSION_ID]).
    • --project 플래그를 포함하여 gcloud 도구에서 기본값으로 초기화한 값으로 대체 Cloud 프로젝트 ID를 지정합니다. 예: --project [YOUR_PROJECT_ID]

    예를 들면 다음과 같습니다.

    gcloud app deploy --version pre-prod-5 --project my-sample-app

    명령줄에서 앱을 배포하는 방법에 대한 자세한 내용은 앱 테스트 및 배포를 참조하세요. 모든 명령어 플래그 목록은 gcloud app deploy 참조를 확인하세요.

  2. 브라우저를 실행하여 https://PROJECT_ID.REGION_ID.r.appspot.com에서 앱을 봅니다.

    gcloud app browse
    여기서 PROJECT_ID는 Google Cloud 프로젝트 ID를 나타냅니다.

이 경우, App Engine 인스턴스에서 실행 중인 웹 서버가 Hello World 메시지가 표시된 페이지를 제공합니다.

수고하셨습니다. App Engine 가변형 환경에 첫 Go 앱을 배포했습니다.

삭제 방법과 진행할 수 있는 다음 단계에 대해서는 다음 섹션을 참조하세요.

삭제

Cloud 프로젝트를 삭제하면 프로젝트 내에서 사용되는 모든 리소스에 대한 결제를 중지하여 비용 청구를 방지할 수 있습니다.

  1. Cloud Console에서 리소스 관리 페이지로 이동합니다.

    리소스 관리 페이지로 이동

  2. 프로젝트 목록에서 삭제할 프로젝트를 선택하고 삭제 를 클릭합니다.
  3. 대화상자에서 프로젝트 ID를 입력한 다음 종료를 클릭하여 프로젝트를 삭제합니다.

다음 단계

전체 플랫폼 알아보기

이제 App Engine 앱을 개발하고 배포하는 방법을 알아보았으므로 Google Cloud의 나머지 부분을 살펴볼 차례입니다. Cloud SQL, Cloud Storage, Cloud Firestore 등의 제품과 상호작용할 수 있는 도구를 제공하는 Cloud SDK가 이미 설치되어 있습니다.

App Engine뿐만 아니라 전체 플랫폼을 사용하는 앱을 만드는 방법을 안내하는 둘러보기 과정은 Bookshelf 앱 만들기 빠른 시작을 확인하세요.

App Engine 가변형 환경 알아보기

다음 항목을 통해 App Engine을 자세히 알아볼 수 있습니다.

Hello World 코드 검토

Hello World는 가장 간단한 App Engine 앱으로, 한 가지 서비스만을 포함하고 버전도 하나뿐이며 모든 코드가 앱의 루트 디렉터리에 있습니다. 이 섹션에서는 각 앱 파일을 자세히 설명합니다.

helloworld.go

helloworld.go 파일은 /에 대한 요청을 리슨하고 'Hello world!' 메시지로 요청에 응답하는 핸들러를 등록합니다.


package main

import (
	"fmt"
	"log"
	"net/http"
	"os"
)

func main() {
	http.HandleFunc("/", handle)
	http.HandleFunc("/_ah/health", healthCheckHandler)
	port := os.Getenv("PORT")
	if port == "" {
		port = "8080"
	}
	log.Printf("Listening on port %s", port)
	if err := http.ListenAndServe(":"+port, nil); err != nil {
		log.Fatal(err)
	}
}

func handle(w http.ResponseWriter, r *http.Request) {
	if r.URL.Path != "/" {
		http.NotFound(w, r)
		return
	}
	fmt.Fprint(w, "Hello world!")
}

func healthCheckHandler(w http.ResponseWriter, r *http.Request) {
	fmt.Fprint(w, "ok")
}

app.yaml

app.yaml 파일은 앱 배포 구성을 설명합니다.

# Copyright 2019 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

runtime: go
env: flex

# This sample incurs costs to run on the App Engine flexible environment.
# The settings below are to reduce costs during testing and are not appropriate
# for production use. For more information, see:
# https://cloud.google.com/appengine/docs/flexible/python/configuring-your-app-with-app-yaml
manual_scaling:
  instances: 1
resources:
  cpu: 1
  memory_gb: 0.5
  disk_size_gb: 10

여기서 app.yaml은 앱에서 사용되는 런타임을 지정하고 env: flex를 설정하여 앱이 가변형 환경을 사용하도록 지정합니다.

  • Go 런타임의 작동 방식에 대한 자세한 내용은 Go 런타임을 참조하세요.

  • 앱이 버전과 서비스를 활용할 수 있도록 설계하는 방법에 대한 자세한 내용은 App Engine 개요를 참조하세요.

  • App Engine 구성 설정에 대한 자세한 내용은 app.yaml로 앱 구성을 참조하세요.