1. 개요
이 Codelab 시리즈 (사용자 주도형, 실무 가이드)는 개발자가 애플리케이션을 배포할 때 사용할 수 있는 다양한 옵션을 이해할 수 있도록 돕기 위한 것입니다. 간단한 웹 애플리케이션에서 Google Cloud Translation API를 사용하는 방법을 알아봅니다. 이 앱은 로컬에서 실행하거나 Cloud 서버리스 컴퓨팅 플랫폼 (App Engine, Cloud Functions 또는 Cloud Run)에 배포할 수 있습니다.
이 JavaScript 튜토리얼은 Express.js 웹 프레임워크를 사용하는 Node.js로 진행합니다. 또한 Google의 서버리스 플랫폼에서 Google Cloud API에 액세스하는 방법도 알아봅니다. 이 앱의 모든 버전은 이 앱의 Python 버전과 독립적인 Codelab이 포함된 'nebulous serverless' 오픈소스 저장소에서 가져온 것입니다. 이 저장소에는 개발자가 서버리스 플랫폼에서 비클라우드 Google API에 액세스하는 방법을 보여주는 유사한 앱도 호스팅되어 있습니다.
이 Codelab에서는 위의 굵게 표시된 플랫폼에 이 앱을 배포하는 데 중점을 둡니다.
학습 목표
- Google Cloud API, 특히 Cloud Translation API (고급/v3) 사용
- 기본 웹 애플리케이션을 로컬로 실행하거나 클라우드 서버리스 컴퓨팅 플랫폼에 배포
필요한 항목
- 활성 Cloud Billing 계정이 있는 Google Cloud 프로젝트
- 로컬에서 실행하기 위해 설치된 웹 프레임워크 ( Python 튜토리얼을 진행하는 경우 Flask, JavaScript/Node.js 튜토리얼을 진행하는 경우 Express)
- Google Cloud 배포에 사용 설정된 서버리스 컴퓨팅 플랫폼이 하나 이상 있어야 합니다.
- 기본 프로그래밍 기술 (Python 또는 JavaScript/Node.js)
- 기본 운영체제 명령어에 대한 실무 지식
설문조사
본 가이드를 어떻게 사용하실 계획인가요?
Python 또는 Node.js로 개발한 경험을 평가해 주세요.
귀하의 Google Cloud 서비스 사용 경험을 평가해 주세요.
2. 설정 및 요건
자습형 환경 설정
- Google Cloud Console에 로그인하여 새 프로젝트를 만들거나 기존 프로젝트를 재사용합니다. 아직 Gmail이나 Google Workspace 계정이 없는 경우 계정을 만들어야 합니다.



- 프로젝트 이름은 이 프로젝트 참가자의 표시 이름입니다. 이는 Google API에서 사용하지 않는 문자열이며 언제든지 업데이트할 수 있습니다.
- 프로젝트 ID는 모든 Google Cloud 프로젝트에서 고유해야 하며, 변경할 수 없습니다(설정된 후에는 변경할 수 없음). Cloud Console은 고유한 문자열을 자동으로 생성합니다. 일반적으로 신경 쓰지 않아도 됩니다. 대부분의 Codelab에서는 프로젝트 ID를 참조해야 하며(일반적으로
PROJECT_ID로 식별됨), 마음에 들지 않는 경우 임의로 다시 생성하거나 직접 지정해서 사용할 수 있는지 확인하세요. 프로젝트가 생성되면 프로젝트 ID가 '고정'됩니다. - 세 번째 값은 일부 API에서 사용하는 프로젝트 번호입니다. 이 세 가지 값에 대한 자세한 내용은 문서를 참조하세요.
- 다음으로 Cloud 리소스/API를 사용하려면 Cloud Console에서 결제를 사용 설정해야 합니다. 이 Codelab 실행에는 많은 비용이 들지 않습니다. 이 튜토리얼을 마친 후 비용이 결제되지 않도록 리소스를 종료하려면 Codelab의 끝에 있는 '삭제' 안내를 따르세요. Google Cloud 새 사용자에게는 미화 $300 상당의 무료 체험판 프로그램에 참여할 수 있는 자격이 부여됩니다.
3. Translation API 사용 설정
이 섹션에서는 일반적인 Google API를 사용 설정하는 방법을 알아봅니다. 샘플 앱에서는 Cloud Translation API를 사용 설정합니다. 샘플 앱을 배포할 플랫폼에 따라 App Engine, Cloud Functions, Cloud Run(및 Cloud Artifact Registry)도 사용 설정합니다.
Google API 사용 설정
소개
애플리케이션에서 사용할 Google API와 관계없이 API가 사용 설정되어 있어야 합니다. API는 명령줄 또는 Cloud 콘솔에서 사용 설정할 수 있습니다. API 사용 설정 프로세스는 동일하므로 API 하나를 사용 설정하면 동일한 방식으로 다른 API를 사용 설정할 수 있습니다.
옵션 1: gcloud 명령줄 인터페이스 (Cloud Shell 또는 로컬 환경)
Cloud 콘솔에서 API를 사용 설정하는 것이 더 일반적이지만 일부 개발자는 명령줄에서 모든 작업을 수행하는 것을 선호합니다. 이렇게 하려면 API의 '서비스 이름'을 조회해야 합니다. URL(SERVICE_NAME.googleapis.com)과 유사합니다. 지원되는 제품 차트에서 확인할 수 있으며, Google 탐색 API를 사용하여 프로그래매틱 방식으로 쿼리할 수도 있습니다.
이 정보를 바탕으로 Cloud Shell (또는 gcloud 명령줄 도구가 설치된 로컬 개발 환경)을 사용하여 다음과 같이 API를 사용 설정할 수 있습니다.
gcloud services enable SERVICE_NAME.googleapis.com
예 1: Cloud Vision API 사용 설정
gcloud services enable vision.googleapis.com
예 2: Google App Engine 사용 설정
gcloud services enable appengine.googleapis.com
예 3: 하나의 요청으로 여러 API를 사용 설정합니다. 예를 들어 이 Codelab에서 뷰어가 Cloud Translation API를 사용하여 App Engine, Cloud Functions, Cloud Run에 앱을 배포하는 경우 명령줄은 다음과 같습니다.
gcloud services enable appengine.googleapis.com cloudfunctions.googleapis.com artifactregistry.googleapis.com run.googleapis.com translate.googleapis.com
이 명령어를 사용하면 App Engine, Cloud Functions, Cloud Run, Cloud Translation API가 사용 설정됩니다. 또한 Cloud Run에 배포하기 위해 Cloud Build 시스템에서 컨테이너 이미지를 등록해야 하는 위치가 Cloud Artifact Registry이므로 Cloud Artifact Registry를 사용 설정합니다.
옵션 2: Cloud Console
API 관리자에서 Google API를 사용 설정할 수도 있습니다. Cloud Console에서 API 관리자로 이동하고 라이브러리를 선택합니다.

검색창에 API 이름을 입력하기 시작하면 일치하는 결과가 표시됩니다.

사용 설정하려는 API를 선택하고 사용 설정 버튼을 클릭합니다.

사용하려는 Google API와 관계없이 모든 API를 사용 설정하는 프로세스는 유사합니다.
비용
많은 Google API가 비용 없이 사용될 수 있지만 대부분의 Google Cloud 제품 및 API를 사용할 때는 비용이 발생합니다. Cloud API를 사용 설정하면 활성 결제 계정을 묻는 메시지가 표시될 수 있습니다. 하지만 일부 Google Cloud 제품에는 '항상 무료' 등급이 포함되며, 이를 초과할 경우에만 결제 요금이 발생할 수 있습니다.
GCP 신규 사용자는 현재 90일 동안 사용할 수 있는 무료 체험판($300(USD))을 이용할 수 있습니다. Codelab은 일반적으로 청구되지 않으므로 무료 체험은 실제로 사용해 볼 준비가 될 때까지 보류하는 것이 좋습니다. 특히 일회성 혜택이므로 더욱 그렇습니다. 무료 등급 할당량은 만료되지 않으며 무료 체험판 사용 여부와 관계없이 적용됩니다.
사용자는 사용 설정하기 전에 API의 가격 책정 정보를 참조해야 합니다 (예: Cloud Vision API 가격 책정 페이지). 특히 무료 등급이 있는지, 있다면 무엇인지 확인해야 합니다. 지정된 일별 또는 월별 한도 내로 유지되는 한 비용이 발생하지 않습니다. 가격 및 무료 등급은 Google 제품 그룹 API에 따라 다릅니다. 예:
- Google Cloud/GCP - 각 제품의 요금 청구 방식이 다르며 일반적으로 사용량에 따라 요금이 청구됩니다. 위의 무료 등급 정보를 참고하세요.
- Google 지도: 다양한 API를 제공하며 사용자에게 전반적으로 월$200 미화 무료 크레딧을 제공합니다.
- Google Workspace (이전 명칭: G Suite) API: Workspace 월간 구독 요금에 사용량 (특정 한도까지)이 포함되어 있으므로 Gmail, Google Drive, Calendar, Docs, Sheets, Slides와 같은 애플리케이션의 API 사용 비용이 직접 청구되지 않습니다.
각 Google 제품마다 결제 방식이 다르므로, 해당 정보를 적절한 문서에서 확인해야 합니다.
원하는 서비스가 사용 설정되어 있는지 확인하기
위의 안내에 따라 API 관리자에서 Cloud Translation API를 사용 설정합니다. 명령줄에서 서버리스 플랫폼을 사용 설정하지 않은 경우 Cloud 콘솔의 각 대시보드(App Engine, Cloud Functions, Cloud Run)에서 사용 설정할 수 있습니다.
Cloud 콘솔에서 API를 사용 설정하면 시각적으로 유용하지만 gcloud 도구를 사용하면 모든 서비스를 몇 초 만에 사용 설정할 수 있어 더 빠릅니다.
$ gcloud services enable appengine.googleapis.com \ cloudfunctions.googleapis.com artifactregistry.googleapis.com \ run.googleapis.com translate.googleapis.com Operation "operations/acf.p2-xxxxxx035451-704918f2-5470-4436-9bdd-c3b204yyyyyy" finished successfully.
비용 자세히 알아보기
위의 비용 섹션은 모든 Google API에 적용되는 일반적인 내용입니다. 이 튜토리얼에서 더 구체적인 내용을 다루겠습니다. 전체 '상시 무료' 등급 요약 페이지에는 월별 할당량이 나와 있지 않지만 Translation API 가격 책정 페이지에는 모든 사용자에게 매월 고정된 양의 번역된 문자가 제공된다고 명시되어 있습니다. 이 기준액 미만으로 유지하면 API에서 요금이 청구되지 않습니다. Google Cloud 서버리스 플랫폼 사용 시 발생하는 비용에 대한 자세한 내용은 저장소의 비용 섹션을 참고하세요. 마지막의 '삭제' 섹션에서는 이 Codelab을 완료한 후 비용이 청구되지 않도록 하는 방법을 설명합니다.
4. 샘플 앱 코드 가져오기
ZIP 다운로드 또는 저장소 클론
- ZIP 파일을 다운로드하거나
git clone https://github.com/googlecodelabs/cloud-nebulous-serverless.git로 저장소를 클론합니다. - 로컬 개발 환경이 없고 Cloud Shell에서 이 튜토리얼을 진행하려면 동일한
git clone명령어를 사용하여 저장소를 클론하면 됩니다. - 다음 스크린샷과 같이 녹색 코드 버튼에서 ZIP 파일에 액세스할 수도 있습니다.

이제 모든 것이 준비되었으므로 파일을 삭제하거나 변경해야 할 수 있으므로 이 특정 튜토리얼을 진행하기 위해 폴더의 전체 사본을 만듭니다. 다른 배포를 수행하려면 원본을 복사하여 다시 클론하거나 다운로드하지 않고 다시 시작할 수 있습니다.
5. Node.js 환경 확인
Node.js 환경을 설정하려면 다음 단계를 따르세요.
- 최신 버전의 Node (>=10) 및 NPM (>=6)이 설치되어 있는지 확인합니다.
- 저장소를 클론한 위치 (또는 ZIP 파일의 압축을 푼 위치)로 이동한 다음
cloud/nodejs폴더로 이동합니다. package.json가 있는지 확인한 다음npm install을 실행합니다.
위의 1번의 경우 명령줄에서 설치된 버전을 확인할 수 있습니다.
$ node -v v17.0.1 $ npm -v 8.1.0
6. 샘플 앱 둘러보기
샘플 앱은 사용자에게 영어로 텍스트를 입력하라는 메시지를 표시하고 해당 텍스트의 스페인어 번역을 수신하는 간단한 Google 번역 파생 앱입니다.
package.json 구성 파일은 애플리케이션에 필요한 서드 파티 패키지를 나타냅니다 (패키지 버전은 여기에 나열된 것 이상으로 업데이트될 수 있음).
{
"name": "cloud-nebulous-serverless-nodejs",
"version": "0.0.1",
"description": "Nebulous Serverless sample app",
"main": "index.js",
"scripts": {
"start": "node index.js",
"test": "mocha test/test_neb.js"
},
"author": "Google LLC",
"license": "Apache-2.0",
"dependencies": {
"@google-cloud/translate": "^6.3.1",
"express": "^4.17.1",
"nunjucks": "^3.2.3"
},
"devDependencies": {
"mocha": "^9.1.3",
"supertest": "^6.1.6"
}
}
이제 index.js 파일을 열어 작동 방식을 확인합니다. 라이선스에 관한 주석 처리된 줄을 생략하면 상단과 하단은 다음과 같습니다.
const express = require('express');
const nunjucks = require('nunjucks');
const {TranslationServiceClient} = require('@google-cloud/translate');
const app = express();
app.use(express.urlencoded({extended: true}));
nunjucks.configure('templates', {autoescape: true, express: app});
const TRANSLATE = new TranslationServiceClient();
const PORT = process.env.PORT || 8080;
const SOURCE = ['en', 'English'];
const TARGET = ['es', 'Spanish'];
let parent;
TRANSLATE.getProjectId().then(result => {
parent = `projects/${result}`;
});
if (!process.env.FUNCTION_TARGET) {
app.listen(PORT, () =>
console.log(`Listening on port ${PORT}`)
);
}
# . . . [translate() function definition] . . .
app.all('/', translate);
module.exports = {
app
};
require는 프레임워크 및 템플릿 기능과 Cloud Translation API 클라이언트 라이브러리를 가져옵니다.- 전역 변수는 웹 앱, Cloud 프로젝트 ID, Translation API 클라이언트, Translation API 호출의 상위 '위치 경로',
SOURCE및TARGET언어를 나타냅니다. 이 경우 영어 (en)와 스페인어 (es)가 사용되지만, Cloud Translation API에서 지원하는 다른 언어 코드로 값을 변경해도 됩니다. - 각 쌍 (
SOURCE및TARGET)의 첫 번째 요소는 언어 코드이고 두 번째 요소는 언어 이름입니다 (API와 관련이 없으므로 표시 목적으로만 사용됨). - 하단의 몇 줄은 모든 HTTP 요청을
translate()로 전송한 다음app애플리케이션 객체를 내보내기 위한 것입니다.
마지막으로 index.js의 중간에는 애플리케이션의 핵심인 translate() 함수가 있습니다.
async function translate(req, rsp) {
let text = null;
let translated = null;
if (req.method === 'POST') {
text = req.body.text.trim();
if (text) {
const data = {
contents: [text],
parent: parent,
targetLanguageCode: TARGET[0]
};
const [response] = await TRANSLATE.translateText(data);
translated = response.translations[0].translatedText;
}
}
const context = {
orig: {text: text, lc: SOURCE},
trans: {text: translated, lc: TARGET}
};
rsp.render('index.html', context);
}
기본 함수는 사용자 입력을 가져오고 Translation API를 호출하여 무거운 작업을 수행합니다. 자세히 살펴보겠습니다.
- 양식의 기본 변수를 재설정합니다. 이는 주로 GET 요청에 적용됩니다. POST 요청에는 이를 대체하는 데이터가 있기 때문입니다.
- POST인 경우 번역할 텍스트를 가져오고 비어 있지 않으면 API 메타데이터 요구사항을 나타내는 JSON 구조를 만듭니다. 그런 다음 서비스 API를 호출합니다.
- 특정 영어 소스에 대한 API에
SOURCE[0]를 전달하지 않았습니다. 소스 언어를 생략하면 API에 소스 언어를 자동 감지하도록 요청하는 것입니다 (문서의sourceLanguageCode참고). - 어쨌든 실제 결과 (POST) 또는 데이터 없음 (GET)을 템플릿 컨텍스트로 포맷하고 렌더링합니다.
애플리케이션의 시각적 부분은 템플릿 index.html 파일에 있습니다. 이전 번역 결과가 표시되고 (그렇지 않으면 공백) 번역할 내용을 묻는 양식이 표시됩니다.
<!doctype html>
<html><head><title>My Google Translate 1990s</title><body>
<style>
body {
font-family: Verdana, Helvetica, sans-serif;
background-color: #DDDDDD;
}
</style>
<h2>My Google Translate (1990s edition)</h2>
{% if trans['text'] %}
<h4>Previous translation</h4>
<li><b>Original</b>: {{ orig['text'] }} (<i>{{ orig['lc'][0] }}</i>)</li>
<li><b>Translated</b>: {{ trans['text'] }} (<i>{{ trans['lc'][0] }}</i>)</li>
{% endif %}
<h4>Enter <i>{{ orig['lc'][1] }}</i> text to translate to <i>{{ trans['lc'][1] }}</i>:</h4>
<form method="POST"><input name="text"><input type="submit"></form>
</body></html>
튜토리얼의 나머지 부분에서는 이 앱을 배포하고 실행하는 네 가지 옵션 중 일부 또는 전부를 선택할 수 있습니다. 모든 배포는 선택사항이므로 일부 또는 전부를 실행할 수 있습니다.
- 로컬에서 서비스 실행
- App Engine (표준 환경)에 배포
- Cloud Functions에 배포
- Cloud Run에 배포
7. 옵션 1: 로컬에서 서비스 실행
이 Codelab 섹션은 로컬에서 실행하는 경우에만 적용됩니다. 클라우드에만 배포하는 경우 다음 섹션으로 이동하세요.
샘플 앱을 로컬에서 실행하려면 다음 세 가지 단계를 따라야 합니다.
- 서비스 계정 만들기
- 서비스 계정 공개/비공개 키 쌍 만들기
- 사용자 인증 정보 파일을 다운로드하고 애플리케이션 코드와 번들로 묶습니다.
- 서비스 시작
서비스 계정 알아보기
서비스 계정은 사람이 아닌 사용자의 데이터에 액세스할 때 클라우드 기반 애플리케이션이 Google API에 액세스하는 보안 메커니즘입니다. 클라우드에 배포할 때 사용자의 클라우드 온보딩 준비 시간을 줄이기 위해 모든 Google Cloud 컴퓨팅 플랫폼 (서버리스 및 기타)은 기본 서비스 계정을 제공합니다.
기본 서비스 계정에는 '불필요한 절차를 피하기' 위한 광범위한 권한이 제공되지만 프로덕션 서비스를 출시할 준비를 할 때는 앱이 올바르게 작동하는 데 필요한 권한만 있는 사용자 관리 서비스 계정을 만들어 '최소 권한' 권장사항을 따르는 것이 좋습니다. 어쨌든 로컬 배포에는 기본 서비스 계정이 없으므로 서비스 계정과 서비스 계정 키 (실제로는 공개 키/비공개 키 쌍)를 만들고 이러한 사용자 인증 정보를 애플리케이션 코드에서 사용할 수 있도록 해야 합니다.
서비스 계정 키 쌍 생성 및 사용자 인증 정보 파일 다운로드
이 페이지의 안내에 따라 로컬에서 실행할 서비스 계정과 공개 키/비공개 키 쌍을 만듭니다. 서비스 계정 키를 만들 때 원하는 권한을 제공하라는 메시지가 표시됩니다. API에 성공적으로 액세스할 수 있도록 roles/cloudtranslate.user를 선택해야 합니다.
키 쌍이 생성되면 서비스 계정 키 파일을 다운로드하라는 메시지가 표시됩니다. 이름을 credentials.json로 지정하고 애플리케이션 최상위 폴더로 이동합니다. 이제 Cloud SDK가 해당 사용자 인증 정보를 사용하도록 알려야 합니다. GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 설정하여 해당 파일을 가리키도록 합니다. 서비스 계정 사용을 다루는 이 페이지에서도 이 프로세스에 대해 자세히 알아볼 수 있습니다.
서비스 시작
계속 진행할 준비가 되면 다음 명령어를 사용하여 로컬에서 Express 서버를 실행합니다.
$ npm start > cloud-nebulous-serverless-nodejs@0.0.1 start > node index.js Listening on port 8080
웹브라우저로 이동하여 localhost:8080에서 연결하면 다음과 같은 화면이 표시됩니다.

번역을 통해 작동 방식을 확인해 보세요.

만족스러우면 ^C (Ctrl+C)로 서버를 종료하고 나갑니다. 로컬 배포를 실행하신 것을 축하드립니다. 다행히 클라우드에 배포하는 것은 훨씬 쉽습니다.
문제 해결
번역을 요청할 때 다음과 같은 오류가 표시되나요?
node:fs:2486
handleErrorFromBinding(ctx);
^
Error: The file at credentials.json does not exist, or it is not a file. ENOENT: no such file or directory, lstat '/tmp/nodejs/credentials.json'
. . .
해결 방법: 이 오류는 서비스 계정 만들기와 공개/비공개 키 쌍 파일 credentials.json 다운로드를 완료하지 않았음을 의미합니다. '옵션 1: 서비스를 로컬로 실행'으로 돌아가서 이 프로세스를 완료하고 계속하기 전에 기본 폴더에 사용자 인증 정보를 설치하세요.
8. 옵션 2: App Engine (표준 환경)에 배포
이 Codelab 섹션은 Node App Engine에 배포하는 경우에만 적용됩니다. 관심이 없다면 다음 섹션으로 이동하세요.
이 배포는 App Engine에 사용할 런타임을 한 줄로 알려주는 app.yaml 구성 파일을 사용합니다.
runtime: nodejs16
app.yaml 파일은 Cloud Functions와 Cloud Run 모두에서 사용되지 않습니다. App Engine을 사용할 계획이 없다면 이 파일을 삭제해도 됩니다. App Engine에 배포할 준비가 되면 다음 명령어를 실행합니다.
$ gcloud app deploy
리전을 선택하면 gcloud app deploy 출력이 훨씬 간결해지며 다음과 같이 표시됩니다.
Services to deploy: descriptor: [/private/tmp/nodejs/app.yaml] source: [/private/tmp/nodejs] target project: [PROJECT_ID] target service: [default] target version: [2021...] target url: [https://PROJECT_ID.REG_ABBR.appspot.com] target service account: [App Engine default service account] Do you want to continue (Y/n)? Beginning deployment of service [default]... ╔════════════════════════════════════════════════════════════╗ ╠═ Uploading 2 files to Google Cloud Storage ═╣ ╚════════════════════════════════════════════════════════════╝ File upload done. Updating service [default]...⠏WARNING: *** Improve build performance by generating and committing package-lock.json. Updating service [default]...done. Setting traffic split for service [default]...done. Deployed service [default] to [https://PROJECT_ID.REG_ABBR.appspot.com] You can stream logs from the command line by running: $ gcloud app logs tail -s default To view your application in the web browser run: $ gcloud app browse To take a quick anonymous survey, run: $ gcloud survey
이제 앱을 전 세계에서 사용할 수 있으므로 프로젝트 ID가 포함된 URL에서 앱에 액세스할 수 있으며 로컬 Express 버전과 유사한 출력이 표시됩니다. 하지만 클라우드에서 실행되며 전 세계에서 사용할 수 있다는 점을 알아두세요.

요청을 제출하면 다른 모든 배포와 동일하게 작동합니다.
9. 옵션 3: Cloud Functions에 배포
이 Codelab 섹션은 Node Cloud Functions에 배포하는 경우에만 적용됩니다. 관심이 없다면 다음 섹션으로 이동하세요.
Cloud Functions에는 구성 파일이 없으므로 Cloud Functions에 배포할 준비가 되면 다음 명령어를 실행하세요.
$ gcloud functions deploy translate \ --runtime nodejs16 \ --entry-point app \ --trigger-http \ --region REGION \ --allow-unauthenticated
GCP 프로젝트에 기본 REGION가 있을 수 있지만 --region 플래그를 사용하여 특정 리전에 함수를 배포할 수 있습니다. Cloud Functions는 다른 Cloud 제품과 달리 메시지를 표시하지 않습니다. 어떤 리전을 선택하든 gcloud functions deploy 출력은 다음과 같이 표시됩니다.
Deploying function (may take a while - up to 2 minutes)...⠛ For Cloud Build Logs, visit: https://console.cloud.google.com/cloud-build/builds;region=REGION/15ac7fc1-731d-4f3b-bc15-8f2614xxxxxx?project=062269xxxxxx Deploying function (may take a while - up to 2 minutes)...done. availableMemoryMb: 256 buildId: aaf7e0cd-fbbd-4624-abeb-3e7437xxxxxx buildName: projects/062269xxxxxx/locations/REGION/builds/aaf7e0cd-fbbd-4624-abeb-3e7437xxxxxx entryPoint: app httpsTrigger: securityLevel: SECURE_OPTIONAL url: https://REGION-PROJECT_ID.cloudfunctions.net/translate ingressSettings: ALLOW_ALL labels: deployment-tool: cli-gcloud name: projects/PROJECT_ID/locations/REGION/functions/translate runtime: nodejs16 serviceAccountEmail: PROJECT_ID@appspot.gserviceaccount.com sourceUploadUrl: https://storage.googleapis.com/gcf-upload-REGION-01de94c2-6eb4-4c49-aaff-09276cdb7ae9/a1db9f2d-3511-414b-aeeb-de6042xxxxxx.zip status: ACTIVE timeout: 60s updateTime: '2021...' versionId: '...'
이제 전 세계에서 앱을 사용할 수 있으므로 배포 출력('httpsTrigger/url' 아래)에 표시된 프로젝트 ID가 포함된 URL에서 앱에 액세스할 수 있습니다. URL은 https://REGION-PROJECT_ID.cloudfunctions.net/translate와 같은 형식이며, 선택한 리전과 Cloud 프로젝트 ID에 따라 달라집니다.

10. 옵션 4: Cloud Run에 배포
이 Codelab 섹션은 Cloud Run에 배포하는 데만 적용됩니다. 관심이 없다면 다음 섹션으로 이동하세요.
Cloud Run에는 구성 파일이 없으므로 Cloud Run에 배포할 준비가 되면 아래 안내를 따르세요.
이제 다음 명령어를 실행하여 번역 서비스를 Cloud Run에 배포할 수 있습니다.
$ gcloud run deploy translate --source . --allow-unauthenticated --platform managed
출력은 다음과 같이 표시되며 다음 단계에 대한 몇 가지 프롬프트를 제공해야 합니다.
Please specify a region: [1] asia-east1 [2] asia-east2 . . . (other regions) . . . [28] us-west4 [29] cancel Please enter your numeric choice: REGION_CHOICE To make this the default region, run `gcloud config set run/region REGION`. Deploying from source requires an Artifact Registry repository to store build artifacts. A repository named [cloud-run-source-deploy] in region [REGION] will be created. Do you want to continue (Y/n)? This command is equivalent to running "gcloud builds submit --pack image=[IMAGE] ." and "gcloud run deploy translate --image [IMAGE]" Building . . . and deploying container to Cloud Run service [translate] in project [PROJECT_ID] region [REGION] ✓ Building and deploying... Done. ✓ Creating Container Repository... ✓ Uploading sources... ✓ Building Container... Logs are available at [https://console.cloud.google.com/cloud-build/builds/60e1b 9bb-b991-4b4e-8d8a-HASH?project=PROJECT_NUMBER]. ✓ Creating Revision... ✓ Routing traffic... ✓ Setting IAM Policy... Done. Service [translate] revision [translate-00001-xyz] has been deployed and is serving 100 percent of traffic. Service URL: https://SVC_NAME-HASH-REG_ABBR.a.run.app
앱을 로컬에서 실행하는 것과 마찬가지로 앱을 Cloud Run에 Cloud Buildpacks합니다. Node.js 사용자의 경우 npm install 및 npm start이 실행됩니다. Python의 경우 pip install -r requirements.txt를 실행하고 Procfile의 안내에 따라 앱을 시작합니다. (Cloud 빌드팩에서 지원하는 다른 모든 언어에도 동일하게 적용됩니다.) 빌드 프로세스가 완료되면 앱을 사용할 수 있습니다.
그러면 앱이 (지역별로 배포되지만) 전역적으로 제공되며 배포 출력에 표시된 프로젝트 ID가 포함된 URL에서 액세스할 수 있습니다('Service URL' 아래).

번역을 통해 작동 방식을 확인해 보세요.

11. 결론
축하합니다. Cloud Translation API를 사용 설정하고 사용하는 방법, 필요한 사용자 인증 정보를 가져오는 방법, 간단한 웹 앱을 로컬 Express, App Engine, Cloud Functions, Cloud Run에 배포하는 방법을 배웠습니다. 자세히 알아보거나 이 앱의 다른 버전과 다른 Codelab에 액세스하려면 저장소 폴더를 확인하세요.
삭제
Cloud Translation API를 사용하면 매월 고정된 양의 번역된 문자를 무료로 사용할 수 있습니다. App Engine에도 무료 할당량이 있으며 Cloud Functions 및 Cloud Run도 마찬가지입니다. 둘 중 하나라도 초과하면 요금이 청구됩니다. 다음 Codelab으로 계속 진행할 계획이라면 앱을 종료하지 않아도 됩니다.
하지만 다음 튜토리얼로 이동할 준비가 되지 않았거나 방금 배포한 앱이 인터넷에 공개될까 우려되는 경우 요금이 발생하지 않도록 App Engine 앱을 사용 중지하거나 Cloud Functions를 삭제하거나 Cloud Run 서비스를 사용 중지하세요. 다음 Codelab으로 이동할 준비가 되었으면 이를 다시 사용 설정하면 됩니다. 반면에 이 애플리케이션이나 다른 Codelab을 계속하지 않고 모든 것을 완전히 삭제하려면 프로젝트를 종료하면 됩니다.
또한 Google Cloud 서버리스 컴퓨팅 플랫폼에 배포하면 약간의 빌드 및 스토리지 비용이 발생합니다. Cloud Build에는 Cloud Storage와 마찬가지로 자체 무료 할당량이 있습니다. 투명성을 높이기 위해 Cloud Build는 애플리케이션 이미지를 빌드하며, 이 이미지는 Cloud Container Registry 또는 후속 제품인 Artifact Registry에 저장됩니다. 해당 이미지를 저장하면 할당량이 일부 사용되며, 이미지를 서비스로 전송할 때 네트워크 이그레스도 사용됩니다. 하지만 무료 등급이 없는 지역에 거주할 수도 있으므로 스토리지 사용량을 파악하여 잠재적인 비용을 최소화하세요.
12. 추가 리소스
다음 섹션에서는 이 튜토리얼을 완료하면서 얻은 지식을 보강할 수 있는 추가 읽기 자료와 권장 연습 문제를 확인할 수 있습니다.
추가 연구
이제 Translation API를 사용해 보았으니 추가 연습을 통해 기술을 더욱 발전시켜 보겠습니다. 학습 과정을 계속 진행하려면 샘플 앱을 수정하여 다음 작업을 실행하세요.
- 로컬에서 실행하거나 Google Cloud 서버리스 컴퓨팅 플랫폼에 배포하려면 이 Codelab의 다른 모든 버전을 완료하세요 (저장소 리드미 참고).
- 다른 프로그래밍 언어를 사용하여 이 튜토리얼을 완료하세요.
- 이 애플리케이션을 변경하여 다른 출발어 또는 도착어를 지원합니다.
- 텍스트를 두 개 이상의 언어로 번역할 수 있도록 이 애플리케이션을 업그레이드하고 지원되는 대상 언어의 풀다운이 있도록 템플릿 파일을 변경합니다.
자세히 알아보기
Google App Engine
Google Cloud Functions
Google Cloud Run
Google Cloud Buildpacks, Container Registry, Artifact Registry
- Cloud 빌드팩 발표
- Cloud 빌드팩 저장소
- Cloud Artifact Registry 홈페이지
- Cloud Artifact Registry 문서
- Cloud Container Registry 홈페이지
- Cloud Container Registry 문서
Google Cloud Translation 및 Google ML Kit
- Cloud Translation 홈페이지
- Cloud Translation 문서
- Cloud Translation API 클라이언트 라이브러리 (모든 개발 언어)
- Cloud Translation API 지원 언어 (구어/문어)
- Translation API 가격 책정 페이지
- 모든 Cloud AI/ML '구성 요소' API
- Google ML Kit (모바일용 Cloud AI/ML API 하위 집합)
- Google ML Kit Translation API
기타 Google Cloud 제품/페이지
Python 링크
- Python 3 App Engine 빠른 시작
- Python 2 App Engine (표준) 런타임
- Python 3 App Engine (표준) 런타임
- Python 2 및 3 App Engine (표준) 런타임의 차이점
- Python 2~3 App Engine (표준) 마이그레이션 가이드
- Python Cloud Functions 빠른 시작
- Python Cloud Run 빠른 시작
- Google Cloud Python 지원
- Flask
Node.js 링크
- Node.js App Engine 빠른 시작
- Node.js App Engine (표준) 런타임
- Node.js Cloud Functions 빠른 시작
- Node.js Cloud Run 빠른 시작
- Google Cloud Node.js 지원
- Express
라이선스
이 튜토리얼은 크리에이티브 커먼즈 저작자 표시 2.0 일반 라이선스에 따라 라이선스가 부여되며 저장소의 소스 코드는 Apache 2에 따라 라이선스가 부여됩니다.