정적 파일 제공

애플리케이션은 동적 요청 처리 외에도 자바스크립트, 이미지, CSS와 같은 정적 파일을 종종 제공해야 합니다. 가변형 환경의 앱은 정적 파일을 Cloud Storage와 같은 Google Cloud Platform 옵션을 통해 제공하거나, 직접 제공하거나, 타사 콘텐츠 전송 네트워크(CDN)를 사용하여 제공할 수 있습니다.

Cloud Storage에서 파일 제공

Cloud Storage는 동적 웹 앱의 정적 애셋을 호스팅할 수 있습니다. 앱에서 직접 제공하는 대신 Cloud Storage를 사용할 때의 이점은 다음과 같습니다.

  • Cloud Storage가 콘텐츠 전송 네트워크 역할을 하게 되는데, 그렇다고 특별한 구성이 필요한 것은 아닙니다. 공개적으로 읽을 수 있는 모든 객체가 글로벌 Cloud Storage 네트워크에 캐시되기 때문입니다.
  • 정적 애셋 제공에 따른 부하를 Cloud Storage로 분산함으로써 앱 부하를 줄일 수 있습니다. 포함된 정적 애셋 수 및 액세스 빈도에 따라 앱 실행 비용을 크게 줄일 수 있습니다.
  • Cloud Storage를 사용하면 콘텐츠 액세스를 위한 대역폭 비용을 낮출 수 있습니다.

Cloud SDK 또는 Cloud Storage API를 사용하여 Cloud Storage에 애셋을 업로드할 수 있습니다.

Google Cloud 클라이언트 라이브러리는 App Engine 앱에서 Cloud Storage로 데이터를 저장하고 검색하기 위한 Cloud Storage에 관용적 Go 클라이언트를 제공합니다.

Cloud Storage 버킷을 사용한 파일 제공의 예시

다음의 짧은 예시에서는 Cloud Storage 버킷을 만들고 Cloud SDK를 사용하여 정적 애셋을 업로드 하는 방법을 보여줍니다.

  1. 버킷을 만듭니다. 필수는 아니지만 일반적으로 프로젝트 ID에 따라 버킷 이름을 지정합니다. 버킷 이름은 전역에서 고유해야 합니다.

    gsutil mb gs://<your-bucket-name>
    
  2. 버킷에 있는 항목의 읽기 액세스 권한을 부여하도록 ACL을 설정합니다.

    gsutil defacl set public-read gs://<your-bucket-name>
    
  3. 버킷에 항목을 업로드합니다. 애셋을 업로드하고 업데이트할 때는 일반적으로 rsync 명령어가 가장 빠르고 쉬운 방법입니다. cp를 사용할 수도 있습니다.

    gsutil -m rsync -r ./static gs://<your-bucket-name>/static
    

이제 https://storage.googleapis.com/<your-bucket-name>/static/...을 통해 정적 애셋에 액세스할 수 있습니다.

커스텀 도메인 이름에서 제공하는 방법 등 Cloud Storage를 사용해서 정적 애셋을 제공하는 방법에 대한 자세한 내용은 정적 웹사이트를 호스팅하는 방법을 참조하세요.

다른 GCP 서비스를 사용한 파일 제공

Cloud CDN 또는 다른 GCP 스토리지 서비스를 사용할 수도 있습니다.

앱에서 직접 파일 제공

앱에서 파일을 제공하는 방법은 간단하지만 몇 가지 단점이 있습니다.

  • 정적 파일에 대한 요청에서 동적 요청에 사용되어야 할 리소스가 사용될 수 있습니다.
  • 구성에 따라서는 응답 지연이 발생할 수 있으며 이로 인한 부하 처리가 새 인스턴스 생성에도 영향을 미칠 수 있습니다.

팁: 프로덕션 환경에서는 일반적으로 앱과는 별도로 GCP 또는 외부적으로 타사 CDN을 사용하여 정적 콘텐츠를 제공하는 것이 가장 좋습니다.

앱을 사용한 정적 파일 제공 예

Go에서는 표준 http.FileServer 또는 http.ServeFile을 사용하여 앱에서 직접 파일을 제공할 수 있습니다.


// Package static demonstrates a static file handler for App Engine flexible environment.
package main

import (
	"fmt"
	"net/http"

	"google.golang.org/appengine"
)

func main() {
	// Serve static files from "static" directory.
	http.Handle("/static/", http.FileServer(http.Dir(".")))

	http.HandleFunc("/", homepageHandler)
	appengine.Main()
}

const homepage = `<!doctype html>
<html>
<head>
  <title>Static Files</title>
  <link rel="stylesheet" type="text/css" href="/static/main.css">
</head>
<body>
  <p>This is a static file serving example.</p>
</body>
</html>`

func homepageHandler(w http.ResponseWriter, r *http.Request) {
	fmt.Fprint(w, homepage)
}

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

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

Go용 Google App Engine Flexible Environment