많은 앱은 웹 요청의 컨텍스트 외부에서 백그라운드 처리를 해야 합니다. 이 가이드에서는 사용자가 번역할 텍스트를 입력하고 이전 번역 목록을 표시하는 웹 앱을 만듭니다. 사용자 요청이 차단되지 않도록 번역이 백그라운드 프로세스로 수행됩니다.
다음 다이어그램은 번역 요청 프로세스를 보여줍니다.
다음은 가이드 앱 작동 방법을 보여주는 이벤트 시퀀스입니다.
- 웹 페이지를 방문하여 Firestore에 저장된 이전 번역 목록을 확인합니다.
- HTML 양식을 입력하여 텍스트 번역을 요청합니다.
- 번역 요청이 Pub/Sub에 게시됩니다.
- 해당 Pub/Sub 주제에 구독된 Cloud Run 서비스가 트리거됩니다.
- Cloud Run 서비스는 Cloud Translation을 사용하여 텍스트를 번역합니다.
- Cloud Run 서비스는 결과를 Firestore에 저장합니다.
이 가이드는 Google Cloud를 사용한 백그라운드 처리에 관심이 있는 모든 사용자를 대상으로 합니다. Pub/Sub, Firestore, App Engine, Cloud Functions와 관련된 사전 경험은 필요하지 않습니다. 하지만 모든 코드를 이해하기 위해서는 .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.
-
Enable the Firestore, Cloud Run, Pub/Sub, and Cloud Translation APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Enable the Firestore, Cloud Run, Pub/Sub, and Cloud Translation APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
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 Console에서 Cloud Run 페이지로 이동합니다.
서비스 이름
translate-ui
를 클릭합니다.로그를 클릭합니다.
삭제
이 가이드에서 사용된 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 리소스가 포함된 프로젝트를 삭제하거나 프로젝트를 유지하고 개별 리소스를 삭제하세요.
Google Cloud 프로젝트 삭제
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Cloud Run 서비스 삭제
이 가이드에서 만든 Cloud Run 서비스를 삭제합니다.
gcloud beta run services delete --region=$region translate-ui
gcloud beta run services delete --region=$region translate-worker