1. 소개

이 Codelab에서는 AlloyDB 클러스터를 만들고, MCP 도구 상자를 배포하고, AlloyDB를 데이터 소스로 사용하도록 구성하는 방법을 알아봅니다. 그런 다음 배포된 도구 상자를 사용하여 요청을 그라운딩하는 샘플 대화형 RAG 애플리케이션을 빌드합니다.

MCP 도구 상자에 대한 자세한 내용은 문서 페이지에서 확인할 수 있으며, 샘플 Cymbal Air 애플리케이션은 여기에서 확인할 수 있습니다.
이 실습은 AlloyDB AI 기능을 위한 실습 모음의 일부입니다. 문서의 AlloyDB AI 페이지에서 자세히 알아보고 기타 실습을 확인하세요.
기본 요건
- Google Cloud 콘솔에 관한 기본적인 이해
- 명령줄 인터페이스 및 Google Cloud Shell의 기본 기술
학습할 내용
- Vertex AI 통합을 사용하여 AlloyDB 클러스터를 배포하는 방법
- AlloyDB에 연결하는 방법
- MCP Tooolbox 서비스 구성 및 배포 방법
- 배포된 서비스를 사용하여 샘플 애플리케이션을 배포하는 방법
필요한 항목
- Google Cloud 계정 및 Google Cloud 프로젝트
- 웹브라우저(예: Chrome)
2. 설정 및 요구사항
자습형 환경 설정
- Google Cloud Console에 로그인하여 새 프로젝트를 만들거나 기존 프로젝트를 재사용합니다. 아직 Gmail이나 Google Workspace 계정이 없는 경우 계정을 만들어야 합니다.



- 프로젝트 이름은 이 프로젝트 참가자의 표시 이름입니다. 이는 Google API에서 사용하지 않는 문자열이며 언제든지 업데이트할 수 있습니다.
- 프로젝트 ID는 모든 Google Cloud 프로젝트에서 고유하며, 변경할 수 없습니다(설정된 후에는 변경할 수 없음). Cloud 콘솔은 고유한 문자열을 자동으로 생성합니다. 일반적으로는 신경 쓰지 않아도 됩니다. 대부분의 Codelab에서는 프로젝트 ID (일반적으로
PROJECT_ID로 식별됨)를 참조해야 합니다. 생성된 ID가 마음에 들지 않으면 다른 임의 ID를 생성할 수 있습니다. 또는 직접 시도해 보고 사용 가능한지 확인할 수도 있습니다. 이 단계 이후에는 변경할 수 없으며 프로젝트 기간 동안 유지됩니다. - 참고로 세 번째 값은 일부 API에서 사용하는 프로젝트 번호입니다. 이 세 가지 값에 대한 자세한 내용은 문서를 참고하세요.
- 다음으로 Cloud 리소스/API를 사용하려면 Cloud 콘솔에서 결제를 사용 설정해야 합니다. 이 Codelab 실행에는 많은 비용이 들지 않습니다. 이 튜토리얼이 끝난 후에 요금이 청구되지 않도록 리소스를 종료하려면 만든 리소스 또는 프로젝트를 삭제하면 됩니다. Google Cloud 신규 사용자는 300달러(USD) 상당의 무료 체험판 프로그램에 참여할 수 있습니다.
Cloud Shell 시작
Google Cloud를 노트북에서 원격으로 실행할 수 있지만, 이 Codelab에서는 Cloud에서 실행되는 명령줄 환경인 Google Cloud Shell을 사용합니다.
Google Cloud Console의 오른쪽 상단 툴바에 있는 Cloud Shell 아이콘을 클릭합니다.

환경을 프로비저닝하고 연결하는 데 몇 분 정도 소요됩니다. 완료되면 다음과 같이 표시됩니다.

가상 머신에는 필요한 개발 도구가 모두 들어있습니다. 영구적인 5GB 홈 디렉터리를 제공하고 Google Cloud에서 실행되므로 네트워크 성능과 인증이 크게 개선됩니다. 이 Codelab의 모든 작업은 브라우저 내에서 수행할 수 있습니다. 아무것도 설치할 필요가 없습니다.
3. 시작하기 전에
API 사용 설정
결과:
Cloud Shell 내에 프로젝트 ID가 설정되어 있는지 확인합니다.
일반적으로 프로젝트 ID는 그림과 같이 Cloud Shell의 명령 프롬프트에서 괄호 안에 표시됩니다.

gcloud config set project [YOUR-PROJECT-ID]
그런 다음 PROJECT_ID 환경 변수를 Google Cloud 프로젝트 ID로 설정합니다.
PROJECT_ID=$(gcloud config get-value project)
필요한 모든 서비스를 사용 설정합니다.
gcloud services enable alloydb.googleapis.com \
compute.googleapis.com \
cloudresourcemanager.googleapis.com \
servicenetworking.googleapis.com \
vpcaccess.googleapis.com \
aiplatform.googleapis.com \
cloudbuild.googleapis.com \
artifactregistry.googleapis.com \
run.googleapis.com \
iam.googleapis.com \
secretmanager.googleapis.com
예상 출력
student@cloudshell:~ (gleb-test-short-004)$ gcloud services enable alloydb.googleapis.com \
compute.googleapis.com \
cloudresourcemanager.googleapis.com \
servicenetworking.googleapis.com \
vpcaccess.googleapis.com \
aiplatform.googleapis.com \
cloudbuild.googleapis.com \
artifactregistry.googleapis.com \
run.googleapis.com \
iam.googleapis.com \
secretmanager.googleapis.com
Operation "operations/acf.p2-404051529011-664c71ad-cb2b-4ab4-86c1-1f3157d70ba1" finished successfully.
4. AlloyDB 클러스터 배포
AlloyDB 클러스터 및 기본 인스턴스를 만듭니다. 다음 절차에서는 Google Cloud SDK를 사용하여 AlloyDB 클러스터와 인스턴스를 만드는 방법을 설명합니다. 콘솔 방식을 선호하는 경우 여기에서 문서를 확인하세요.
AlloyDB 클러스터를 만들기 전에 향후 AlloyDB 인스턴스에서 사용할 수 있는 비공개 IP 범위가 VPC에 있어야 합니다. 이 계정이 없으면 계정을 만들어 내부 Google 서비스에서 사용하도록 할당해야 클러스터와 인스턴스를 만들 수 있습니다.
비공개 IP 범위 만들기
VPC에서 AlloyDB용 비공개 서비스 액세스 구성을 설정해야 합니다. 여기서는 프로젝트에 '기본' VPC 네트워크가 있고 이 네트워크가 모든 작업에 사용된다고 가정합니다.
비공개 IP 범위를 만듭니다.
gcloud compute addresses create psa-range \
--global \
--purpose=VPC_PEERING \
--prefix-length=24 \
--description="VPC private service access" \
--network=default
할당된 IP 범위를 사용하여 비공개 연결을 만듭니다.
gcloud services vpc-peerings connect \
--service=servicenetworking.googleapis.com \
--ranges=psa-range \
--network=default
예상되는 콘솔 출력:
student@cloudshell:~ (test-project-402417)$ gcloud compute addresses create psa-range \
--global \
--purpose=VPC_PEERING \
--prefix-length=24 \
--description="VPC private service access" \
--network=default
Created [https://www.googleapis.com/compute/v1/projects/test-project-402417/global/addresses/psa-range].
student@cloudshell:~ (test-project-402417)$ gcloud services vpc-peerings connect \
--service=servicenetworking.googleapis.com \
--ranges=psa-range \
--network=default
Operation "operations/pssn.p24-4470404856-595e209f-19b7-4669-8a71-cbd45de8ba66" finished successfully.
student@cloudshell:~ (test-project-402417)$
AlloyDB 클러스터 만들기
이 섹션에서는 us-central1 리전에 AlloyDB 클러스터를 만듭니다.
postgres 사용자의 비밀번호를 정의합니다. 비밀번호를 직접 정의하거나 무작위 함수를 사용하여 생성할 수 있습니다.
export PGPASSWORD=`openssl rand -hex 12`
예상되는 콘솔 출력:
student@cloudshell:~ (test-project-402417)$ export PGPASSWORD=`openssl rand -hex 12`
나중에 사용할 수 있도록 PostgreSQL 비밀번호를 기록해 둡니다.
echo $PGPASSWORD
나중에 postgres 사용자로 인스턴스에 연결하려면 이 비밀번호가 필요합니다. 나중에 사용할 수 있도록 적어 두거나 어딘가에 복사해 두는 것이 좋습니다.
예상되는 콘솔 출력:
student@cloudshell:~ (test-project-402417)$ echo $PGPASSWORD bbefbfde7601985b0dee5723
무료 체험판 클러스터 만들기
이전에 AlloyDB를 사용한 적이 없는 경우 무료 체험판 클러스터를 만들 수 있습니다.
리전과 AlloyDB 클러스터 이름을 정의합니다. us-central1 리전과 alloydb-aip-01을 클러스터 이름으로 사용합니다.
export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
명령어를 실행하여 클러스터를 만듭니다.
gcloud alloydb clusters create $ADBCLUSTER \
--password=$PGPASSWORD \
--network=default \
--region=$REGION \
--subscription-type=TRIAL
예상되는 콘솔 출력:
export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
gcloud alloydb clusters create $ADBCLUSTER \
--password=$PGPASSWORD \
--network=default \
--region=$REGION \
--subscription-type=TRIAL
Operation ID: operation-1697655441138-6080235852277-9e7f04f5-2012fce4
Creating cluster...done.
동일한 Cloud Shell 세션에서 클러스터의 AlloyDB 기본 인스턴스를 만듭니다. 연결이 해제되면 지역 및 클러스터 이름 환경 변수를 다시 정의해야 합니다.
gcloud alloydb instances create $ADBCLUSTER-pr \
--instance-type=PRIMARY \
--cpu-count=8 \
--region=$REGION \
--cluster=$ADBCLUSTER
예상되는 콘솔 출력:
student@cloudshell:~ (test-project-402417)$ gcloud alloydb instances create $ADBCLUSTER-pr \
--instance-type=PRIMARY \
--cpu-count=8 \
--region=$REGION \
--availability-type ZONAL \
--cluster=$ADBCLUSTER
Operation ID: operation-1697659203545-6080315c6e8ee-391805db-25852721
Creating instance...done.
AlloyDB Standard 클러스터 만들기
프로젝트의 첫 번째 AlloyDB 클러스터가 아닌 경우 표준 클러스터 생성을 진행합니다.
리전과 AlloyDB 클러스터 이름을 정의합니다. us-central1 리전과 alloydb-aip-01을 클러스터 이름으로 사용합니다.
export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
명령어를 실행하여 클러스터를 만듭니다.
gcloud alloydb clusters create $ADBCLUSTER \
--password=$PGPASSWORD \
--network=default \
--region=$REGION
예상되는 콘솔 출력:
export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
gcloud alloydb clusters create $ADBCLUSTER \
--password=$PGPASSWORD \
--network=default \
--region=$REGION
Operation ID: operation-1697655441138-6080235852277-9e7f04f5-2012fce4
Creating cluster...done.
동일한 Cloud Shell 세션에서 클러스터의 AlloyDB 기본 인스턴스를 만듭니다. 연결이 해제되면 지역 및 클러스터 이름 환경 변수를 다시 정의해야 합니다.
gcloud alloydb instances create $ADBCLUSTER-pr \
--instance-type=PRIMARY \
--cpu-count=2 \
--region=$REGION \
--cluster=$ADBCLUSTER
예상되는 콘솔 출력:
student@cloudshell:~ (test-project-402417)$ gcloud alloydb instances create $ADBCLUSTER-pr \
--instance-type=PRIMARY \
--cpu-count=2 \
--region=$REGION \
--availability-type ZONAL \
--cluster=$ADBCLUSTER
Operation ID: operation-1697659203545-6080315c6e8ee-391805db-25852721
Creating instance...done.
AlloyDB에 필요한 권한 부여
AlloyDB 서비스 에이전트에 Vertex AI 권한을 추가합니다.
맨 위에 있는 '+' 기호를 사용하여 다른 Cloud Shell 탭을 엽니다.

새 Cloud Shell 탭에서 다음을 실행합니다.
PROJECT_ID=$(gcloud config get-value project)
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:service-$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")@gcp-sa-alloydb.iam.gserviceaccount.com" \
--role="roles/aiplatform.user"
예상되는 콘솔 출력:
student@cloudshell:~ (test-project-001-402417)$ PROJECT_ID=$(gcloud config get-value project) Your active configuration is: [cloudshell-11039] student@cloudshell:~ (test-project-001-402417)$ gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:service-$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")@gcp-sa-alloydb.iam.gserviceaccount.com" \ --role="roles/aiplatform.user" Updated IAM policy for project [test-project-001-402417]. bindings: - members: - serviceAccount:service-4470404856@gcp-sa-alloydb.iam.gserviceaccount.com role: roles/aiplatform.user - members: ... etag: BwYIEbe_Z3U= version: 1
탭에서 실행 명령어 'exit' 중 하나를 사용하여 탭을 닫습니다.
exit
5. GCE 가상 머신 준비
Google Compute Engine (GCE) VM을 데이터베이스와 상호작용하고 샘플 애플리케이션의 여러 부분을 배포하는 플랫폼으로 사용할 것입니다. VM을 사용하면 설치된 구성요소의 유연성이 높아지고 데이터 준비 단계에서 비공개 AlloyDB IP에 직접 액세스할 수 있습니다.
서비스 계정 만들기
VM을 사용하여 MCP Toolbox를 서비스로 배포하고 샘플 애플리케이션을 배포하거나 호스팅할 것이므로 첫 번째 단계는 Google 서비스 계정 (GSA)을 만드는 것입니다. GSA는 GCE VM에서 사용되며 다른 서비스와 함께 작동하는 데 필요한 권한을 부여해야 합니다.
Cloud Shell에서 다음을 실행합니다.
PROJECT_ID=$(gcloud config get-value project)
gcloud iam service-accounts create compute-aip --project $PROJECT_ID
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/cloudbuild.builds.editor"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/artifactregistry.admin"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/storage.admin"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/run.admin"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/iam.serviceAccountUser"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/alloydb.viewer"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/alloydb.client"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/aiplatform.user"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/serviceusage.serviceUsageConsumer"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com \
--role roles/secretmanager.admin
GCE VM 배포
AlloyDB 클러스터와 동일한 리전 및 VPC에 GCE VM을 만듭니다.
Cloud Shell에서 다음을 실행합니다.
ZONE=us-central1-a
PROJECT_ID=$(gcloud config get-value project)
gcloud compute instances create instance-1 \
--zone=$ZONE \
--create-disk=auto-delete=yes,boot=yes,image=projects/debian-cloud/global/images/$(gcloud compute images list --filter="family=debian-12 AND family!=debian-12-arm64" --format="value(name)") \
--scopes=https://www.googleapis.com/auth/cloud-platform \
--service-account=compute-aip@$PROJECT_ID.iam.gserviceaccount.com
예상되는 콘솔 출력:
student@cloudshell:~ (test-project-402417)$ ZONE=us-central1-a
PROJECT_ID=$(gcloud config get-value project)
gcloud compute instances create instance-1 \
--zone=$ZONE \
--create-disk=auto-delete=yes,boot=yes,image=projects/debian-cloud/global/images/$(gcloud compute images list --filter="family=debian-12 AND family!=debian-12-arm64" --format="value(name)") \
--scopes=https://www.googleapis.com/auth/cloud-platform \
--service-account=compute-aip@$PROJECT_ID.iam.gserviceaccount.com
Your active configuration is: [cloudshell-10282]
Created [https://www.googleapis.com/compute/v1/projects/gleb-test-short-002-470613/zones/us-central1-a/instances/instance-1].
NAME: instance-1
ZONE: us-central1-a
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
INTERNAL_IP: 10.128.0.2
EXTERNAL_IP: 34.28.55.32
STATUS: RUNNING
Postgres 클라이언트 설치
배포된 VM에 PostgreSQL 클라이언트 소프트웨어 설치
VM에 연결합니다.
gcloud compute ssh instance-1 --zone=us-central1-a
예상되는 콘솔 출력:
student@cloudshell:~ (test-project-402417)$ gcloud compute ssh instance-1 --zone=us-central1-a Updating project ssh metadata...working..Updated [https://www.googleapis.com/compute/v1/projects/test-project-402417]. Updating project ssh metadata...done. Waiting for SSH key to propagate. Warning: Permanently added 'compute.5110295539541121102' (ECDSA) to the list of known hosts. Linux instance-1 5.10.0-26-cloud-amd64 #1 SMP Debian 5.10.197-1 (2023-09-29) x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. student@instance-1:~$
VM 내에 명령어를 실행할 소프트웨어를 설치합니다.
sudo apt-get update
sudo apt-get install --yes postgresql-client
예상되는 콘솔 출력:
student@instance-1:~$ sudo apt-get update sudo apt-get install --yes postgresql-client Get:1 file:/etc/apt/mirrors/debian.list Mirrorlist [30 B] Get:4 file:/etc/apt/mirrors/debian-security.list Mirrorlist [39 B] Hit:7 https://packages.cloud.google.com/apt google-compute-engine-bookworm-stable InRelease Get:8 https://packages.cloud.google.com/apt cloud-sdk-bookworm InRelease [1652 B] Get:2 https://deb.debian.org/debian bookworm InRelease [151 kB] Get:3 https://deb.debian.org/debian bookworm-updates InRelease [55.4 kB] ...redacted... update-alternatives: using /usr/share/postgresql/15/man/man1/psql.1.gz to provide /usr/share/man/man1/psql.1.gz (psql.1.gz) in auto mode Setting up postgresql-client (15+248) ... Processing triggers for man-db (2.11.2-2) ... Processing triggers for libc-bin (2.36-9+deb12u7) ...
AlloyDB 인스턴스에 연결
psql을 사용하여 VM에서 기본 인스턴스에 연결합니다.
VM에 대해 열린 SSH 세션으로 계속 진행합니다. 연결이 끊어졌다면 위와 동일한 명령어를 사용하여 다시 연결합니다.
앞서 언급한 $PGASSWORD 및 클러스터 이름을 사용하여 GCE VM에서 AlloyDB에 연결합니다.
export PGPASSWORD=<Noted password>
PROJECT_ID=$(gcloud config get-value project)
REGION=us-central1
ADBCLUSTER=alloydb-aip-01
INSTANCE_IP=$(gcloud alloydb instances describe $ADBCLUSTER-pr --cluster=$ADBCLUSTER --region=$REGION --format="value(ipAddress)")
psql "host=$INSTANCE_IP user=postgres sslmode=require"
예상되는 콘솔 출력:
student@instance-1:~$ PROJECT_ID=$(gcloud config get-value project)
REGION=us-central1
ADBCLUSTER=alloydb-aip-01
INSTANCE_IP=$(gcloud alloydb instances describe $ADBCLUSTER-pr --cluster=$ADBCLUSTER --region=$REGION --format="value(ipAddress)")
psql "host=$INSTANCE_IP user=postgres sslmode=require"
psql (15.13 (Debian 15.13-0+deb12u1), server 16.8)
WARNING: psql major version 15, server major version 16.
Some psql features might not work.
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
Type "help" for help.
postgres=>
SSH 연결을 유지한 상태로 psql 세션을 종료합니다.
exit
예상되는 콘솔 출력:
postgres=> exit student@instance-1:~$
6. 데이터베이스 초기화
데이터베이스에 데이터를 채우고 애플리케이션을 호스팅하는 플랫폼으로 클라이언트 VM을 사용할 것입니다. 첫 번째 단계는 데이터베이스를 만들어서 데이터로 채우는 것입니다.
데이터베이스 만들기
이름이 'assistantdemo'인 데이터베이스를 만듭니다.
GCE VM 세션에서 다음을 실행합니다.
psql "host=$INSTANCE_IP user=postgres" -c "CREATE DATABASE assistantdemo"
예상되는 콘솔 출력:
student@instance-1:~$ psql "host=$INSTANCE_IP user=postgres" -c "CREATE DATABASE assistantdemo" CREATE DATABASE student@instance-1:~$
Python 환경 준비
계속 진행하기 위해 GitHub 저장소에서 준비된 Python 스크립트를 사용합니다. 그러나 그 전에 필수 소프트웨어를 설치해야 합니다.
GCE VM에서 다음을 실행합니다.
sudo apt install -y python3.11-venv git
python3 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
예상되는 콘솔 출력:
student@instance-1:~$ sudo apt install -y python3.11-venv git
python3 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
git-man liberror-perl patch python3-distutils python3-lib2to3 python3-pip-whl python3-setuptools-whl
Suggested packages:
git-daemon-run | git-daemon-sysvinit git-doc git-email git-gui gitk gitweb git-cvs git-mediawiki git-svn ed diffutils-doc
The following NEW packages will be installed:
git git-man liberror-perl patch python3-distutils python3-lib2to3 python3-pip-whl python3-setuptools-whl python3.11-venv
0 upgraded, 9 newly installed, 0 to remove and 2 not upgraded.
Need to get 12.4 MB of archives.
After this operation, 52.2 MB of additional disk space will be used.
Get:1 file:/etc/apt/mirrors/debian.list Mirrorlist [30 B]
...redacted...
Installing collected packages: pip
Attempting uninstall: pip
Found existing installation: pip 23.0.1
Uninstalling pip-23.0.1:
Successfully uninstalled pip-23.0.1
Successfully installed pip-24.0
(.venv) student@instance-1:~$
Python 버전을 확인합니다.
GCE VM에서 다음을 실행합니다.
python -V
예상되는 콘솔 출력:
(.venv) student@instance-1:~$ python -V Python 3.11.2 (.venv) student@instance-1:~$
MCP 도구 상자를 로컬로 설치
데이터베이스용 MCP 도구 상자 (이 텍스트에서는 MCP 도구 상자 또는 도구 상자)는 다양한 데이터 소스와 함께 작동하는 오픈소스 MCP 서버입니다. 다양한 데이터 소스에 대한 추상화 수준을 제공하고 인증 및 연결 풀링과 같은 기능을 추가하여 도구를 더 빠르게 개발할 수 있습니다. 모든 기능은 공식 페이지에서 확인할 수 있습니다.
샘플 데이터 세트를 시작하고 나중에 검색 증강 생성 (RAG) 흐름 중에 애플리케이션에서 데이터 소스 요청을 처리하는 MCP 서버로 사용하기 위해 MCP 툴박스를 사용할 것입니다.
MCP 도구 상자를 로컬로 설치하여 assistantdemo 데이터베이스를 채워 보겠습니다.
GCE VM에서 다음을 실행합니다.
export VERSION=0.16.0
curl -O https://storage.googleapis.com/genai-toolbox/v$VERSION/linux/amd64/toolbox
chmod +x toolbox
예상되는 콘솔 출력:
(.venv) student@instance-1:~$ export VERSION=0.16.0
curl -O https://storage.googleapis.com/genai-toolbox/v$VERSION/linux/amd64/toolbox
chmod +x toolbox
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 133M 100 133M 0 0 158M 0 --:--:-- --:--:-- --:--:-- 158M
데이터 초기화 도구 실행
GCE VM에서 다음을 실행합니다.
데이터베이스 채우기를 위한 환경 변수를 내보냅니다.
export ALLOYDB_POSTGRES_PROJECT=$(gcloud config get-value project)
export ALLOYDB_POSTGRES_REGION="us-central1"
export ALLOYDB_POSTGRES_CLUSTER="alloydb-aip-01"
export ALLOYDB_POSTGRES_INSTANCE="alloydb-aip-01-pr"
export ALLOYDB_POSTGRES_DATABASE="assistantdemo"
export ALLOYDB_POSTGRES_USER="postgres"
export ALLOYDB_POSTGRES_PASSWORD=$PGPASSWORD
export ALLOYDB_POSTGRES_IP_TYPE="private"
데이터베이스 시작을 위한 툴박스를 시작합니다. 이 명령어를 실행하면 로컬에서 프로세스가 시작되므로 AlloyDB의 대상 데이터베이스에 원활하게 연결하여 샘플 데이터를 채울 수 있습니다.
./toolbox --prebuilt alloydb-postgres
예상 콘솔 출력 출력의 마지막 줄에 'Server ready to serve!'가 표시됩니다.
student@instance-1:~$ cexport ALLOYDB_POSTGRES_PROJECT=$PROJECT_ID export ALLOYDB_POSTGRES_REGION="us-central1" export ALLOYDB_POSTGRES_CLUSTER="alloydb-aip-01" export ALLOYDB_POSTGRES_INSTANCE="alloydb-aip-01-pr" export ALLOYDB_POSTGRES_DATABASE="assistantdemo" export ALLOYDB_POSTGRES_USER="postgres" export ALLOYDB_POSTGRES_PASSWORD=$PGPASSWORD export ALLOYDB_POSTGRES_IP_TYPE="private" student@instance-1:~$ ./toolbox --prebuilt alloydb-postgres 2025-09-02T18:30:58.957655886Z INFO "Using prebuilt tool configuration for alloydb-postgres" 2025-09-02T18:30:59.507306664Z INFO "Initialized 1 sources." 2025-09-02T18:30:59.50748379Z INFO "Initialized 0 authServices." 2025-09-02T18:30:59.507618807Z INFO "Initialized 2 tools." 2025-09-02T18:30:59.507726704Z INFO "Initialized 2 toolsets." 2025-09-02T18:30:59.508258894Z INFO "Server ready to serve!"
데이터 채우기가 완료될 때까지 Cloud Shell의 이 탭을 종료하거나 닫지 마세요.
데이터베이스 채우기
맨 위에 있는 '+' 기호를 사용하여 다른 Cloud Shell 탭을 엽니다.

instance-1 VM에 연결합니다.
gcloud compute ssh instance-1 --zone=us-central1-a
예상되는 콘솔 출력:
student@cloudshell:~ (test-project-402417)$ gcloud compute ssh instance-1 --zone=us-central1-a Linux instance-1 6.1.0-37-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.140-1 (2025-05-22) x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Tue Sep 2 21:44:07 2025 from 35.229.111.9 student@instance-1:~$
검색 서비스 및 샘플 애플리케이션용 코드와 함께 GitHub 저장소를 클론합니다.
GCE VM에서 다음을 실행합니다.
git clone https://github.com/GoogleCloudPlatform/cymbal-air-toolbox-demo.git
예상되는 콘솔 출력:
student@instance-1:~$ git clone https://github.com/GoogleCloudPlatform/cymbal-air-toolbox-demo.git Cloning into 'cymbal-air-toolbox-demo'... remote: Enumerating objects: 3481, done. remote: Counting objects: 100% (47/47), done. remote: Compressing objects: 100% (41/41), done. remote: Total 3481 (delta 16), reused 7 (delta 5), pack-reused 3434 (from 3) Receiving objects: 100% (3481/3481), 57.96 MiB | 6.04 MiB/s, done. Resolving deltas: 100% (2549/2549), done. student@instance-1:~
오류가 있는 경우 주의하세요.
Python 환경을 준비하고 요구사항 패키지를 설치합니다.
source .venv/bin/activate
cd cymbal-air-toolbox-demo
pip install -r requirements.txt
Python 경로를 저장소 루트 폴더로 설정하고 스크립트를 실행하여 데이터베이스에 샘플 데이터 세트를 채웁니다. 첫 번째 명령어는 환경에 Python 모듈 경로를 추가하고 두 번째 명령어는 데이터베이스에 데이터를 채웁니다.
export PYTHONPATH=$HOME/cymbal-air-toolbox-demo
python data/run_database_init.py
예상되는 콘솔 출력(수정됨) 마지막에 'database init done'이 표시됩니다.
student@instance-1:~$ source .venv/bin/activate (.venv) student@instance-1:~$ (.venv) student@instance-1:~$ cd cymbal-air-toolbox-demo/ (.venv) student@instance-1:~/cymbal-air-toolbox-demo$ pip install -r requirements.txt python run_database_init.py Collecting fastapi==0.115.0 (from -r requirements.txt (line 1)) Downloading fastapi-0.115.0-py3-none-any.whl.metadata (27 kB) Collecting google-auth==2.40.3 (from -r requirements.txt (line 2)) Downloading google_auth-2.40.3-py2.py3-none-any.whl.metadata (6.2 kB) Collecting google-cloud-aiplatform==1.97.0 (from google-cloud-aiplatform[evaluation]==1.97.0->-r requirements.txt (line 3)) Downloading google_cloud_aiplatform-1.97.0-py2.py3-none-any.whl.metadata (36 kB) Collecting itsdangerous==2.2.0 (from -r requirements.txt (line 4)) Downloading itsdangerous-2.2.0-py3-none-any.whl.metadata (1.9 kB) Collecting jinja2==3.1.5 (from -r requirements.txt (line 5)) Downloading jinja2-3.1.5-py3-none-any.whl.metadata (2.6 kB) Collecting langchain-community==0.3.25 (from -r requirements.txt (line 6)) Downloading langchain_community-0.3.25-py3-none-any.whl.metadata (2.9 kB) Collecting langchain==0.3.25 (from -r requirements.txt (line 7)) ... (.venv) student@instance-1:~/cymbal-air-toolbox-demo$ (.venv) student@instance-1:~/cymbal-air-toolbox-demo$ export PYTHONPATH=$HOME/cymbal-air-toolbox-demo python data/run_database_init.py Airports table initialized Amenities table initialized Flights table initialized Tickets table initialized Policies table initialized database init done. (.venv) student@instance-1:~/cymbal-air-toolbox-demo$
이제 이 탭을 닫아도 됩니다.
VM 세션에서 다음을 실행합니다.
exit
Cloud Shell 세션에서 ctrl+d를 누르거나 다음을 실행합니다.
exit
MCP 도구 상자가 실행 중인 첫 번째 탭에서 Ctrl+C를 눌러 도구 상자 실행 세션을 종료합니다.
데이터베이스에 애플리케이션의 샘플 데이터가 채워졌습니다.
데이터베이스에 연결하고 공항 테이블의 행 수를 확인하여 이를 확인할 수 있습니다. 이전에 사용한 psql 유틸리티 또는 AlloyDB Studio를 사용할 수 있습니다 . psql을 사용하여 확인할 수 있습니다.
instance-1 VM에 대한 SSH 세션에서 다음을 실행합니다.
export PGPASSWORD=<Noted AlloyDB password>
REGION=us-central1
ADBCLUSTER=alloydb-aip-01
INSTANCE_IP=$(gcloud alloydb instances describe $ADBCLUSTER-pr --cluster=$ADBCLUSTER --region=$REGION --format="value(ipAddress)")
psql "host=$INSTANCE_IP user=postgres dbname=assistantdemo" -c "SELECT COUNT(*) FROM airports"
예상되는 콘솔 출력:
student@instance-1:~$ REGION=us-central1 ADBCLUSTER=alloydb-aip-01 INSTANCE_IP=$(gcloud alloydb instances describe $ADBCLUSTER-pr --cluster=$ADBCLUSTER --region=$REGION --format="value(ipAddress)") psql "host=$INSTANCE_IP user=postgres dbname=assistantdemo" -c "SELECT COUNT(*) FROM airports" count ------- 7698 (1 row)
데이터베이스가 준비되었으므로 MCP 도구 상자 배포로 넘어갈 수 있습니다.
7. Cloud Run에 MCP Toolbox 배포
이제 MCP Toolbox를 Cloud Run에 배포할 수 있습니다. MCP 도구 상자를 배포하는 방법은 여러 가지가 있습니다. 명령줄에서 실행하는 것이 가장 간단한 방법이지만 확장 가능하고 안정적인 서비스로 만들려면 Cloud Run이 더 나은 솔루션입니다.
클라이언트 ID 준비
애플리케이션의 예약 기능을 사용하려면 Cloud 콘솔을 사용하여 OAuth 2.0 클라이언트 ID를 준비해야 합니다. 이 권한이 없으면 Google 사용자 인증 정보로 애플리케이션에 로그인하여 예약을 진행하고 데이터베이스에 예약을 기록할 수 없습니다.
Cloud 콘솔에서 API 및 서비스로 이동하여 'OAuth 동의 화면'을 클릭합니다. 페이지 링크는 다음과 같습니다. 시작하기를 클릭하는 Oauth 개요 페이지가 열립니다.

다음 페이지에서 애플리케이션 이름과 사용자 지원 이메일을 입력하고 '다음'을 클릭합니다.

다음 화면에서 애플리케이션에 대해 '내부'를 선택하고 '다음'을 다시 클릭합니다.

그런 다음 연락처 이메일을 제공하고 '다음'을 클릭합니다.

그런 다음 Google API 서비스 정책에 동의하고 만들기 버튼을 누릅니다.

OAuth 클라이언트를 만들 수 있는 페이지로 이동합니다.

화면의 드롭다운 메뉴에서 '웹 애플리케이션'을 선택하고 애플리케이션으로 'Cymbal Air'를 입력한 다음 URI 추가 버튼을 누릅니다.

URI는 애플리케이션의 신뢰할 수 있는 소스를 나타내며, 애플리케이션에 액세스하려는 위치에 따라 달라집니다. 승인된 URI는 'http://localhost:8081'로, 리디렉션 URI는 'http://localhost:8081/login/google'로 설정합니다. 브라우저에 연결 URI로 'http://localhost:8081'을 입력하면 이러한 값이 작동합니다. 예를 들어 컴퓨터에서 SSH 터널을 통해 연결하는 경우입니다. 방법은 나중에 보여드리겠습니다.

'만들기' 버튼을 누르면 클라이언트 사용자 인증 정보가 포함된 팝업 창이 표시됩니다. 사용자 인증 정보가 시스템에 기록됩니다. 애플리케이션을 시작할 때 사용할 클라이언트 ID를 항상 복사할 수 있습니다.

나중에 이 클라이언트 ID를 제공하는 위치를 확인할 수 있습니다.
서비스 계정 만들기
필요한 모든 권한이 있는 Cloud Run 서비스 전용 서비스 계정이 필요합니다. 서비스에 AlloyDB 및 Cloud Secret Manager에 대한 액세스 권한이 필요합니다. 서비스 계정의 이름은 toolbox-identity를 사용합니다.
맨 위에 있는 '+' 기호를 사용하여 다른 Cloud Shell 탭을 엽니다.

새 Cloud Shell 탭에서 다음을 실행합니다.
export PROJECT_ID=$(gcloud config get-value project)
gcloud iam service-accounts create toolbox-identity
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:toolbox-identity@$PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/alloydb.client"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:toolbox-identity@$PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/serviceusage.serviceUsageConsumer"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:toolbox-identity@$PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/secretmanager.secretAccessor"
오류가 있는 경우 주의하세요. 이 명령어는 Cloud Run 서비스의 서비스 계정을 만들고 비밀 관리자, 데이터베이스, Vertex AI와 함께 작동할 권한을 부여합니다.
ctrl+d를 누르거나 탭에서 'exit' 명령어를 실행하여 탭을 닫습니다.
exit
MCP 도구 상자 구성 준비
MCP Toolbox의 구성 파일을 준비합니다. 문서에서 모든 구성 옵션을 확인할 수 있지만 여기서는 샘플 tools.yaml 파일을 사용하고 클러스터 및 인스턴스 이름, AlloyDB 비밀번호, 프로젝트 ID와 같은 값을 실제 값으로 바꿉니다.
AlloyDB 비밀번호 내보내기:
export PGPASSWORD=<noted AlloyDB password>
이전 단계에서 준비한 클라이언트 ID를 내보냅니다.
export CLIENT_ID=<noted OAuth 2.0 client ID for our application>
구성 파일을 준비합니다.
PROJECT_ID=$(gcloud config get-value project)
ADBCLUSTER=alloydb-aip-01
sed -e "s/project: retrieval-app-testing/project: $(gcloud config get-value project)/g" \
-e "s/cluster: my-alloydb-cluster/cluster: $ADBCLUSTER/g" \
-e "s/instance: my-alloydb-instance/instance: $ADBCLUSTER-pr/g" \
-e "s/password: postgres/password: $PGPASSWORD\\n ipType: private/g" \
-e "s/^ *clientId: .*/ clientId: $CLIENT_ID/g" \
cymbal-air-toolbox-demo/tools.yaml >~/tools.yaml
타겟 데이터 소스를 정의하는 파일 섹션을 살펴보면 연결에 비공개 IP를 사용하는 줄도 추가된 것을 확인할 수 있습니다.
sources:
my-pg-instance:
kind: alloydb-postgres
project: gleb-test-short-003-471020
region: us-central1
cluster: alloydb-aip-01
instance: alloydb-aip-01-pr
database: assistantdemo
user: postgres
password: L23F...
ipType: private
authServices:
my_google_service:
kind: google
clientId: 96828*******-***********.apps.googleusercontent.com
tools.yaml 구성을 소스로 사용하여 보안 비밀을 만듭니다.
VM ssh 콘솔에서 다음을 실행합니다.
gcloud secrets create tools --data-file=tools.yaml
예상되는 콘솔 출력:
student@instance-1:~$ gcloud secrets create tools --data-file=tools.yaml Created version [1] of the secret [tools].
MCP Toolbox를 Cloud Run 서비스로 배포
이제 MCP Toolbox를 Cloud Run에 서비스로 배포할 준비가 모두 완료되었습니다. 로컬 테스트의 경우 './toolbox –tools-file=./tools.yaml'을 실행하면 되지만, 애플리케이션을 클라우드에서 실행하려면 Cloud Run에 배포하는 것이 훨씬 더 합리적입니다.
VM SSH 세션에서 다음을 실행합니다.
export IMAGE=us-central1-docker.pkg.dev/database-toolbox/toolbox/toolbox:latest
gcloud run deploy toolbox \
--image $IMAGE \
--service-account toolbox-identity \
--region us-central1 \
--set-secrets "/app/tools.yaml=tools:latest" \
--args="--tools-file=/app/tools.yaml","--address=0.0.0.0","--port=8080" \
--network default \
--subnet default \
--no-allow-unauthenticated
예상되는 콘솔 출력:
student@instance-1:~$ export IMAGE=us-central1-docker.pkg.dev/database-toolbox/toolbox/toolbox:latest
gcloud run deploy toolbox \
--image $IMAGE \
--service-account toolbox-identity \
--region us-central1 \
--set-secrets "/app/tools.yaml=tools:latest" \
--args="--tools-file=/app/tools.yaml","--address=0.0.0.0","--port=8080" \
--network default \
--subnet default \
--no-allow-unauthenticated
Deploying container to Cloud Run service [toolbox] in project [gleb-test-short-002-470613] region [us-central1]
✓ Deploying new service... Done.
✓ Creating Revision...
✓ Routing traffic...
Done.
Service [toolbox] revision [toolbox-00001-l9c] has been deployed and is serving 100 percent of traffic.
Service URL: https://toolbox-868691532292.us-central1.run.app
student@instance-1:~$
서비스 확인
이제 서비스가 작동 중이고 엔드포인트에 액세스할 수 있는지 확인할 수 있습니다. gcloud 유틸리티를 사용하여 검색 서비스 엔드포인트와 인증 토큰을 가져옵니다. 또는 클라우드 콘솔에서 서비스 URI를 확인할 수 있습니다.

값을 복사하고 curl 명령어에서 "$(gcloud run services list –filter="(toolbox)" –format="value(URL)" 부분을 대체할 수 있습니다 .
명령줄에서 URL을 동적으로 가져오는 방법은 다음과 같습니다.
curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" $(gcloud run services list --filter="(toolbox)" --format="value(URL)")
예상되는 콘솔 출력:
student@instance-1:~$ curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" $(gcloud run services list --filter="(toolbox)" --format="value(URL)") 🧰 Hello, World! 🧰student@instance-1:~$
'Hello World' 메시지가 표시되면 서비스가 작동되어 요청이 처리되고 있다는 의미입니다.
8. 샘플 애플리케이션 배포
이제 검색 서비스가 준비되고 실행되었으므로 샘플 애플리케이션을 배포할 수 있습니다. 이 애플리케이션은 항공편, 공항에 관한 정보를 제공하고 데이터베이스의 항공편 및 공항 데이터를 기반으로 항공편을 예약할 수도 있는 온라인 공항 어시스턴트를 나타냅니다.
애플리케이션은 로컬, 클라우드의 VM 또는 Cloud Run, Kubernetes와 같은 다른 서비스에 배포할 수 있습니다. 여기에서는 먼저 VM에 배포하는 방법을 보여드리겠습니다.
환경 준비하기
동일한 SSH 세션을 사용하여 VM 작업을 계속 진행합니다. 애플리케이션을 실행하려면 몇 가지 Python 모듈이 필요하며, 앞서 데이터베이스를 시작할 때 이미 추가했습니다. Python 가상 환경으로 전환하고 위치를 앱 디렉터리로 변경합니다.
VM SSH 세션에서 다음을 실행합니다.
source ~/.venv/bin/activate
cd cymbal-air-toolbox-demo
예상 출력(수정됨):
student@instance-1:~$ source ~/.venv/bin/activate cd cymbal-air-toolbox-demo (.venv) student@instance-1:~/cymbal-air-toolbox-demo$
어시스턴트 애플리케이션 실행
애플리케이션을 시작하기 전에 몇 가지 환경 변수를 설정해야 합니다. 항공편 및 공항 편의시설 쿼리와 같은 애플리케이션의 기본 기능을 사용하려면 애플리케이션을 검색 서비스로 안내하는 TOOLBOX_URL만 있으면 됩니다. gcloud 명령어를 사용하여 가져올 수 있습니다 .
VM SSH 세션에서 다음을 실행합니다.
export TOOLBOX_URL=$(gcloud run services list --filter="(toolbox)" --format="value(URL)")
예상 출력(수정됨):
student@instance-1:~/cymbal-air-toolbox-demo$ export BASE_URL=$(gcloud run services list --filter="(toolbox)" --format="value(URL)")
항공편 예약 및 변경과 같은 애플리케이션의 고급 기능을 사용하려면 Google 계정을 사용하여 애플리케이션에 로그인해야 하며, 이를 위해 '클라이언트 ID 준비' 챕터의 OAuth 클라이언트 ID를 사용하여 CLIENT_ID 환경 변수를 제공해야 합니다.
export CLIENT_ID=215....apps.googleusercontent.com
예상 출력(수정됨):
student@instance-1:~/cymbal-air-toolbox-demo$ export CLIENT_ID=215....apps.googleusercontent.com
이제 애플리케이션을 실행할 수 있습니다.
python run_app.py
예상 출력:
student@instance-1:~/cymbal-air-toolbox-demo/llm_demo$ python run_app.py INFO: Started server process [2900] INFO: Waiting for application startup. Loading application... INFO: Application startup complete. INFO: Uvicorn running on http://0.0.0.0:8081 (Press CTRL+C to quit)
애플리케이션에 연결
여러 가지 방법으로 VM에서 실행 중인 애플리케이션에 연결할 수 있습니다. 예를 들어 VPC의 방화벽 규칙을 사용하여 VM에서 포트 8081을 열거나 공개 IP로 부하 분산기를 만들 수 있습니다. 여기서는 SSH 터널을 VM에 사용하여 로컬 포트 8080을 VM 포트 8081로 변환합니다.
로컬 머신에서 연결
로컬 머신에서 연결하려면 SSH 터널을 실행해야 합니다. gcloud compute ssh를 사용하여 실행할 수 있습니다.
gcloud compute ssh instance-1 --zone=us-central1-a -- -L 8081:localhost:8081
예상 출력:
student-macbookpro:~ student$ gcloud compute ssh instance-1 --zone=us-central1-a -- -L 8080:localhost:8081 Warning: Permanently added 'compute.7064281075337367021' (ED25519) to the list of known hosts. Linux instance-1.us-central1-c.c.gleb-test-001.internal 6.1.0-21-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.90-1 (2024-05-03) x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. student@instance-1:~$
이제 브라우저를 열고 http://localhost:8081을 사용하여 애플리케이션에 연결할 수 있습니다. 애플리케이션 화면이 표시됩니다.

Cloud Shell에서 연결
또는 Google Cloud Shell을 사용하여 연결할 수 있습니다. 맨 위에 있는 '+' 기호를 사용하여 다른 Cloud Shell 탭을 엽니다.

새 탭에서 gcloud 명령어를 실행하여 웹 클라이언트의 출처와 리디렉션 URI를 가져옵니다.
echo "origin:"; echo "https://8080-$WEB_HOST"; echo "redirect:"; echo "https://8080-$WEB_HOST/login/google"
예상되는 출력은 다음과 같습니다.
student@cloudshell:~ echo "origin:"; echo "https://8080-$WEB_HOST"; echo "redirect:"; echo "https://8080-$WEB_HOST/login/google" origin: https://8080-cs-35704030349-default.cs-us-east1-rtep.cloudshell.dev redirect: https://8080-cs-35704030349-default.cs-us-east1-rtep.cloudshell.dev/login/google
'클라이언트 ID 준비' 챕터에서 만든 사용자 인증 정보의 '승인된 JavaScript 원본' 및 '승인된 리디렉션 URI'로 원본과 URI의 리디렉션을 사용하고 원래 제공된 http://localhost:8080 값을 대체하거나 추가합니다.
OAuth 2.0 클라이언트 ID 페이지에서 'Cymbal Air'를 클릭합니다.

Cloud Shell의 출처와 리디렉션 URI를 입력하고 저장 버튼을 누릅니다.

새 Cloud Shell 탭에서 gcloud 명령어를 실행하여 VM에 대한 터널을 시작합니다.
gcloud compute ssh instance-1 --zone=us-central1-a -- -L 8080:localhost:8081
'요청한 주소를 할당할 수 없습니다'라는 오류가 표시됩니다. 이 오류는 무시하시기 바랍니다.
예상되는 출력은 다음과 같습니다.
student@cloudshell:~ gcloud compute ssh instance-1 --zone=us-central1-a -- -L 8080:localhost:8081 bind [::1]:8081: Cannot assign requested address inux instance-1.us-central1-a.c.gleb-codelive-01.internal 6.1.0-21-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.90-1 (2024-05-03) x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Sat May 25 19:15:46 2024 from 35.243.235.73 student@instance-1:~$
'웹 미리보기'에 사용할 수 있는 포트 8080이 Cloud Shell에서 열립니다.
Cloud Shell 오른쪽 상단에 있는 '웹 미리보기' 버튼을 클릭하고 드롭다운 메뉴에서 '포트 8080에서 미리보기'를 선택합니다.

웹브라우저에서 애플리케이션 인터페이스가 표시된 새 탭이 열립니다. 'Cymbal Air Customer Service Assistant' 페이지가 표시되어야 합니다.

애플리케이션에 로그인
모든 항목이 설정되고 애플리케이션이 열리면 애플리케이션 화면 오른쪽 상단의 '로그인' 버튼을 사용하여 사용자 인증 정보를 제공할 수 있습니다. 이는 선택사항이며 애플리케이션의 예약 기능을 사용해 보려는 경우에만 필요합니다.

그러면 사용자 인증 정보를 선택할 수 있는 팝업 창이 열립니다.
로그인하면 애플리케이션이 준비되고 창 하단의 필드에 요청을 게시할 수 있습니다.
이 데모는 Cymbal Air 고객 서비스 어시스턴트를 보여줍니다. Cymbal Air는 가상의 여객 항공사입니다. 이 어시스턴트는 여행자가 항공편을 관리하고 샌프란시스코 국제공항(SFO)에 있는 Cymbal Air 허브에 관한 정보를 찾아보도록 도와주는 AI 챗봇입니다.
로그인하지 않고 (CLIENT_ID 없이) 다음과 같은 사용자의 질문에 답하는 데 도움이 될 수 있습니다.
덴버로 가는 다음 항공편은 언제인가요?
C28 게이트 주변에 명품 매장이 있나요?
A6 게이트 근처에서 커피를 살 수 있는 곳은 어디인가요?
선물은 어디에서 구매할 수 있나요?
오늘 출발하는 SFO발 덴버행 항공편을 찾아 줘.
애플리케이션에 로그인하면 항공편 예약과 같은 다른 기능을 사용해 보거나 나에게 할당된 좌석이 창가 좌석인지 통로 좌석인지 확인할 수 있습니다.

이 애플리케이션은 최신 Google 기반 모델을 사용하여 응답을 생성하고 운영 중인 AlloyDB 데이터베이스의 항공편 및 편의시설 관련 정보로 응답을 보강합니다. 프로젝트의 GitHub 페이지에서 이 데모 애플리케이션에 관한 자세한 내용을 확인할 수 있습니다.
9. 환경 정리
모든 작업이 완료되면 이제 환경을 정리할 수 있습니다.
Cloud Run 서비스 삭제
Cloud Shell에서 다음을 실행합니다.
gcloud run services delete toolbox --region us-central1
예상되는 콘솔 출력:
student@cloudshell:~ (gleb-test-short-004)$ gcloud run services delete retrieval-service --region us-central1 Service [retrieval-service] will be deleted. Do you want to continue (Y/n)? Y Deleting [retrieval-service]...done. Deleted service [retrieval-service].
Cloud Run 서비스의 서비스 계정 삭제
Cloud Shell에서 다음을 실행합니다.
PROJECT_ID=$(gcloud config get-value project)
gcloud iam service-accounts delete toolbox-identity@$PROJECT_ID.iam.gserviceaccount.com --quiet
예상되는 콘솔 출력:
student@cloudshell:~ (gleb-test-short-004)$ PROJECT_ID=$(gcloud config get-value project) Your active configuration is: [cloudshell-222] student@cloudshell:~ (gleb-test-short-004)$ gcloud iam service-accounts delete retrieval-identity@$PROJECT_ID.iam.gserviceaccount.com --quiet deleted service account [retrieval-identity@gleb-test-short-004.iam.gserviceaccount.com] student@cloudshell:~ (gleb-test-short-004)$
실습을 마치면 AlloyDB 인스턴스와 클러스터를 폐기합니다.
AlloyDB 클러스터 및 모든 인스턴스 삭제
AlloyDB 무료 체험판을 사용한 경우 체험 클러스터를 사용하여 다른 실습과 리소스를 테스트할 계획이 있다면 체험 클러스터를 삭제하지 마세요. 동일한 프로젝트에서 다른 체험 클러스터를 만들 수 없습니다.
클러스터는 옵션 강제로 폐기되며, 클러스터에 속한 모든 인스턴스도 삭제됩니다.
연결이 끊어지고 이전 설정이 모두 손실된 경우 Cloud Shell에서 프로젝트와 환경 변수를 정의합니다.
gcloud config set project <your project id>
export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
export PROJECT_ID=$(gcloud config get-value project)
다음과 같이 클러스터를 삭제합니다.
gcloud alloydb clusters delete $ADBCLUSTER --region=$REGION --force
예상되는 콘솔 출력:
student@cloudshell:~ (test-project-001-402417)$ gcloud alloydb clusters delete $ADBCLUSTER --region=$REGION --force All of the cluster data will be lost when the cluster is deleted. Do you want to continue (Y/n)? Y Operation ID: operation-1697820178429-6082890a0b570-4a72f7e4-4c5df36f Deleting cluster...done.
AlloyDB 백업 삭제
클러스터의 모든 AlloyDB 백업을 삭제합니다.
for i in $(gcloud alloydb backups list --filter="CLUSTER_NAME: projects/$PROJECT_ID/locations/$REGION/clusters/$ADBCLUSTER" --format="value(name)" --sort-by=~createTime) ; do gcloud alloydb backups delete $(basename $i) --region $REGION --quiet; done
예상되는 콘솔 출력:
student@cloudshell:~ (test-project-001-402417)$ for i in $(gcloud alloydb backups list --filter="CLUSTER_NAME: projects/$PROJECT_ID/locations/$REGION/clusters/$ADBCLUSTER" --format="value(name)" --sort-by=~createTime) ; do gcloud alloydb backups delete $(basename $i) --region $REGION --quiet; done Operation ID: operation-1697826266108-60829fb7b5258-7f99dc0b-99f3c35f Deleting backup...done.
이제 VM을 폐기할 수 있습니다.
GCE VM 삭제
Cloud Shell에서 다음을 실행합니다.
export GCEVM=instance-1
export ZONE=us-central1-a
gcloud compute instances delete $GCEVM \
--zone=$ZONE \
--quiet
예상되는 콘솔 출력:
student@cloudshell:~ (test-project-001-402417)$ export GCEVM=instance-1
export ZONE=us-central1-a
gcloud compute instances delete $GCEVM \
--zone=$ZONE \
--quiet
Deleted
GCE VM 및 검색 서비스의 서비스 계정 삭제
Cloud Shell에서 다음을 실행합니다.
PROJECT_ID=$(gcloud config get-value project)
gcloud iam service-accounts delete compute-aip@$PROJECT_ID.iam.gserviceaccount.com --quiet
예상되는 콘솔 출력:
student@cloudshell:~ (gleb-test-short-004)$ PROJECT_ID=$(gcloud config get-value project) gcloud iam service-accounts delete compute-aip@$PROJECT_ID.iam.gserviceaccount.com --quiet Your active configuration is: [cloudshell-222] deleted service account [compute-aip@gleb-test-short-004.iam.gserviceaccount.com] student@cloudshell:~ (gleb-test-short-004)$
10. 마무리
축하합니다. Codelab을 완료했습니다.
학습한 내용
- AlloyDB 클러스터를 배포하는 방법
- AlloyDB에 연결하는 방법
- MCP Toolbox 서비스를 구성하고 배포하는 방법
- 배포된 서비스를 사용하여 샘플 애플리케이션을 배포하는 방법
11. 설문조사
결과: