App Engine에서 Go 앱 빌드

리전 ID

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

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

이 가이드를 활용하면 App Engine을 시작하고 Go 앱 개발, 배포, 관리에 익숙해질 수 있습니다.

비용

이 가이드의 실행에는 비용이 발생하지 않습니다. 이 샘플 앱을 실행하는 것만으로는 무료 할당량이 초과되지 않습니다.

개발 환경 설정

로컬 머신과 이미 친숙한 도구나 Cloud Shell을 사용할 수 있습니다. Cloud Shell에는 Google Cloud CLI가 이미 설치되어 있고 환경이 이미 설정되어 있으며 그 밖의 많은 기능이 있습니다.

로컬 머신

Go를 설치하고 gcloud CLI를 설정합니다.

Cloud Shell

필요한 모든 도구가 사전 설치되어 있는 Cloud Shell을 실행합니다.

Cloud Shell 열기

Google Cloud 프로젝트 만들기

프로젝트는 Google Cloud를 사용하는 데 필요하며 모든 Google Cloud 서비스를 사용하는 데 필요한 기반이 됩니다.

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Cloud Build API.

    Enable the API

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Make sure that billing is enabled for your Google Cloud project.

  9. Enable the Cloud Build API.

    Enable the API

  10. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

    gcloud init
  12. App Engine 앱과 관련 리소스를 만듭니다. 위치를 선택해야 합니다. 이후에 위치를 변경할 수 없습니다.
    gcloud app create

App Engine을 위한 기본 웹 서비스 작성

웹 서비스를 작성하고 런타임 설정을 선언하는 방법을 알아봅니다.

파일 구조화

서비스의 파일 구조는 다음과 같습니다.

  • go-app/: Go 1.11 서비스용 디렉터리
    • app.yaml: 서비스의 구성 설정
    • main.go: 애플리케이션 코드

app.yaml 파일 만들기

모든 App Engine 프로젝트에는 서비스의 런타임 환경 설정을 지정하는 app.yaml 구성 파일이 있습니다. 이 파일이 없으면 서비스가 배포되지 않습니다.

  1. Go 1.11 서비스용으로 go-app이라는 새 폴더를 만듭니다.

    mkdir go-app

  2. go-app/ 폴더에서 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: go121
    

    App Engine 앱의 가장 단순한 구성입니다. App Engine에 Go 1.11 런타임을 사용하고 있음을 나타냅니다. app.yaml 파일은 네트워크 설정, 확장 설정 등을 지정할 수도 있습니다. 자세한 내용은 app.yaml 참조를 확인하세요.

main.go 파일 만들기

이 샘플에서는 net/http 패키지를 사용하여 'Hello world'를 출력하는 HTTP 서버를 만듭니다.

main.go 파일을 설정하려면 다음 안내를 따르세요.

  1. go-app/ 폴더에서 main.go 파일을 만듭니다.

  2. package main 문을 추가하여 코드를 실행 가능한 프로그램으로 취급합니다.

    package main
    

    Go 1.11 런타임에서 서비스를 성공적으로 배포하려면 서비스의 app.yaml 파일과 동일한 디렉터리에 있는 Go 소스 파일 한 개 이상의 시작 부분에 package main 문을 정의해야 합니다.

  3. 다음 패키지를 가져옵니다.

    import (
    	"fmt"
    	"log"
    	"net/http"
    	"os"
    )
    
  4. HTTP 핸들러를 정의합니다.

    
    // indexHandler responds to requests with our greeting.
    func indexHandler(w http.ResponseWriter, r *http.Request) {
    	if r.URL.Path != "/" {
    		http.NotFound(w, r)
    		return
    	}
    	fmt.Fprint(w, "Hello, World!")
    }
    

    http.ResponseWriter 객체는 HTTP 서버 응답을 어셈블합니다. 이 객체에 데이터를 기록하여 브라우저로 전송합니다. http.Request 객체는 수신 HTTP 요청을 나타내는 데이터 구조입니다.

  5. HTTP 핸들러를 등록합니다.

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

    main 함수는 실행 가능한 프로그램의 진입점으로, 애플리케이션을 시작합니다. indexHandler 함수로 http 패키지에 웹 루트("/")에 대한 모든 요청을 처리하라고 지시하는 http.HandleFunc 함수 호출로 시작됩니다.

    PORT 환경 변수가 설정되지 않으면 포트 8080이 기본값으로 사용됩니다. App Engine에서 앱이 실행되고 있으면 PORT 환경 변수가 자동으로 설정되지만 로컬에서 앱을 테스트할 때 PORT를 원하는 값으로 설정할 수 있습니다.

App Engine에 웹 서비스 배포

  1. app.yaml 파일이 있는 go-app 디렉터리에서 다음 명령어를 사용하여 웹 서비스를 App Engine에 배포합니다.

    gcloud app deploy

  2. 브라우저를 시작하고 https://PROJECT_ID.REGION_ID.r.appspot.com에서 웹 서비스를 보려면 다음 명령어를 실행합니다.

    gcloud app browse

수고하셨습니다 서비스를 만들고 App Engine에 배포해 보았습니다.

서비스 및 버전

애플리케이션용으로 배포하는 첫 번째 서비스가 기본 서비스가 됩니다. app.yaml 파일에서 서비스 이름을 지정할 수 있지만 이름을 생략하면 default로 처리됩니다. 기본 서비스 이외의 여러 서비스를 배포할 수 있습니다.

gcloud app deploy 명령어를 실행하여 언제든지 서비스를 업데이트할 수 있습니다. 배포할 때마다 새로운 버전이 생성되고 트래픽이 최신 버전으로 자동 라우팅됩니다.

서비스 생성 및 버전 배포를 확인하려면 다음 안내를 따르세요.

  1. Google Cloud 콘솔에서 App Engine 서비스를 확인합니다.

    서비스 확인

    default라고 하는 서비스 하나가 나열되어야 합니다. 기본 서비스는 다음 URL에서 공개적으로 액세스할 수 있습니다.

    https://PROJECT_ID.REGION_ID.r.appspot.com

  2. 버전을 확인합니다.

    버전 확인

    배포에 해당되는 타임스탬프 처리된 버전이 하나 나열되어야 합니다.

특정 서비스와 버전으로 요청을 보내는 방법을 알아보려면 요청 라우팅 방법을 참조하세요.

다음 단계

수고하셨습니다 웹 애플리케이션을 설정하여 App Engine에 배포했습니다.

다음 페이지를 탐색하여 애플리케이션에 다른 기능을 추가하는 방법을 알아보세요.