많은 앱은 웹 요청의 컨텍스트 외부에서 백그라운드 처리를 해야 합니다. 이 튜토리얼에서는 사용자가 번역할 텍스트를 입력하고 이전 번역 목록을 표시하는 웹 앱을 만듭니다. 사용자 요청이 차단되지 않도록 번역이 백그라운드 프로세스로 수행됩니다.
다음 다이어그램은 번역 요청 프로세스를 보여줍니다.
다음은 튜토리얼 앱 작동 방법을 보여주는 이벤트 시퀀스입니다.
- 웹 페이지를 방문하여 Firestore에 저장된 이전 번역 목록을 확인합니다.
- HTML 양식을 입력하여 텍스트 번역을 요청합니다.
- 번역 요청이 Pub/Sub에 게시됩니다.
- 해당 Pub/Sub 주제에 구독된 Cloud Run 서비스가 트리거됩니다.
- Cloud Run 서비스는 Cloud Translation을 사용하여 텍스트를 번역합니다.
- Cloud Run 서비스는 결과를 Firestore에 저장합니다.
이 튜토리얼은 Google Cloud를 사용한 백그라운드 처리에 관심이 있는 모든 사용자를 대상으로 합니다. Pub/Sub, Firestore, App Engine, Cloud Run 함수와 관련된 사전 경험은 필요하지 않습니다. 하지만 모든 코드를 이해하기 위해서는 .NET, 자바스크립트, HTML 관련 경험이 도움이 됩니다.
목표
- Cloud Run 서비스 이해 및 배포
- 앱을 사용해봅니다.
비용
이 문서에서는 비용이 청구될 수 있는 Google Cloud구성요소를 사용합니다.
프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요.
이 문서에 설명된 태스크를 완료했으면 만든 리소스를 삭제하여 청구가 계속되는 것을 방지할 수 있습니다. 자세한 내용은 삭제를 참조하세요.
시작하기 전에
- Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Firestore, Cloud Run, Pub/Sub, and Cloud Translation APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Google Cloud CLI를 설치합니다.
-
외부 ID 공급업체(IdP)를 사용하는 경우 먼저 제휴 ID로 gcloud CLI에 로그인해야 합니다.
-
gcloud CLI를 초기화하려면, 다음 명령어를 실행합니다.
gcloud init -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Firestore, Cloud Run, Pub/Sub, and Cloud Translation APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Google Cloud CLI를 설치합니다.
-
외부 ID 공급업체(IdP)를 사용하는 경우 먼저 제휴 ID로 gcloud CLI에 로그인해야 합니다.
-
gcloud CLI를 초기화하려면, 다음 명령어를 실행합니다.
gcloud init -
gcloud구성요소를 업데이트합니다.gcloud components update
- 개발 환경을 준비합니다.
앱 준비
터미널 창에서 샘플 앱 저장소를 로컬 머신에 클론합니다.
git clone https://github.com/GoogleCloudPlatform/getting-started-dotnet.git
또는 zip 파일로 샘플을 다운로드하고 압축을 풀 수 있습니다.
백그라운드 작업 샘플 코드가 포함된 디렉터리로 변경합니다.
cd getting-started-dotnet/BackgroundProcessing
TranslateWorker 서비스 이해
이 서비스는 Firestore 및 Translation과 같은 여러 종속 항목을 가져오는 것으로 시작됩니다.
핸들러 호출 간에 재사용될 수 있도록 Firestore 및 Translation 클라이언트가 초기화됩니다. 이렇게 하면 호출할 때마다 새 클라이언트를 초기화할 필요가 없으므로, 실행 시간이 빨라집니다.
Translation API는 문자열을 선택된 언어로 번역합니다.
컨트롤러의 생성자는 Firestore 및 Pub/Sub 클라이언트를 받습니다.
Post메서드는 Pub/Sub 메시지를 파싱하여 번역할 텍스트를 가져옵니다. 메시지 ID를 번역 요청의 고유한 이름으로 사용하여 중복 번역을 저장하지 않도록 합니다.
TranslateWorker 서비스 배포
BackgroundProcessing디렉터리에서 PowerShell 스크립트를 실행하여 서비스를 빌드하고 Cloud Run에 배포합니다.PublishTo-CloudRun.ps1
PublishTo-CloudRun.ps1 스크립트 이해
PublishTo-CloudRun.ps1 스크립트는 서비스를 Cloud Run에 게시하고 TranslateWorker 서비스가 악용되지 않도록 보호합니다. 서비스가 새로 추가되는 모든 연결을 허용한 경우 누구나 번역 요청을 컨트롤러에 게시하여 비용을 발생시킬 수 있습니다. 따라서 Pub/Sub의 POST 요청만 수락하도록 서비스를 설정합니다.
스크립트는 다음을 수행합니다.
dotnet publish를 사용하여 로컬에서 앱을 빌드합니다.- Cloud Build를 사용하여 앱을 실행하는 컨테이너를 빌드합니다.
- Cloud Run에 앱을 배포합니다.
- 프로젝트가 Pub/Sub 인증 토큰을 만들 수 있도록 합니다.
- Pub/Sub 구독 ID를 나타내는 서비스 계정을 만듭니다.
- 서비스 계정에
TranslateWorker서비스를 호출할 수 있는 권한을 부여합니다. Pub/Sub 주제 및 구독을 생성합니다.
TranslateUI 서비스 이해
TranslateUI 서비스는 최근 번역을 표시하고 새 번역에 대한 요청을 승인하는 웹페이지를 렌더링합니다.
StartUp클래스는 ASP.NET 앱을 구성하고 Pub/Sub 및 Firestore 클라이언트를 생성합니다.색인 핸들러
Index는 Firestore에서 기존의 모든 번역을 가져오고ViewModel을 목록으로 채웁니다.새 번역은 HTML 양식을 제출하여 요청됩니다. 번역 요청 핸들러는 요청을 검증하고 메시지를 Pub/Sub에 게시합니다.
TranslateUI 서비스 배포
BackgroundProcessing디렉터리에서 PowerShell 스크립트를 실행하여 서비스를 빌드하고 Cloud Run에 배포합니다../PublishTo-CloudRun.ps1
PublishTo-CloudRun.ps1 스크립트 이해
PublishTo-CloudRun.ps1 스크립트는 Cloud Run에 앱을 게시합니다.
스크립트는 다음을 수행합니다.
dotnet publish를 사용하여 로컬에서 앱을 빌드합니다.- Cloud Build를 사용하여 앱을 실행하는 컨테이너를 빌드합니다.
Cloud Run에 앱을 배포합니다.
앱 테스트
PublishTo-CloudRun.ps1 스크립트를 성공적으로 실행한 후 번역을 요청합니다.
PublishTo-CloudRun.ps1스크립트의 마지막 명령어는 UI 서비스의 URL을 알려줍니다. 터미널 창에서TranslateUI서비스의 URL을 찾으세요.gcloud beta run services describe translate-ui --region $region --format="get(status.address.hostname)"
브라우저에서 이전 단계에서 확인한 URL로 이동합니다.
빈 번역 목록과 새 번역 요청 양식이 포함된 페이지가 있습니다.
번역할 텍스트 필드에 번역할 텍스트를 입력합니다(예:
Hello, World.).제출을 클릭합니다.
페이지를 새로고침하려면 새로고침 refresh을 클릭합니다. 번역 목록에 새 행이 있습니다. 번역이 표시되지 않으면 몇 초 후 다시 시도합니다. 그래도 번역이 표시되지 않으면 앱 디버깅에 대한 다음 섹션을 참조하세요.
앱 디버깅
Cloud Run 서비스에 연결할 수 없거나 새로운 번역이 표시되지 않으면 다음 사항을 확인하세요.
PublishTo-CloudRun.ps1스크립트가 성공적으로 완료되었고 오류가 출력되지 않았는지 확인합니다. 오류가 있으면(예:message=Build failed) 오류를 수정하고 다시 실행해 봅니다.로그에서 오류를 검사합니다.
Google Cloud 콘솔에서 Cloud Run 페이지로 이동합니다.
서비스 이름
translate-ui를 클릭합니다.로그를 클릭합니다.
삭제
이 튜토리얼에서 사용된 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 리소스가 포함된 프로젝트를 삭제하거나 프로젝트를 유지하고 개별 리소스를 삭제하세요.
Google Cloud 프로젝트 삭제
- Google Cloud 콘솔에서 리소스 관리 페이지로 이동합니다.
- 프로젝트 목록에서 삭제할 프로젝트를 선택하고 삭제를 클릭합니다.
- 대화상자에서 프로젝트 ID를 입력한 후 종료를 클릭하여 프로젝트를 삭제합니다.
Cloud Run 서비스 삭제
이 가이드에서 만든 Cloud Run 서비스를 삭제합니다.
gcloud beta run services delete --region=$region translate-ui
gcloud beta run services delete --region=$region translate-worker