로컬에서 클라우드로: Gemini CLI 및 Cloud SQL MCP를 사용한 전체 스택 앱 이전

1. 소개

피트니스 커뮤니티를 위한 풀 스택 이벤트 관리 플랫폼인 AllStrides를 만나보세요. 기능이 풍부하지만 현재 상태는 '로컬 전용'입니다. 로컬 SQLite 데이터베이스와 수동 Node.js 실행에 의존합니다. 커뮤니티가 성장하려면 AllStrides에 Google Cloud의 확장성, 안정성, 보안이 필요합니다.

이 Codelab에서는 기존 마이그레이션을 수행하지 않습니다. 대신 Gemini CLI를 에이전트 파트너로 사용하여 제품 설계사 역할을 수행합니다. Gemini에 3개의 Google Cloud 모델 컨텍스트 프로토콜 (MCP) 서버를 장착하면 AI가 Google Cloud 서비스에 직접 '연락'하고 상호작용할 수 있습니다. 먼저 개발자 지식 MCP를 사용하여 allstrides 앱에 가장 적합한 Google Cloud 데이터베이스를 식별합니다. 그런 다음 Cloud SQL MCP를 사용하여 데이터베이스 인스턴스를 프로비저닝하고 단일 프롬프트로 로컬 커뮤니티 데이터를 클라우드로 이동합니다. 마지막으로 Cloud Run MCP를 사용하여 애플리케이션을 컨테이너화하여 AllStrides를 라이브 상태로 만들고 전 세계에서 액세스할 수 있도록 합니다.

e031fbb4ae5d2afc.png

기본 요건

  • Google Cloud 콘솔에 관한 기본적인 이해
  • 명령줄 인터페이스 및 Cloud Shell의 기본 기술

학습할 내용

  • 원격 MCP와 함께 작동하도록 Gemini CLI를 구성하는 방법
  • Development Knowledge MCP 서버 사용 방법
  • Cloud SQL 원격 MCP 서버를 사용하여 클라우드로 데이터를 마이그레이션하는 방법
  • Cloud Run 원격 MCP 서버를 사용하여 클라우드에 애플리케이션을 배포하는 방법
  • Google Cloud Shell에서 Gemini CLI를 사용하는 방법

필요한 항목

  • Google Cloud 계정 및 Google Cloud 프로젝트
  • Google Cloud 콘솔 및 Cloud Shell을 지원하는 웹브라우저(예: Chrome)

2. 설정 및 요구사항

프로젝트 설정

  1. Google Cloud 콘솔에 로그인합니다. 아직 Gmail이나 Google Workspace 계정이 없는 경우 계정을 만들어야 합니다.

직장 또는 학교 계정 대신 개인 계정을 사용하세요.

  1. 새 프로젝트를 만들거나 기존 프로젝트를 재사용합니다. Google Cloud 콘솔에서 새 프로젝트를 만들려면 헤더에서 프로젝트 선택 버튼을 클릭하여 팝업 창을 엽니다.

295004821bab6a87.png

프로젝트 선택 창에서 새 프로젝트 버튼을 누르면 새 프로젝트 대화상자가 열립니다.

37d264871000675d.png

대화상자에서 원하는 프로젝트 이름을 입력하고 위치를 선택합니다.

96d86d3d5655cdbe.png

  • 프로젝트 이름은 이 프로젝트 참가자의 표시 이름입니다. 프로젝트 이름은 Google API에서 사용되지 않으며 언제든지 변경할 수 있습니다.
  • 프로젝트 ID는 모든 Google Cloud 프로젝트에서 고유하며, 변경할 수 없습니다 (설정된 후에는 변경할 수 없음). Google Cloud 콘솔에서 고유 ID를 자동으로 생성하지만 이를 맞춤설정할 수 있습니다. 생성된 ID가 마음에 들지 않으면 다른 임의 ID를 생성하거나 직접 ID를 입력하여 사용 가능 여부를 확인할 수 있습니다. 대부분의 Codelab에서는 프로젝트 ID를 참조해야 합니다. 프로젝트 ID는 일반적으로 PROJECT_ID 자리표시자로 식별됩니다.
  • 참고로 세 번째 값은 일부 API에서 사용하는 프로젝트 번호입니다. 이 세 가지 값에 대한 자세한 내용은 문서를 참고하세요.

결제 사용 설정

개인 결제 계정 설정

Google Cloud 크레딧을 사용하여 결제를 설정한 경우 이 단계를 건너뛸 수 있습니다.

  1. 이 링크를 클릭하고 개인 Google 계정으로 로그인합니다.
  2. 다음과 같은 화면을 볼 수 있습니다.

f54628965f465486.png

  1. 크레딧에 액세스하려면 여기를 클릭하세요 버튼을 클릭합니다. 그러면 결제 프로필을 설정하는 페이지로 이동합니다. 무료 체험 가입 화면이 표시되면 취소를 클릭하고 결제 연결을 계속합니다.

20e88842cf2a732e.png

  1. '확인'을 클릭합니다. 이제 Google Cloud Platform 평가판 결제 계정에 연결되었습니다.

cdc87f1c57777951.png

개인 결제 계정 설정

Google Cloud 크레딧을 사용하여 결제를 설정한 경우 이 단계를 건너뛸 수 있습니다.

개인 결제 계정을 설정하려면 Cloud 콘솔에서 여기에서 결제를 사용 설정하세요.

참고 사항:

  • 이 실습을 완료하는 데 드는 Cloud 리소스 비용은 미화 3달러 미만입니다.
  • 이 실습이 끝나면 단계에 따라 리소스를 삭제하여 추가 요금이 발생하지 않도록 할 수 있습니다.
  • 신규 사용자는 미화$300 상당의 무료 체험판을 사용할 수 있습니다.

Cloud Shell 시작

Google Cloud를 노트북에서 원격으로 실행할 수 있지만, 이 Codelab에서는 Cloud에서 실행되는 명령줄 환경인 Google Cloud Shell을 사용합니다.

Google Cloud Console의 오른쪽 상단 툴바에 있는 Cloud Shell 아이콘을 클릭합니다.

Cloud Shell 활성화

또는 G를 누른 다음 S를 누릅니다. Google Cloud 콘솔에 있거나 이 링크를 사용하는 경우 이 시퀀스를 통해 Cloud Shell이 활성화됩니다.

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

환경이 연결되었음을 보여주는 Google Cloud Shell 터미널 스크린샷

가상 머신에는 필요한 개발 도구가 모두 들어있습니다. 영구적인 5GB 홈 디렉터리를 제공하고 Google Cloud에서 실행되므로 네트워크 성능과 인증이 크게 개선됩니다. 이 Codelab의 모든 작업은 브라우저 내에서 수행할 수 있습니다. 아무것도 설치할 필요가 없습니다.

3. 시작하기 전에

기본 API 사용 설정

Cloud SQL과 같은 관리형 데이터베이스 서비스 및 기타 서비스를 사용하여 애플리케이션을 빌드하고 Cloud Run에 배포하려면 Google Cloud 프로젝트에서 해당 API를 사용 설정해야 합니다.

접근 방식에 따라 이 단계를 건너뛰고 나중에 Gemini CLI에서 필요한 API를 모두 사용 설정하도록 할 수도 있지만, 이 경우 실행 중에 지연이 발생하고 단계를 반복해야 할 수 있습니다.

Cloud Shell 터미널 내에 프로젝트 ID가 설정되어 있는지 확인합니다.

gcloud config set project [YOUR-PROJECT-ID]

환경 변수 PROJECT_ID를 설정합니다.

PROJECT_ID=$(gcloud config get-value project)

필요한 모든 서비스를 사용 설정합니다.

gcloud services enable sqladmin.googleapis.com \
                       aiplatform.googleapis.com \
                       secretmanager.googleapis.com \
                       artifactregistry.googleapis.com \
                       cloudbuild.googleapis.com \
                       run.googleapis.com \
                       containerregistry.googleapis.com

예상 출력:

student@cloudshell:~ (test-project-001-402417)$ PROJECT_ID=$(gcloud config get-value project)
Your active configuration is: [cloudshell-14650]
student@cloudshell:~ (test-project-001-402417)$ 
student@cloudshell:~ (test-project-001-402417)$ gcloud services enable sqladmin.googleapis.com \
                       aiplatform.googleapis.com \
                       secretmanager.googleapis.com \
                       artifactregistry.googleapis.com \
                       cloudbuild.googleapis.com \
                       run.googleapis.com \
                       containerregistry.googleapis.com
Operation "operations/acat.p2-812263612774-c2dbeef3-c4c1-4a7d-a4b2-b5380be65044" finished successfully.

서비스 계정에 권한 부여

애플리케이션 이미지를 빌드하고 저장하려면 기본 컴퓨팅 서비스 계정에 스토리지 관리자 권한을 제공해야 합니다. 이전 단계와 마찬가지로 실행 중에 나중에 Gemini CLI에 위임할 수 있습니다.

PROJECT_ID=$(gcloud config get-value project)
 gcloud projects add-iam-policy-binding $PROJECT_ID --member=serviceAccount:$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")-compute@developer.gserviceaccount.com --role=roles/storage.admin

원격 MCP 사용 설정

원격 MCP 서비스는 프로젝트의 각 서비스에 대해 명시적으로 사용 설정해야 합니다. 기본적으로 사용 중지되어 있으며 프로젝트 및 서비스 수준에서 API 액세스를 규제하는 데 도움이 됩니다.

Developer Knowledge MCP 서비스부터 시작해 보겠습니다. Developer Knowledge API와 원격 MCP 서비스를 사용 설정하려면 다음 gcloud 명령어를 실행해야 합니다.

PROJECT_ID=$(gcloud config get-value project)
gcloud beta services mcp enable developerknowledge.googleapis.com --project=$PROJECT_ID

개발자 지식용 API와 원격 MCP가 사용 설정되면 Cloud SQL 원격 MCP 서비스에 대해서도 동일한 작업을 진행할 수 있습니다.

gcloud beta services mcp enable sqladmin.googleapis.com --project=$PROJECT_ID

데이터베이스의 모든 원격 MCP와 마찬가지로 MCP 액세스 및 권한은 스테이징되어 API 자체에 대한 프로젝트 수준의 세부적인 액세스를 제공하며 서비스 사용량 관리자 (roles/serviceusage.serviceUsageAdmin) 역할이 있는 주 구성원 (사용자 또는 서비스 계정)만 이를 수행할 수 있습니다.

MCP 도구 사용자 (roles/mcp.toolUser) 역할이 있는 보안 주체만 원격 MCP API를 호출할 수 있습니다.

예를 들어 Cloud SQL 관리자 (roles/cloudsql.admin) 역할이 없으면 프로젝트에서 인스턴스를 만들거나 클론하거나 업데이트할 수 없습니다.

필요한 역할 및 권한에 대한 자세한 내용은 문서를 참고하세요.

보시다시피 단계적이고 세부적인 승인은 원격 MCP 엔드포인트가 사용 설정된 경우에도 무단 공격으로부터 보호하므로 프로덕션에 충분히 안전합니다.

다음으로 사용 설정할 원격 MCP는 Cloud Run 서비스용입니다. Cloud Run 원격 MCP 사용 설정 및 액세스 방식은 Cloud SQL 원격 MCP와 유사합니다.

다음 명령어를 사용하여 Cloud Run MCP 서비스를 사용 설정합니다.

gcloud beta services mcp enable run.googleapis.com --project=$PROJECT_ID

마지막으로 다음 명령어를 사용하여 프로젝트에서 사용 설정된 모든 원격 MCP를 확인할 수 있습니다.

gcloud beta services mcp list --project=$PROJECT_ID

예상 출력:

student@cloudshell:~ (test-project-001-402417)$ gcloud beta services mcp list --project=$PROJECT_ID
NAME: services/developerknowledge.googleapis.com
MCP_ENDPOINT: developerknowledge.googleapis.com

NAME: services/run.googleapis.com
MCP_ENDPOINT: run.googleapis.com/mcp

NAME: services/sqladmin.googleapis.com
MCP_ENDPOINT: sqladmin.googleapis.com/mcp

이제 모든 API와 서비스가 사용 설정되었으므로 Gemini CLI를 구성해야 합니다.

4. Gemini CLI 구성

이 실습은 Gemini CLI를 기본 에이전트로 사용하여 대부분의 작업을 수행하도록 설계되었으며 첫 번째 단계는 원격 MCP 서버와 함께 작동하도록 구성하는 것입니다. 또한 최신 버전의 Gemini CLI와 최신 버전의 Gemini(예: Gemini-3-pro 또는 Gemini-3-flash(현재 프리뷰))를 사용하는 것이 좋습니다.

최신 버전의 Gemini CLI가 이미 설치되어 있고 최신 Gemini 모델을 사용하도록 구성되어 있다면 다음 두 단계를 건너뛰고 3단계로 바로 이동하면 됩니다.

1. Gemini API 키 받기

Gemini CLI에서 최신 Gemini 모델을 사용하려면 API 키 인증으로 구성해야 합니다. Google AI Studio에서 API 키를 가져올 수 있습니다.

  1. 브라우저에서 Google AI Studio -> API 키 받기로 이동합니다.
  2. 화면 오른쪽에서 Create API key 버튼을 클릭합니다.
  3. 팝업 창에서 프로젝트를 선택하거나 표시되지 않는 경우 가져옵니다.

683940deabde2975.jpeg

  1. API 키를 만듭니다.
  2. 오른쪽의 복사 버튼을 사용하여 키를 복사할 수 있습니다.

3d97805534c50bf.jpeg

키가 준비되었으므로 이제 Gemini CLI에 사용할 수 있습니다.

2. Gemini CLI 구성

Gemini CLI는 설정 구성 파일을 통해 구성하거나 /settings 명령어를 사용하여 대화형으로 구성할 수 있습니다. 설정 파일에 설정이 유지되기를 원합니다.

먼저 프로젝트의 디렉터리를 만듭니다. 디렉터리를 projectmcp라고 하고 다음 명령어를 사용하여 해당 디렉터리로 전환합니다.

mkdir ~/projectmcp
cd ~/projectmcp

이 디렉터리에서 Gemini 구성 파일용 디렉터리를 만들고 모든 명령어를 실행합니다. Gemini CLI는 기본적으로 ~/.gemini 디렉터리에 설치된 사용자 범위 구성 파일과 확장 프로그램을 사용합니다. 하지만 ~/projectmcp 디렉터리에 자체 프로젝트 범위 구성을 만들 것입니다. 먼저 구성 디렉터리와 파일을 만들어 보겠습니다.

mkdir ~/projectmcp/.gemini
touch ~/projectmcp/.gemini/settings.json

그런 다음 Cloud Shell 편집기를 사용하여 ~/projectmcp/.gemini/settings.json 파일을 엽니다.

edit ~/projectmcp/.gemini/settings.json

열린 편집기 창에 다음 구성을 추가합니다.

{
  "general": {
    "preferredEditor": "vscode",
    "previewFeatures": true,
    "sessionRetention": {
      "enabled": true
    }
  },
  "ide": {
    "enabled": true,
    "hasSeenNudge": true
  },
  "security": {
    "auth": {
      "selectedType": "gemini-api-key"
    }
  },
  "ui": {
    "theme": "Default"
  },
  "tools": {
    "shell": {
      "enableInteractiveShell": false
    }
  }
}

파일을 수정한 후 ctrl+s를 사용하여 변경사항을 저장하고 Open Terminal 버튼을 클릭하여 터미널로 다시 전환할 수 있습니다.

e152c73931dac892.jpeg

위의 settings.json 파일은 Gemini CLI 인증 유형을 gemini-api-key로 설정하며 모델에 키를 제공해야 합니다. Gemini CLI로 작업하려는 디렉터리에 .env 파일을 만들고 Gemini CLI 인증을 위한 API 키를 환경 변수로 저장하면 됩니다. 이렇게 하면 IDE를 시작할 때 환경 변수가 선택됩니다.

Cloud Shell 편집기를 사용하여 파일을 수정해 보겠습니다.

edit ~/projectmcp/.env

1단계에서 만든 API 키를 저장합니다.

GEMINI_API_KEY= <YOUR_API_KEY>

이제 터미널로 돌아가서 계속 진행할 수 있습니다. 다음 단계는 Gemini CLI를 최신 버전으로 업데이트하는 것입니다. Google Cloud Shell 또는 환경의 버전이 오래되어 최신 구성 및 MCP 서비스와 올바르게 작동하지 않을 수 있습니다. 따라서 Gemini CLI를 최신 버전으로 업데이트하고 시작해야 합니다. 터미널에서 다음을 실행합니다.

cd ~/projectmcp/
npm install -g @google/gemini-cli@latest

이제 버전을 확인할 수 있습니다. Google Cloud Shell에서 작업하는 경우 셸을 다시 시작할 때마다 이전 버전으로 돌아갈 수 있습니다. Gemini CLI 자체에 적용한 변경사항은 Cloud Shell에서 영구적이지 않습니다.

gemini --version

최신 Gemini CLI 버전 (실습을 작성하는 시점의 버전 0.27)이 표시되어야 합니다. 최신 Gemini CLI 버전은 여기에서 확인할 수 있습니다. 이제 시작하여 최신 Gemini 모델을 사용하고 있는지 확인할 수 있습니다. 프로젝트 폴더에서 다음 명령어를 실행하여 Gemini CLI를 시작합니다.

gemini

Gemini CLI가 시작되면 인터페이스에서 /about 명령어를 실행하여 버전과 모델을 확인할 수 있습니다. 아래 그림과 같은 결과가 표시됩니다.

dea82957ace33156.jpeg

최신 Gemini-3 모델을 사용하고 있음을 확인할 수 있습니다.

2. Gemini CLI에서 MCP 서버 구성

이제 사용 설정된 모든 MCP 서버를 추가할 차례입니다. Gemini CLI에서 확장 프로그램을 통해 또는 설정에서 직접 이 기능을 사용 설정할 수 있습니다. 이 실습에서는 프로젝트 범위 설정.json 파일을 사용하고 여기에 MCP 서버 인증 세부정보를 추가합니다.

  1. 개발자 지식 MCP 서버의 경우 엔드포인트에서 승인받을 API 키를 만들어야 합니다.

다음 단계를 따르세요.

  • API를 사용 설정한 프로젝트의 Google Cloud 콘솔에서 사용자 인증 정보 페이지로 이동합니다.
  • '사용자 인증 정보 만들기'를 클릭한 후 메뉴에서 'API 키'를 선택합니다. API 키 생성 완료 대화상자에 새로 생성된 키의 문자열이 표시됩니다.
  • 대화상자에서 Edit API key 링크를 클릭합니다.
  • Name 필드에 키 이름을 입력합니다. 예를 들어 DK API Key입니다 .
  • API 제한사항에서 Restrict key를 선택합니다.
  • API 선택 목록에서 Developer Knowledge API를 사용 설정하고 확인을 클릭합니다.
  • 저장을 클릭합니다.

d0e7c7081e43788e.jpeg

이제 키를 사용해야 하는 경우 페이지로 이동하여 오른쪽의 키 표시를 클릭하면 됩니다.

caf35e95bba68c2.jpeg

이제 이 키를 구성에 저장해야 합니다. settings.json 파일의 MCP 섹션은 다음과 같습니다 (DK API 키 값을 입력해야 함). DK API만 추가된 경우 settings.json 파일의 MCP 섹션은 다음과 같습니다. 실습 후반부에서는 모든 MCP 서버가 함께 있는 settings.json 파일이 어떻게 표시되는지도 알아봅니다.

    "mcpServers": {
    "DeveloperKnowledge": {
      "httpUrl": "https://developerknowledge.googleapis.com/mcp",
      "headers": {
        "X-Goog-Api-Key": "<Your DK API Key>"
      }
    }
  },
  1. 다음으로 Cloud SQL MCP 서버의 구성을 추가할 수 있습니다. Cloud SQL MCP의 경우 API 대신 Google 사용자 인증 정보를 사용합니다. 더 안전하며 사용자에게 허용되는 역할과 작업 범위를 정의할 수 있습니다. 다음은 MCP 서버의 구성입니다. '<YOUR_GCP_PROJECT>'를 자체 프로젝트 ID로 바꾸세요.
    "Cloud SQL MCP Server": {
      "httpUrl": "https://sqladmin.googleapis.com/mcp",
      "authProviderType": "google_credentials",
      "oauth": {
        "scopes": [
          "https://www.googleapis.com/auth/cloud-platform"
        ]
      },
      "timeout": 500000,
      "trust": false,
      "headers": {
        "X-Goog-User-Project": "<YOUR_GCP_PROJECT>"
      }
    },
  1. 다음 JSON 청크에는 Cloud Run MCP 서버의 구성이 포함되어 있습니다. 위의 예와 동일한 패턴을 따르고 인증 및 승인에 Google 사용자 인증 정보를 사용합니다. 다음은 샘플 구성입니다.
    "CloudRun": {
      "httpUrl": "https://run.googleapis.com/mcp",
      "authProviderType": "google_credentials",
      "oauth": {
        "scopes": [
          "https://www.googleapis.com/auth/cloud-platform"
        ]
      }
    }

이러한 모든 항목을 ~/projectmcp/.gemini/settings.json 파일에 추가해야 합니다.

Cloud Shell 편집기를 사용하여 ~/projectmcp/.gemini/settings.json 파일을 엽니다.

edit ~/projectmcp/.gemini/settings.json

다음 구성으로 콘텐츠를 바꿉니다. 환경에 따라 API 키와 프로젝트 ID를 'X-Goog-Api-Key' 및 'X-Goog-User-Project' 필드에 입력하세요.

{
  "general": {
    "preferredEditor": "vscode",
    "previewFeatures": true,
    "sessionRetention": {
      "enabled": true
    }
  },
  "ide": {
    "enabled": true,
    "hasSeenNudge": true
  },
  "security": {
    "auth": {
      "selectedType": "gemini-api-key"
    }
  },
  "mcpServers": {
    "DeveloperKnowledge": {
      "httpUrl": "https://developerknowledge.googleapis.com/mcp",
      "headers": {
        "X-Goog-Api-Key": "<Your DK API Key>"
      }
    },
    "Cloud SQL MCP Server": {
      "httpUrl": "https://sqladmin.googleapis.com/mcp",
      "authProviderType": "google_credentials",
      "oauth": {
        "scopes": [
          "https://www.googleapis.com/auth/cloud-platform"
        ]
      },
      "timeout": 500000,
      "trust": false,
      "headers": {
        "X-Goog-User-Project": "<YOUR_GCP_PROJECT>"
      }
    },
    "CloudRun": {
      "httpUrl": "https://run.googleapis.com/mcp",
      "authProviderType": "google_credentials",
      "oauth": {
        "scopes": [
          "https://www.googleapis.com/auth/cloud-platform"
        ]
      }
    }
  },
  "ui": {
    "theme": "Default"
  },
  "tools": {
    "shell": {
      "enableInteractiveShell": false
    }
  }
}

이제 Gemini CLI를 시작하고 모든 MCP 서버가 사용 설정되어 있는지 확인할 수 있습니다.

cd ~/projectmcp/
gemini

Gemini CLI가 시작되면 /mcp 명령어를 실행하여 모든 MCP 서버가 실행 중인지 확인할 수 있습니다.

352638b053783696.png

5. 애플리케이션 준비

다음 예에서는 샘플 로컬 애플리케이션을 Google Cloud로 이전해 봅니다. 먼저 애플리케이션을 로컬에 설치하고 테스트합니다.

1. 소스 코드 클론

GitHub 저장소에서 애플리케이션을 클론해야 합니다. 프로젝트 폴더의 Cloud Shell 또는 로컬 터미널에서 다음을 실행합니다.

git clone https://github.com/google/mcp.git

2. 애플리케이션을 로컬로 시작

애플리케이션을 테스트하고 샘플 데이터를 로드해 보겠습니다.

동일한 셸에서 애플리케이션 폴더로 전환하고 다음을 사용하여 애플리케이션을 시작합니다.

cd mcp/examples/allstrides
./start_allstrides.sh

3. 애플리케이션 테스트

Cloud Shell에서 작업하는 경우 Cloud Shell 창 상단의 Web preview 버튼을 누르고 Preview on port 8080를 선택합니다.

db0d9210014ade3d.jpeg

애플리케이션 인터페이스가 표시된 새 브라우저 탭이 열리고 여기에서 Events 버튼을 클릭할 수 있습니다.

67423438eef0c999.jpeg

현재 이벤트가 없습니다.

4. 샘플 데이터 로드

선택적으로 애플리케이션에 등록하고 자체 이벤트, 채팅 메시지, 사용자를 만들거나 애플리케이션과 함께 제공되는 샘플 데이터를 사용할 수 있습니다.

맨 위에 있는 '+' 기호를 사용하여 다른 Cloud Shell 탭을 엽니다.

abc505ac4d41f24e.png

새 Cloud Shell 탭에서 애플리케이션 디렉터리로 전환하고 sqllite3 유틸리티를 사용하여 가져오기를 실행합니다.

cd ~/projectmcp/mcp/examples/allstrides
sqlite3 allstrides.db < seed_data.sql

애플리케이션 페이지로 돌아간 후 이벤트 버튼을 다시 클릭하면 여러 이벤트가 표시됩니다.

5adc772a1d2261f4.jpeg

채팅 페이지를 테스트하고 메시지를 확인할 수도 있습니다.

이제 exit를 입력하여 두 번째 탭을 닫을 수 있습니다.

exit

첫 번째 탭에서 ctrl+c 조합을 사용하여 애플리케이션을 중지합니다.

6. Testing Developer Knowledge MCP

개발자 지식 MCP를 사용하면 최신 Google 문서로 보강할 수 있는 안내 확인, 튜토리얼 만들기, 기타 작업을 수행할 수 있는 기능을 제공하는 애그노스틱 도구에서 직접 Google 문서를 사용할 수 있습니다.

Gemini CLI를 시작하고 개발자 지식 MCP 서버에서 사용 가능한 MCP 도구를 나열합니다.

/mcp

개발자 지식 MCP에는 다음 세 가지 도구가 표시됩니다.

예상 출력:

🟢 DeveloperKnowledge - Ready (3 tools)
  Tools:
  - batch_get_documents
  - get_document
  - search_documents

애플리케이션을 Google Cloud로 이전해야 하므로 로컬 Sqlite 데이터베이스에서 확장성이 더 뛰어난 클라우드 네이티브 솔루션으로 전환해야 합니다. Gemini에게 애플리케이션 코드를 분석하고 데이터베이스 솔루션에 대한 조언을 요청해 보겠습니다.

Gemini CLI 프롬프트에 다음을 입력합니다.

Hello, I need to choose a database platform for my allstrides application in Google Cloud. Can you analyze documentation and prepare a tutorial to choose the correct database engine?

Gemini CLI는 코드 분석부터 시작한 다음

예상 출력

 ?  search_documents (DeveloperKnowledge MCP Server) {"query":"choose google cloud database"}                                                                                                               ← │
│                                                                                                                                                                                                              │
│ MCP Server: DeveloperKnowledge                                                                                                                                                                               │
│ Tool: search_documents                                                                                                                                                                                       │
│                                                                                                                                                                                                              │
│ Allow execution of MCP tool "search_documents" from server "DeveloperKnowledge"?                                                                                                                             │
│                                                                                                                                                                                                              │
│ ● 1. Allow once                                                                                                                                                                                              │
│   2. Allow tool for this session                                                                                                                                                                             │
│   3. Allow all server tools for this session                                                                                                                                                                 │
│   4. No, suggest changes (esc)   

이 도구는 Google 문서로 대답을 뒷받침하기 위해 MCP를 사용하고 있습니다. 개발자 지식 MCP 요청의 실행을 허용합니다. 대답을 제공하기 전에 추가 정보를 얻기 위해 한두 번 더 질문할 수 있습니다. 지금부터는 신청서를 변경할 수 없습니다.

결국 PostgreSQL용 Cloud SQL이 데이터베이스 백엔드로 가장 적합한 선택으로 정의된 요약이 포함된 튜토리얼이 생성되었습니다. 생성형 AI 모델의 비결정적인 특성으로 인해 약간 다른 대답이 표시될 수 있습니다.

예상 출력:

By switching to Cloud SQL for PostgreSQL, AllStrides gains a robust, scalable foundation suitable for production deployment on Google Cloud. The transition is straightforward due to the use of Sequelize ORM.  

단계별 데이터 이전 가이드를 준비해 달라고 요청할 수도 있습니다. Gemini CLI에 새 프롬프트를 입력합니다.

I agree with the recommendation to use Cloud SQL for PostgreSQL as the new database for my application. Can you prepare a detailed migration tutorial based on Google documentation on how to move data from my local database to Cloud SQL in the cloud?

여기에서도 튜토리얼을 준비할 때 Gemini CLI가 개발자 지식 MCP를 정보 소스로 사용해야 합니다. Gemini CLI에서 취하는 작업 순서는 정확한 모델 및 기타 요인에 따라 약간 다를 수 있습니다. 예를 들어 먼저 이전 스크립트를 준비하고 그 후에만 최종 튜토리얼 문서를 작성하도록 요청할 수 있습니다.

다음은 개발자 지식 MCP를 실행할 권한을 요청하는 예 중 하나입니다.

 ?  search_documents (DeveloperKnowledge MCP Server) {"query":"migrate local database to Cloud SQL for PostgreSQL"}                                                                                         ← │
│                                                                                                                                                                                                              │
│ MCP Server: DeveloperKnowledge                                                                                                                                                                               │
│ Tool: search_documents                                                                                                                                                                                       │
│                                                                                                                                                                                                              │
│ Allow execution of MCP tool "search_documents" from server "DeveloperKnowledge"?                                                                                                                             │
│                                                                                                                                                                                                              │
│ ● 1. Allow once                                                                                                                                                                                              │
│   2. Allow tool for this session                                                                                                                                                                             │
│   3. Allow all server tools for this session                                                                                                                                                                 │
│   4. No, suggest changes (esc)                                                                                                                                                                               │
│                                                                                                                                                                                                              │
│                                                                                                                                                                                                              │
│ ⊷  search_documents (DeveloperKnowledge MCP Server) {"query":"import data into Cloud SQL PostgreSQL"}
 

실행 중에 Gemini CLI가 일부 명령어를 실행하라는 메시지를 표시할 수 있습니다. 예를 들어 데이터 스키마를 더 잘 이해하여 데이터 이전의 올바른 안내를 준비할 수 있습니다.

마지막으로 데이터 이전 단계별 안내를 준비해야 합니다.

그런 다음 Gemini CLI에 튜토리얼을 작성해 달라고 요청할 수 있습니다.

Please write the tutorial down

그러면 튜토리얼 문서가 포함된 새 마크다운 파일이 생성됩니다.

예상 출력:

✦ I have created a detailed migration guide for you.

  You can find the tutorial in the new file: MIGRATION_GUIDE.md.

  This guide covers:
   1. Exporting your local SQLite data to CSV format.
   2. Creating the PostgreSQL schema with compatible data types.
   3. Uploading data to Google Cloud Storage.
   4. Importing data into Cloud SQL in the correct order to respect relationships.
   5. Resetting ID sequences to ensure new data can be added without errors.

다음 단계에서는 Cloud SQL MCP를 사용하여 데이터베이스를 준비하고 데이터를 이전합니다.

7. Cloud SQL 원격 MCP 테스트

1. Cloud SQL 인스턴스 만들기

Gemini CLI에 /mcp를 입력하여 Cloud SQL MCP 서버에서 사용 가능한 도구를 확인하는 것부터 시작할 수 있습니다.

/mcp

현재 Google에서 사용할 수 있는 도구는 다음과 같습니다.

예상 출력:

🟢 Cloud SQL MCP Server - Ready (11 tools)
  Tools:
  - clone_instance
  - create_instance
  - create_user
  - execute_sql
  - get_instance
  - get_operation
  - import_data
  - list_instances
  - list_users
  - update_instance
  - update_user

Google Cloud에서 애플리케이션의 백엔드로 PostgreSQL용 Cloud SQL을 사용하기로 이미 결정했습니다. 이제 Gemini에게 Cloud SQL 인스턴스를 만들어 달라고 요청할 수 있습니다.

Gemini CLI 프롬프트에서 다음과 같이 요청을 입력합니다.

Please create a Cloud SQL for Postgres instance with appropriate edition and version in the us-central1 region to be a backend for our application with a public IPs in the current project with 2 CPU and 8 GB memory.

현재 프로젝트를 식별하기 위한 추가 호출을 방지하려면 프롬프트를 입력할 때 프로젝트 ID를 명시적으로 지정하면 됩니다. 이전에 컨텍스트에서 프로젝트 이름을 사용하지 않은 경우 모델은 프로젝트 ID를 묻거나 gcloud 명령어를 실행하여 프로젝트를 식별하도록 요청합니다.

그런 다음 기존 도구를 분석하고 Cloud SQL MCP 도구를 실행하라는 메시지를 표시합니다. 다음과 같은 승인 요청이 표시됩니다.

?  create_instance (Cloud SQL MCP Server MCP Server) {"tier":"db-custom-2-8192","region":"us-central1","project":"gleb-test-short-001-486416","databaseVersion":"POSTGRES_17","edition":"ENTERPRISE","nam... ← │
│                                                                                                                                                                                                              │
│ MCP Server: Cloud SQL MCP Server                                                                                                                                                                             │
│ Tool: create_instance                                                                                                                                                                                        │
│                                                                                                                                                                                                              │
│ Allow execution of MCP tool "create_instance" from server "Cloud SQL MCP Server"?                                                                                                                            │
│                                                                                                                                                                                                              │
│ ● 1. Allow once                                                                                                                                                                                              │
│   2. Allow tool for this session                                                                                                                                                                             │
│   3. Allow all server tools for this session                                                                                                                                                                 │
│   4. No, suggest changes (esc)
 

실행을 시작한 후에는 검사 사이에 작업 상태와 가능한 절전 모드 요청을 모니터링하라는 메시지가 표시됩니다. 다음과 같은 내용이 표시됩니다.

✦ I will wait for 30 seconds before checking the status of the instance creation.
╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ ⊶  Shell sleep 30 [current working directory /home/gleb/demo]                                                                                                                                                │
│                                                                                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
⠋ Refining Instance Configuration (esc to cancel, 11s)

그다음에는 Cloud SQL Server MCP용 get_operation 도구가 이어집니다.

╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ ?  get_operation (Cloud SQL MCP Server MCP Server) {"project":"gleb-test-short-001-486416","operation":"73c39ca7-65fe-46d1-bdb8-0dfa00000032"}                                                             ← │
│                                                                                                                                                                                                              │
│ MCP Server: Cloud SQL MCP Server                                                                                                                                                                             │
│ Tool: get_operation                                                                                                                                                                                          │
│                                                                                                                                                                                                              │
│ Allow execution of MCP tool "get_operation" from server "Cloud SQL MCP Server"?                                                                                                                              │
│                                                                                                                                                                                                              │
│ ● 1. Allow once

최종 get_instance 요청 후 생성된 인스턴스에 관한 정보를 가져와야 합니다. 다음과 같은 내용이 표시됩니다.

예상 출력:

✦ I will wait for 30 seconds before checking the status of the instance creation.
╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ ⊶  Shell sleep 30 [current working directory /home/gleb/demo]                                                                                                                                                │
│                                                                                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
⠋ Refining Instance Configuration (esc to cancel, 11s)

그 뒤에는 Cloud SQL Server MCP용 get_operation 도구와 get_insance MCP 도구 호출이 이어집니다. 작업이 성공적으로 완료되었는지 확인하기 위해 Gemini CLI에서 실행하는 추가 검사와 호출이 표시될 수 있습니다.

The Cloud SQL for Postgres instance allstrides-db has been successfully created in the us-central1 region with 2 vCPUs and 8 GB of RAM.

  Instance Details:
   - Project ID: gleb-test-short-001-486416
   - Instance Name: allstrides-db
   - Public IP Address: 35.226.187.246
   - Database Version: POSTGRES_17
   - Machine Type: db-custom-2-8192 (2 vCPU, 8 GB RAM)
   - Region: us-central1
   - Connection Name: gleb-test-short-001-486416:us-central1:allstrides-db

  The instance is configured with public IP enabled, IAM authentication turned on, and Data API access allowed.

2. 데이터 이전

인스턴스가 준비되었으므로 이제 기존 SQLite 데이터베이스에서 클라우드의 새 데이터베이스로 모든 데이터를 마이그레이션할 수 있습니다.

Gemini CLI 프롬프트에 다음 요청을 입력합니다.

Now when we have our Cloud SQL instance ready it is time to move the data from our local database. Please migrate all the  data to a new database in our Cloud SQL instance where the new user for application would be the database owner? Let's call the new database allstrides-db and the user allstrides. Please use our MCP tools whenever it is possible.

실행 중에 Gemini CLI가 데이터 모델을 분석하며, 이를 위해 일부 명령어를 실행할 권한을 요청합니다. 워크플로는 100% 확정적이지 않으며 일부 단계가 다를 수 있습니다.

다음은 시작하는 방법의 예입니다.

예상 출력:

✦ I will read the allstrides/README.md and allstrides/seed_data.sql files to understand the local database structure and data.
╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ ✓  ReadFile allstrides/README.md                                                                                                                                                                             │
│                                                                                                                                                                                                              │
│                                                                                                                                                                                                              │
│ ✓  ReadFile allstrides/seed_data.sql                                                                                                                                                                         │
│                                                                                                                                                                                                              │
╰─────────────────────────────────────────────────────────────────────────

그런 다음 여러 단계를 거쳐 Cloud SQL MCP를 사용하여 데이터베이스와 사용자를 준비하고 최종적으로 데이터를 마이그레이션합니다. 데이터베이스에서 수행하는 첫 번째 작업 중 하나는 사용자를 IAM 사용자로 추가하고 데이터베이스와 사용자를 만들 수 있는 권한을 부여하는 것입니다. Google Cloud에서 IAM으로 충분한 권한이 있어야 합니다.

다음은 워크플로 중 일부 단계의 예입니다.

예상 출력:

 ✓  execute_sql (Cloud SQL MCP Server MCP Server) {"project":"gleb-test-short-001-486416","instance":"allstrides-db","sqlStatement":"CREATE DATABASE \"allstrides-db\";","database":"postgres"}               │
│                                                                                                                                                                                                              │
│ {                                                                                                                                                                                                            │
│   "messages": [                                                                                                                                                                                              │
│     {                                                                                                                                                                                                        │
│       "message": "Execution complete. 1 result set(s) returned.",                                                                                                                                            │
│       "severity": "INFO"                                                                                                                                                                                     │
│     }                                                                                                                                                                                                        │
│   ],                                                                                                                                                                                                         │
│   "metadata": {                                                                                                                                                                                              │
│     "sqlStatementExecutionTime": "0.075591388s"                                                                                                                                                              │
│   },                                                                                                                                                                                                         │
│   "results": [                                                                                                                                                                                               │
│     {}                                                                                                                                                                                                       │
│   ]                                                                                                                                                                                                          │
│ }                                                                                                                                                                                                            │
│       

3. Cloud Run에 애플리케이션 배포

이제 데이터베이스가 생성되었고 로컬 애플리케이션 데이터가 CloudSQL 데이터베이스로 이전되었습니다. 이제 Cloud Run에 애플리케이션을 배포할 준비가 되었습니다. 배포하는 동안 Google Cloud SDK를 사용하여 Google Cloud에서 이미지를 빌드한 다음 Cloud Run MCP를 사용하여 배포합니다.

Gemini CLI에서 다음 프롬프트를 실행합니다.

Now, when all the data is successfully migrated to our Cloud SQL instance allstrides-db we can migrate our allstrides application to Cloud Run and deploy using my Cloud SQL database. Please put the username and the password for my database user user to Secret Manager to not show openly in Cloud Run.
Let's build the image first and then use MCP to create the Cloud Run service.

실행 중에 API를 확인하고, 보안 비밀 관리자의 데이터를 준비하고, 필요한 보안 비밀을 만듭니다. 또한 PostgreSQL 데이터베이스와 호환되도록 애플리케이션을 업데이트하고 필요한 npm 모듈을 추가합니다.

그런 다음 이미지를 빌드하고 Artifact Registry에 배치한 후 MCP 서비스를 사용하여 애플리케이션을 Cloud Run에 배포합니다.

다음은 Cloud Run MCP를 호출하는 예입니다.

예상 출력:

✦ I will deploy the 'allstrides' service to Cloud Run using the deploy_service_from_image tool. I will configure the environment variables and map the
  database credentials from Secret Manager. Note that the MCP tool's schema does not explicitly expose the Cloud SQL instance attachment parameter, which is
  typically required for the Unix socket connection (/cloudsql/...) to work. I will proceed with the deployment as requested, but if the database connection
  fails due to the missing instance attachment, we may need to use gcloud to update that specific configuration.


╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ Action Required                                                                                                                                    1 of 1 │
│                                                                                                                                                           │
│ ?  deploy_service_from_image (CloudRun MCP Server) {"service":{"invokerIamDisabled":true,"name":"projects/gleb-test-short-001-486416/locations/us-centra... │
│                                                                                                                                                           │
│ MCP Server: CloudRun                                                                                                                                      │
│ Tool: deploy_service_from_image                                                                                                                           │
│ Allow execution of MCP tool "deploy_service_from_image" from server "CloudRun"?                                                                           │
│                                                                                                                                                           │
│ ● 1. Allow once                                                                                                                                           │
│   2. Allow tool for this session                                                                                                                          │
│   3. Allow all server tools for this session                                                                                                              │
│   4. No, suggest changes (esc)                                                                                                                            │
│                                                                                                                                                           │
╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

모든 작업을 완료하는 정확한 경로는 실행마다 다를 수 있습니다. AI 에이전트는 컨텍스트, 명령어 출력, 기타 여러 변수를 기반으로 경로를 선택합니다. 여기서 AI 에이전트 소프트웨어의 강점이 드러납니다. AI 에이전트 소프트웨어는 작업 완료와 성공적인 결과 도출을 위해 반응하고, 접근 방식을 조정하고, 단계를 재시도할 수 있습니다.

이제 allstrides 애플리케이션이 Cloud Run에 배포되어 실행되고 Cloud SQL 데이터베이스에 연결되어야 합니다.

마지막에 표시될 수 있는 내용은 다음과 같습니다.

예상 출력:

✦ The application allstrides has been successfully migrated to Cloud Run and is connected to the Cloud SQL database allstrides-db.

  Deployment Details:


   * Service URL: https://allstrides-812263612774.us-central1.run.app
   * Database: allstrides-db (PostgreSQL)
   * Database User: allstrides (Password updated and stored in Secret Manager)
   * Secrets: db-user and db-pass are mounted as environment variables.
   * Region: us-central1

  Steps Taken:


   1. Database Configuration:
       * Updated the allstrides database user password.
       * Created db-user and db-pass secrets in Google Cloud Secret Manager.
       * Updated database.ts to support PostgreSQL connections via Cloud SQL socket.
   2. Build:
       * Built the container image gcr.io/gleb-test-short-001-486416/allstrides using Cloud Build.
   3. Deployment:
       * Initiated deployment using the MCP deploy_service_from_image tool.
       * Granted the Secret Manager Secret Accessor role to the Cloud Run service account.
       * Attached the Cloud SQL instance connection using gcloud (as the MCP tool currently lacks this specific configuration parameter).


  The application is now serving traffic and successfully connected to the database.

브라우저에서 제공된 URL을 열면 애플리케이션 페이지가 표시됩니다.

d710de5dbee99720.png

모든 이벤트가 표시됩니다.

4ae98d3607718794.png

축하합니다. Gemini CLI와 Google Cloud 원격 MCP 서비스를 사용하여 로컬 애플리케이션을 클라우드로 이동할 수 있었습니다. 배포가 완료되었으므로 모든 리소스를 정리할 수 있습니다.

8. 환경 정리

환경을 정리하는 가장 쉬운 방법은 Gemini CLI에 만든 모든 구성요소를 삭제해 달라고 요청하는 것입니다. 모든 애셋을 컨텍스트에 유지해야 합니다. 하지만 어떤 이유로 로그아웃되었고 저장된 기록이 없는 경우 더 정확하게 Cloud Run 서비스, 이미지, Cloud SQL 인스턴스를 정리하도록 요청할 수 있습니다. 서비스를 삭제하려면 필요한 권한이 있고 gcloud 명령어를 사용할 사용자로 인증해야 합니다.

프롬프트의 예는 다음과 같습니다.

Now, when we've tested the application can you please delete the created Cloud Run service, the image we've built and the Cloud SQL instance we've created in the project. 

삭제 후 원격 MCP 서비스를 사용하여 Cloud Run 서비스 또는 Cloud SQL 인스턴스가 성공적으로 삭제되었는지 확인할 수 있습니다.

Can you please list all Cloud SQL instances in the project and Cloud Run services in the project.

마지막에 다음과 같은 메시지가 표시됩니다.

예상 출력:

✦ There are currently no Cloud SQL instances or Cloud Run services (in us-central1) in the project gleb-test-short-001-486416.

이것으로 실습의 단계를 마칩니다.

9. 축하합니다

축하합니다. Codelab을 완료했습니다.

Google Cloud 학습 과정

학습한 내용

  • Google Cloud 원격 MCP와 함께 작동하도록 Gemini CLI를 구성하는 방법
  • 개발 지식 MCP 사용 방법
  • Cloud SQL MCP를 사용하여 클라우드로 데이터를 마이그레이션하는 방법
  • Cloud Run MCP를 사용하여 클라우드에 애플리케이션을 배포하는 방법
  • Google Cloud Shell에서 Gemini CLI를 사용하는 방법

10. 설문조사

결과:

본 튜토리얼을 어떻게 사용하실 계획인가요?

읽기만 할 계획입니다. 읽은 다음 연습 활동을 완료할 계획입니다.