Go 1.11은 지원이 종료되었으며 2026년 1월 31일에
지원 중단됩니다. 지원 중단 후에는 조직에서 이전에 조직 정책을 사용하여 레거시 런타임의 배포를 다시 사용 설정한 경우에도 Go 1.11 애플리케이션을 배포할 수 없습니다. 기존 Go 1.11 애플리케이션은
지원 중단 날짜 이후에도 계속 실행되고 트래픽을 수신합니다.
지원되는 최신 Go 버전으로 마이그레이션하는 것이 좋습니다.
Go 태스크 큐 예시
컬렉션을 사용해 정리하기
내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.
이 예시에서는 HTML 양식을 표시하는 앱을 만듭니다. 대화상자에 문자열을 입력하고 Add
를 클릭합니다. 앱에서는 이 방식으로 문자열이 입력되는 횟수를 계산합니다.
앱은 다음을 수행합니다.
Add
를 클릭하면 양식에서 HTTP POST
요청을 사용하여 App Engine에서 실행 중인 앱에 문자열을 보냅니다. 이때 앱은 문자열을 번들로 묶어 태스크에 추가한 다음 기본 큐로 보냅니다.
- 큐에서 URL
/worker
에 매핑된 포함 태스크 핸들러로 이 태스크를 전달하여 문자열을 비동기적으로 Datastore에 씁니다.
- HTTP
GET
요청을 보내면 입력한 문자열 목록과 각 문자열을 직접 입력하거나 드롭다운 상자에서 클릭하여 Add
한 횟수가 표시됩니다.
이 앱을 App Engine에 배포하려면 다음 안내를 따르세요.
다음을 queue.yaml
파일에 복사합니다. 이렇게 하면 태스크가 처리되는 속도가 기본값인 초당 5회에서 초당 3회로 변경됩니다.
queue:
- name: default
rate: 3/s
같은 디렉터리에서 다음 내용을 원하는 대로 이름을 지정한 파일(.go
로 끝나는 이름)에 복사합니다. 태스크 핸들러를 포함한 애플리케이션 코드입니다.
같은 디렉터리에서 다음을 app.yaml
파일에 복사합니다. 이렇게 하면 App Engine용 애플리케이션이 구성됩니다.
Google Cloud Platform 프로젝트에 App Engine 앱이 준비되었으며 초기화하고 프로젝트에 gcloud
명령어를 구성했는지 확인합니다.
gcloud app deploy
명령어를 사용하여 App Engine에 앱을 배포합니다.
gcloud app browse
명령어를 사용하여 실행 중인 앱을 확인합니다.
달리 명시되지 않는 한 이 페이지의 콘텐츠에는 Creative Commons Attribution 4.0 라이선스에 따라 라이선스가 부여되며, 코드 샘플에는 Apache 2.0 라이선스에 따라 라이선스가 부여됩니다. 자세한 내용은 Google Developers 사이트 정책을 참조하세요. 자바는 Oracle 및/또는 Oracle 계열사의 등록 상표입니다.
최종 업데이트: 2025-09-04(UTC)
[[["이해하기 쉬움","easyToUnderstand","thumb-up"],["문제가 해결됨","solvedMyProblem","thumb-up"],["기타","otherUp","thumb-up"]],[["이해하기 어려움","hardToUnderstand","thumb-down"],["잘못된 정보 또는 샘플 코드","incorrectInformationOrSampleCode","thumb-down"],["필요한 정보/샘플이 없음","missingTheInformationSamplesINeed","thumb-down"],["번역 문제","translationIssue","thumb-down"],["기타","otherDown","thumb-down"]],["최종 업데이트: 2025-09-04(UTC)"],[[["\u003cp\u003eThis application counts and displays the number of times a string is entered via an HTML form.\u003c/p\u003e\n"],["\u003cp\u003eWhen a string is added, it's sent to App Engine via an HTTP POST request, bundled into a task, and added to the default queue.\u003c/p\u003e\n"],["\u003cp\u003eThe task queue forwards the task to a worker handler, which then writes the string to a datastore asynchronously.\u003c/p\u003e\n"],["\u003cp\u003eAn HTTP GET request retrieves and displays a list of the entered strings and their corresponding counts.\u003c/p\u003e\n"],["\u003cp\u003eThe application can be deployed to App Engine using specific configuration files and the \u003ccode\u003egcloud\u003c/code\u003e command-line tool.\u003c/p\u003e\n"]]],[],null,["# A Go Task Queue Example\n\nThis example creates an app that displays an HTML form. You enter\na string into the dialog box and click `Add`. The app counts the number of times\nthat you enter any string in this way.\n\nThe app does these things:\n\n- When you click `Add`, the form uses an HTTP `POST`request to send the string to the app which is running on App Engine. There the app bundles the string into a task and sends it to the default queue.\n- The queue forwards the task to an included task handler, mapped to the URL `/worker`, which asynchronously writes the string to a datastore.\n- Sending an HTTP `GET` request displays a list of the strings you have entered and the number of times you have`Add`ed each string, either by typing it or by clicking on it in the dropdown box.\n\nTo deploy this app to App Engine:\n\n1. Copy the following into a file named `queue.yaml`. This changes the rate at\n which tasks will be processed from the default 5 per second to 3 per second.\n\n queue:\n - name: default\n rate: 3/s\n\n2. In the same directory, copy the following into a file named as you like (ending in `.go`). This is the application code, including the task handler.\n\n\n package counter\n\n import (\n \t\"html/template\"\n \t\"net/http\"\n\n \t\"google.golang.org/appengine\"\n \t\"google.golang.org/appengine/datastore\"\n \t\"google.golang.org/appengine/log\"\n \t\"google.golang.org/appengine/taskqueue\"\n )\n\n func init() {\n \thttp.HandleFunc(\"/\", handler)\n \thttp.HandleFunc(\"/worker\", worker)\n }\n\n type Counter struct {\n \tName string\n \tCount int\n }\n\n func handler(w http.ResponseWriter, r *http.Request) {\n \tctx := appengine.NewContext(r)\n \tif name := r.FormValue(\"name\"); name != \"\" {\n \t\tt := taskqueue.NewPOSTTask(\"/worker\", map[string][]string{\"name\": {name}})\n \t\tif _, err := taskqueue.Add(ctx, t, \"\"); err != nil {\n \t\t\thttp.Error(w, err.Error(), http.StatusInternalServerError)\n \t\t\treturn\n \t\t}\n \t}\n \tq := datastore.NewQuery(\"Counter\")\n \tvar counters []Counter\n \tif _, err := q.GetAll(ctx, &counters); err != nil {\n \t\thttp.Error(w, err.Error(), http.StatusInternalServerError)\n \t\treturn\n \t}\n \tif err := handlerTemplate.Execute(w, counters); err != nil {\n \t\thttp.Error(w, err.Error(), http.StatusInternalServerError)\n \t\treturn\n \t}\n \t// OK\n }\n\n func worker(w http.ResponseWriter, r *http.Request) {\n \tctx := appengine.NewContext(r)\n \tname := r.FormValue(\"name\")\n \tkey := datastore.NewKey(ctx, \"Counter\", name, 0, nil)\n \tvar counter Counter\n \tif err := datastore.https://cloud.google.com/appengine/docs/legacy/standard/go111/reference/latest/datastore.html#google_golang_org_appengine_datastore_Get(ctx, key, &counter); err == datastore.https://cloud.google.com/appengine/docs/legacy/standard/go111/reference/latest/datastore.html#google_golang_org_appengine_datastore_ErrInvalidEntityType_ErrInvalidKey_ErrNoSuchEntity {\n \t\tcounter.Name = name\n \t} else if err != nil {\n \t\tlog.https://cloud.google.com/appengine/docs/legacy/standard/go111/reference/latest/log.html#google_golang_org_appengine_log_Errorf(ctx, \"%v\", err)\n \t\treturn\n \t}\n \tcounter.Count++\n \tif _, err := datastore.Put(ctx, key, &counter); err != nil {\n \t\tlog.https://cloud.google.com/appengine/docs/legacy/standard/go111/reference/latest/log.html#google_golang_org_appengine_log_Errorf(ctx, \"%v\", err)\n \t}\n }\n\n var handlerTemplate = template.Must(template.New(\"handler\").Parse(handlerHTML))\n\n const handlerHTML = `\n {{range .}}\n \u003cp\u003e{{.Name}}: {{.Count}}\u003c/p\u003e\n {{end}}\n \u003cp\u003eStart a new counter:\u003c/p\u003e\n \u003cform action=\"/\" method=\"POST\"\u003e\n \u003cinput type=\"text\" name=\"name\"\u003e\n \u003cinput type=\"submit\" value=\"Add\"\u003e\n \u003c/form\u003e\n `\n\n3. In the same directory, copy the following into a file named `app.yaml`. This configures your\n application for App Engine:\n\n runtime: go\n api_version: go1\n\n handlers:\n - url: /worker/.*\n script: _go_app\n login: admin\n - url: /.*\n script: _go_app\n\n4. Make sure you have a [Google Cloud Platform project with an App Engine app](/appengine/docs/legacy/standard/go111/console)\n prepared and that you have [initialized](/sdk/docs/initializing) and\n configured the `gcloud` command for that project.\n\n5. Use the `gcloud app deploy` command to deploy the app to App Engine.\n\n6. See the app in action by using the `gcloud app browse` command."]]