Gemini CLI 심층 분석

1. 소개

be8ebdfe42ca39ac.png

안녕하세요. 내 이름은 스파키야! 와 주셔서 감사합니다. 오늘 여기에 오기 위해 us-central1의 GKE 클러스터에서 여기까지 왔습니다. 이 Codelab에 오신 것을 환영합니다.

저는 Google Cloud의 데이터 스트림을 통해 평생을 뛰어다니며 모든 것을 보았습니다. 건축가와 엔지니어 여러분이 놀라운 것을 만드는 것을 보았습니다. 하지만 가시덤불에 갇히는 것도 봤어. 무슨 말인지 아시죠? GKE에서 포드를 디버깅할 때 컨텍스트 전환이 느껴집니다. kubectl logs, 노드 상태를 확인하는 GCP 콘솔, 배포된 소스 코드를 살펴보는 IDE, 포드 수명 주기 후크에 관한 공식 Kubernetes 문서가 있는 브라우저 탭 사이를 왔다 갔다 합니다. 점프할 때마다 집중력이 깨집니다.

복잡한 도구도 있습니다. gcloud, kubectl, terraform... 각각 자체 DSL과 수많은 플래그가 있습니다. 이로 인해 지속적으로 문서를 찾아야 합니다. 결국 필요한 데이터를 얻기 위해 --filter--format 플래그가 올바르게 조합된 완벽한 gcloud 명령어를 검색하게 됩니다. 수백만 개의 견과류가 있는 숲에서 특정 견과류를 찾는 것과 같습니다. 반복적인 작업은 말할 것도 없죠. 새 Python 서비스에 동일한 Dockerfilecloudbuild.yaml를 너무 많이 작성해서 코드가 데자뷔를 느낄 정도입니다.

더 나은 방법을 보여드리겠습니다. 숲을 통과하는 비밀스러운 길 이것이 바로 Gemini CLI의 핵심입니다.

Gemini CLI란 무엇인가요?

그럼 제가 그렇게 기대하는 마법 같은 단축키는 무엇일까요?

Gemini CLI는 터미널 내에서 사용할 수 있는 개인 클라우드 도우미라고 생각하면 됩니다. 대화이자 파트너십입니다. 맥락을 인식하므로 단순히 듣는 것이 아니라 이해합니다. 파일을 읽고, 탭을 사용하는지 공백을 사용하는지 등 프로젝트의 규칙을 학습하고, 사용자가 무엇을 하려고 하는지 파악할 수 있습니다. 마치 제가 사용자가 모으려는 도토리를 냄새로 맡을 수 있는 것과 같습니다.

대략적인 아키텍처 (내부 살펴보기)

그렇다면 이 모든 것은 어떻게 작동할까요? 이 기능은 다음과 같은 몇 가지 멋진 기능이 조화롭게 작동하는 것입니다.

  1. 강력한 언어 모델: 이것이 바로 두뇌입니다. 구체적으로 말하면 Google에서 학습시킨 대규모 멀티모달 모델입니다. '멀티모달'은 텍스트뿐만 아니라 코드의 구조의미도 이해한다는 의미입니다. 이를 통해 소프트웨어를 읽을 뿐만 아니라 추론할 수 있습니다.
  2. 지역적 맥락: 매우 중요합니다. Gemini CLI는 사용자 계정과 동일한 권한으로 로컬 머신에서 프로세스로 실행됩니다. 즉, 파일 시스템에 액세스하여 프로젝트별 도움말을 제공할 수 있습니다. 원격 클라우드 서비스에서 코드를 추측하는 것이 아니라 바로 여기에서 코드를 확인합니다.
  3. 도구 생태계: 모델이 세상과 상호작용하는 방식입니다. read_file 또는 run_shell_command과 같이 호출할 수 있는 함수가 명확하게 정의되어 있습니다. 보안 API와 비슷하다고 생각하면 됩니다. 모델은 무엇을 해야 하는지, 어떤 도구를 사용해야 하는지 결정한 다음 이를 실행하기 위한 tool_code 블록을 생성합니다. 따라서 동작을 예측할 수 있고 신뢰할 수 있습니다.
  4. 셸 명령어 실행: 이것이 진정한 마법입니다. bash -c <command> 하위 셸에서 명령어를 실행할 수 있습니다. stdout, stderr, exit code를 캡처합니다. 정말 대단합니다. 즉, Gemini CLI가 명령어를 실행하고, 실패했는지 확인한 다음, 오류 메시지에 따라 문제를 해결하려고 시도할 수 있습니다.
  5. 안전망: 제가 가장 좋아하는 부분입니다. tool_code 블록이 실행되기 전에 CLI 클라이언트에 exact 명령어 또는 코드가 표시되고 확인을 요청합니다. 클라이언트 측 검사이므로 시스템에 영향을 미치기 전에 최종 결정을 내릴 수 있습니다. 언제나 내가 주도권을 쥐고 있습니다.

단순한 챗봇이 아니라 실행자입니다. 코딩 여정의 활성 도우미

핵심 개념: 선언적 vs 명령적

가장 크고 멋진 변화는 컴퓨터에 작업을 수행하는 방법을 알려주는 것에서 원하는 결과를 알려주는 것으로 바뀌었다는 점입니다.

  • 명령형 (오래되고 까다로운 방법): 모든 단계를 제공해야 합니다. 도구의 특정 도메인 언어에 능숙해야 합니다. 다음과 같은 복잡한 명령어의 경우
    gcloud compute instances create my-vm --project=my-project --zone=us-central1-a --machine-type=e2-medium --image-family=debian-11 --image-project=debian-cloud --metadata-from-file startup-script=./startup.sh --tags=http-server,dev
    
    
    죄송합니다. 이것 좀 보세요! 머신 유형, 이미지 계열, 메타데이터, 태그의 구문을 알아야 합니다. 한 부분을 놓치면 이해하기 어려운 오류가 발생합니다.
  • 선언적 (스파키 바로가기): 원하는 내용을 영어로 말하기만 하면 됩니다.

Create a new e2-medium VM for my web server in us-central1, run the startup.sh script, and tag it for http traffic.

작업이 끝났습니다. Gemini는 요청을 파싱하고, gcloud 도구의 매개변수에 매핑하고, 각 플래그의 올바른 구문을 파악하고, 크고 무서운 명령어를 빌드합니다. 그런 다음 승인을 위해 사용자에게 표시합니다. 명령줄 플래그를 암기하는 대신 큰 그림을 그릴 수 있도록 지원하는 것이 목표입니다.

Gemini의 성능 확장: CLI 확장 프로그램 소개

Gemini CLI는 기본적으로 강력한 도구이지만 확장 프로그램을 통해 진정한 잠재력을 발휘할 수 있습니다. 확장 프로그램은 프롬프트, 도구, 맞춤 명령어의 번들로, CLI의 기능을 향상하여 특정 요구사항과 워크플로에 맞게 맞춤설정할 수 있습니다.

확장 프로그램 찾기 및 설치

Gemini CLI에는 Google과 서드 파티 개발자가 빌드한 확장 프로그램 생태계가 계속해서 성장하고 있습니다. geminicli.com/extensions에서 공식 확장 프로그램 디렉터리를 둘러볼 수 있습니다.

확장 프로그램을 설치하려면 확장 프로그램의 Git 저장소 URL과 함께 gemini extensions install 명령어를 사용하면 됩니다. 예를 들어 공식 PostgreSQL용 Cloud SQL 확장 프로그램을 설치하려면 다음을 실행합니다.

gemini extensions install https://github.com/gemini-cli-extensions/cloud-sql-postgresql

좋아, 이제 그만 얘기하자. 이제 실제로 이 기능을 사용해 보겠습니다.

2. 시작하기 전에

86dffda616ab7a1d.png

미래의 클라우드 마법사 여러분, 안녕하세요! 스파키입니다. 멋진 모험을 시작하기 전에 워크숍 환경이 준비되어 있어야 합니다. 숲으로 향하기 전에 적절한 도구와 마법의 도토리를 가방에 넣는 것과 같습니다. 저를 따라오세요.

Google Cloud 프로젝트가 이미 있는 경우 Gemini CLI가 사전 설치되어 있으므로 Google Cloud Shell 내에서 Gemini CLI를 사용할 수 있습니다. 또는 다음 단계에 따라 로컬 머신에 설정하세요.

1단계: 필수 사항 (기본 요건)

모든 모험가에게는 견고한 기반이 필요합니다. Gemini CLI를 설치하려면 로컬 머신에 몇 가지 항목이 이미 설정되어 있어야 합니다.

  1. Google Cloud SDK (gcloud): Google Cloud의 기본 툴킷입니다. Gemini CLI도 이 제품군에 속합니다.
  • 설치 여부 확인: gcloud --version을 실행합니다. 버전 번호가 표시되면 계속 진행하면 됩니다.
  • 설치되지 않은 경우: cloud.google.com/sdk/docs/install의 공식 안내를 따릅니다.
  1. Git: 실습 저장소를 클론하는 데 필요합니다.
  • 설치 여부 확인: git --version을 실행합니다.
  • 설치되지 않은 경우: git-scm.com/downloads에서 다운로드할 수 있습니다.
  1. GCP 프로젝트 및 인증:
  • 결제가 사용 설정된 Google Cloud 프로젝트가 있어야 합니다. 이 점은 매우 중요합니다.
  • 다음 명령어를 실행하여 Google 계정에 로그인합니다.
gcloud auth login
  • 세션의 프로젝트를 설정합니다. GCP 콘솔에서 프로젝트 ID를 찾아 다음을 실행합니다.
gcloud config set project YOUR_PROJECT_ID

(YOUR_PROJECT_ID를 실제 프로젝트 ID로 바꾸세요.)

  1. Node.js 버전 20 이상

2단계: 마법을 사용하세요. (Gemini CLI 설치)

기본 사항을 모두 살펴봤으니 이제 메인 이벤트를 시작할 시간입니다. Gemini CLI를 설치합니다.

npx로 즉시 실행

# Using npx (no installation required)
npx https://github.com/google-gemini/gemini-cli

npm으로 전역 설치

npm install -g @google/gemini-cli

Homebrew를 사용하여 전역적으로 설치 (macOS/Linux)

brew install gemini-cli

Gemini 버전 확인

gemini --version

버전 번호가 표시됩니다. 이렇게 하면 설치가 성공했음을 확인할 수 있습니다.

3단계: 전원 켜기 (구성)

이제 Gemini CLI가 설치되었으므로 Gemini CLI에 액세스 권한을 부여해야 합니다. 먼저 터미널에서 gemini 명령어를 실행하여 실행합니다. 다음 화면이 표시됩니다.

9378d804bc647191.png

간단하게 Google 계정으로 인증하면 API 키를 관리하지 않아도 1백만 토큰 컨텍스트 윈도우, 최대 60개의 요청/분, 1,000개의 요청/일이 제공되는 Gemini 2.5 Pro에 액세스할 수 있습니다.

특정 Gemini 모델에 액세스하거나 필요할 때 더 높은 한도로 업그레이드하려면 Gemini API 키를 인증 방법으로 사용하세요.

이미 Google 프로젝트와 결제 계정이 설정된 엔터프라이즈 팀과 프로덕션 워크로드의 경우 Vertex AI를 사용하여 고급 보안 및 규정 준수를 확보하세요.

선택한 옵션에 따라 인증을 구성하는 다음 단계가 표시됩니다. 이러한 옵션에 대한 자세한 내용은 Gemini CLI 문서를 참고하세요.

Google Cloud의 Vertex AI 플랫폼을 사용하려면 먼저 ctrl+c를 두 번 눌러 Gemini CLI를 종료하고 필수 환경 변수를 설정하세요.

인증 방법에 관계없이 일반적으로 GOOGLE_CLOUD_PROJECT 및 GOOGLE_CLOUD_LOCATION 변수를 설정해야 합니다.

이러한 변수를 설정하려면 다음 단계를 따르세요.

# Replace with your project ID and desired location (e.g., us-central1)
export GOOGLE_CLOUD_PROJECT="YOUR_PROJECT_ID"
export GOOGLE_CLOUD_LOCATION="YOUR_PROJECT_LOCATION"

이제 Google Cloud에 로그인합니다.

gcloud auth application-default login

이전 방법으로 인증한 후 터미널에서 gemini 명령어를 실행하여 Gemini CLI를 다시 실행합니다. 인증 옵션에서 Vertex AI를 선택하면 설정이 완료됩니다.

4단계: 스파크 테스트 (설정 확인)

이제 진실을 밝힐 시간입니다. 모든 것이 작동하는지 확인해 보겠습니다. 다음 명령어를 실행하여 모든 표시등이 녹색인지 확인합니다.

  1. 다음 프롬프트를 입력합니다.
What is my current directory?

Gemini CLI는 현재 작업 디렉터리를 알려주는 방식으로 응답해야 합니다. 이는 핵심 언어 모델과 셸 통합을 테스트합니다.

15a12d7b3fdd2d83.png

  1. GCP 연결 테스트:
list my gcs buckets

GCS 버킷이 있으면 목록에 표시됩니다. 그렇지 않으면 없다고 알려줍니다. 이렇게 하면 GCP 프로젝트에 올바르게 연결되었는지 확인할 수 있습니다.

5단계: 더 많은 슈퍼파워 부여하기 (확장 프로그램 설치)

이제 실습 후반부에서 유용하게 사용할 수 있는 확장 프로그램을 몇 개 설치하여 Gemini CLI의 기능을 강화해 보겠습니다.

Cloud Run

gemini extensions install https://github.com/GoogleCloudPlatform/cloud-run-mcp

Gemini CLI 보안

gemini extensions install https://github.com/gemini-cli-extensions/security

gcloud

gemini extensions install https://github.com/gemini-cli-extensions/gcloud

PostgreSQL용 Cloud SQL

gemini extensions install https://github.com/gemini-cli-extensions/cloud-sql-postgresql

이 모든 명령어가 작동했다면 워크숍을 위한 준비가 다 되었습니다. 환경이 설정되었으며 생산성을 높일 준비가 되었습니다. 첫 번째 실습에서 뵙겠습니다.

3. 핵심 개념 및 로컬 워크스페이스 상호작용

a7bf3a905d8e2638.png

좋아요, 발을 더럽힐 준비가 되셨나요? 이제 새로운 Gemini 도구 모음의 실제 도구를 살펴보겠습니다. 클라우드에서 탐색하고 빌드할 수 있는 초능력이라고 생각합니다. 이러한 기능이 어떻게 작동하는지 자세히 알아보겠습니다.

주요 기능

저는 제 능력을 두 가지로 분류합니다. 하나는 세상에 무엇이 있는지 확인하는 것이고, 다른 하나는 실제로 일을 하는 것입니다.

환경 이해하기 (내 초능력!)

새 둥지를 짓기 전에 나무를 확인해야 하죠? 이러한 도구는 지형을 파악하는 데 사용됩니다.

  • list_directory: 기본 '둘러보기' 도구입니다. 표준 OS 수준 디렉터리 목록의 간단한 래퍼입니다. 하지만 멋진 점은 모델이 이 구조화된 출력을 파싱하여 src라는 하위 디렉터리를 탐색하는 것과 같은 결정을 내릴 수 있다는 것입니다.
  • glob: 이건 내 '도토리 찾기'야. .gitignore과 같은 항목에서 이미 알고 있는 표준 glob 패턴(예: *, **, ?, [])을 사용합니다. 따라서 app/**/*.py 패턴을 사용하여 'app 디렉터리에서 모든 *.py 파일을 찾아줘'라고 요청할 수 있습니다. 모델이 분석할 특정 파일 집합을 수집하는 강력한 방법입니다.
  • search_file_content: 엑스레이 시력입니다. 단순한 문자열 일치뿐만 아니라 전체 정규 표현식 (regex)을 사용하여 검색합니다. 이는 매우 강력한 기능입니다. 'POST 메서드를 사용하는 모든 Flask 경로를 찾아줘'와 같은 복잡한 패턴을 찾도록 요청할 수 있으며, 이 경우 app\.route\(.*methods=\['POST'\].*\)와 같은 정규식이 생성될 수 있습니다. 파일 경로, 줄 번호, 일치하는 줄을 반환하여 모델에 필요한 모든 컨텍스트를 제공합니다.
  • read_file: 흥미로운 파일을 찾았다면 열어봐야 합니다. read_file는 이 용도에 최적화되어 있습니다. 전체 파일을 읽을 수도 있고, 큰 파일의 경우 offsetlimit 매개변수를 사용하여 청크 단위로 읽을 수도 있습니다. 즉, 모델이 시간 초과 없이 큰 로그 파일도 효율적으로 스캔할 수 있습니다.

이해에서 행동으로 (구축할 시간!)

지형을 살펴봤습니다. 이제 둥지를 만들 차례입니다. 이러한 도구를 사용하면 변경사항을 적용하고 작업을 완료할 수 있습니다.

  • **write_file**: 처음부터 새 파일을 만들어야 하나요? write_file는 지정된 경로에 제공된 전체 콘텐츠를 쓰는 원자 작업입니다. 새 모듈을 스캐폴딩하거나 프로젝트의 요구사항에 따라 처음부터 Dockerfile를 만드는 데 적합합니다.
  • **replace**: 이 도구는 세부적인 변경사항을 위한 것입니다. 단순한 찾기 및 바꾸기가 아닙니다. old_stringnew_string를 제공합니다. 안전하게 작동하려면 old_string가 파일의 고유한 스니펫이어야 하며, 일반적으로 변경하는 부분의 앞뒤에 여러 줄의 컨텍스트가 있어야 합니다. 이렇게 하면 의도한 exact 코드 부분만 변경할 수 있습니다.
  • **run_shell_command**: 최고의 파워업입니다. bash -c <command> 하위 셸에서 지정된 명령어를 실행합니다. 모델이 stdout, stderr, exit code를 다시 가져옵니다. 이는 워크플로를 빌드하는 데 매우 중요합니다. 모델은 terraform plan를 실행하고 출력을 읽을 수 있으며, 계획이 성공하면 (종료 코드 0) 이를 적용할지 물어볼 수 있습니다.

안전망 (내 약속)

명령어를 실행하는 것은 무서울 수 있습니다. 알겠습니다. 그래서 안전망이 중요한 것입니다. 모델이 run_shell_command 또는 write_file 호출이 포함된 tool_code 블록을 생성하면 Gemini CLI 클라이언트가 이를 가로챕니다. 정확한 명령어 또는 작성할 파일의 전체 콘텐츠를 표시하고 [y/n] 프롬프트를 제공합니다. 명시적 승인 없이는 아무 일도 일어나지 않습니다. 언제나 내가 주도권을 쥐고 통제할 수 있습니다.

4. 프로젝트 탐색

314faf951de66388.png

목표: 터미널을 종료하지 않고 Gemini CLI를 사용하여 익숙하지 않은 코드베이스를 이해합니다.

시나리오: 신규 개발자로서 이 프로젝트를 빠르게 파악해야 합니다.

작업 0: 설정 - 프로젝트 클론

가장 먼저 코드를 가져와야 합니다. GitHub의 공개 저장소에 숨겨져 있으며 quickpoll라는'트리'에 있습니다. Gemini CLI에 클론해 달라고 요청해 보겠습니다. 그 전에 작업 디렉터리를 만들고 작업 디렉터리 내에서 Gemini CLI를 실행해 보겠습니다.

mkdir workdir
cd workdir
gemini

이제 다음 프롬프트를 입력합니다.

clone the github repository from the URL: https://github.com/gauravkakad-google/quickpoll.git

46c2feb0d1184db7.png

Gemini는 '복제'가 git clone 명령어를 사용하는 것을 의미한다고 이해합니다. git clone https://github.com/gauravkakad-google/quickpoll.git과 같은 내용으로 run_shell_command 도구 호출이 생성됩니다. 승인하면 저장소가 다운로드됩니다.

이제 ctrl+c를 두 번 눌러 Gemini CLI를 종료하고 샘플 저장소로 이동하여 Gemini CLI를 다시 실행합니다.

cd quickpoll
gemini

좋습니다. 이제 프로젝트 트리 내부에 있으므로 탐색을 시작할 수 있습니다.

작업 1: 프로젝트의 모든 파일 나열

이제 숲에 들어왔으니 숲 전체를 탐색해 보겠습니다. 모든 파일을 확인하고 싶습니다. Gemini에게 다음과 같이 물어보세요.

List all the files in the project.

Gemini는 **/* 패턴과 함께 glob 도구를 사용할 가능성이 높습니다. 이렇게 하면 모든 파일이 재귀적으로 나열되어 코드베이스의 전체 매니페스트가 제공됩니다. 프로젝트의 구조를 이해하는 데 도움이 되는 첫 번째 단계입니다.

작업 2: 'google.cloud.sql.connector'를 가져오는 모든 파일 찾기

좋아요. 궁금한 게 있습니다. 이 프로젝트는 어디에서 Google Cloud Storage와 통신하나요? 탐정 작업을 해 보겠습니다. 다음과 같이 질문하세요.

Find all files that import the 'google.cloud.sql.connector' library.

568fdb8ff4889c5d.png

search_file_content 기능을 사용하여 Gemini는 해당 가져오기 문이 포함된 정확한 파일을 찾습니다. 이렇게 하면 Cloud SQL 상호작용을 처리하는 코드 부분에 즉시 집중할 수 있습니다. 이 프로젝트에서 backend/main.py를 찾아야 합니다.

작업 3: 기본 Dockerfile의 콘텐츠를 보여 줘

Dockerfile이(가) 보입니다. 이것이 컨테이너의 청사진입니다. 내부를 살펴보겠습니다. 다음과 같이 질문하세요.

Show me the contents of the main Dockerfile.

e49a83b3efbcf807.png

Gemini는 read_file를 사용하여 Dockerfile을 표시합니다. 기본 이미지 (FROM), 설치되는 종속 항목 (RUN pip install...), 최종 명령어 (CMD)를 분석할 수 있습니다. 이를 통해 애플리케이션의 런타임 환경을 알 수 있습니다.

작업 4: main.py 파일의 목적은 무엇인가요?

이제 코드의 핵심을 살펴보겠습니다. Gemini에게 가이드 역할을 해 달라고 요청해 보겠습니다. 다음과 같이 말합니다.

What's the purpose of the `main.py` file?

81d480c285285150.png

이때 Gemini CLI가 진가를 발휘합니다. 먼저 backend/main.py에서 read_file를 호출합니다. 그런 다음 멀티모달 언어 모델이 Python 코드를 분석합니다. 폴링 애플리케이션을 위한 REST API를 제공하는 FastAPI 애플리케이션임을 식별합니다. 그런 다음 API 엔드포인트와 그 기능을 설명합니다. 이 기능을 사용하면 모든 내용을 직접 읽고 해독하는 시간을 절약할 수 있습니다. 후속 질문을 통해 이러한 기능을 자세히 설명할 수도 있습니다. 정말 멋지죠? 지금 바로 사용해 보세요.

5. 로컬에서 라이브로! Cloud Run 및 Cloud SQL로 배포

db708c2edf0036a9.png

좋습니다. 클라우드 모험가님, 이제 영역을 정찰했습니다. 이제 클라우드에 나만의 트리하우스를 빌드할 시간입니다. 빠른 설문조사 애플리케이션을 가져와 누구나 방문할 수 있는 실제 라이브 웹 앱으로 만들 것입니다.

목표: PostgreSQL용 Cloud SQL 백엔드를 사용하여 quickpoll 애플리케이션을 Cloud Run에 배포합니다.

작업 1: 데이터의 튼튼한 가지 (Cloud SQL 설정)

모든 좋은 애플리케이션에는 소중한 도토리를 저장할 장소가 필요합니다. 데이터 말이야. PostgreSQL용 Cloud SQL을 사용합니다. 데이터베이스를 위한 마법의 자동 관리 정원과 같아서 재미있는 일에 집중할 수 있습니다.

Gemini CLI에 데이터베이스의 시드를 심어 달라고 요청해 보겠습니다.

Please create a new Cloud SQL for PostgreSQL instance for me in project <myproject>. Call it quickpoll-db and put it in us-central1. Lets use the Development preset for now, and make the root password a-very-secure-password!.

6c09e8e548efe217.png

Cloud SQL 확장 프로그램을 사용하는 Gemini CLI가 작업을 시작합니다. create_instance 도구 호출이 표시됩니다. 승인해 주세요.

인스턴스가 생성되면 다음과 비슷한 출력이 표시됩니다.

1378c05137bf9260.png

Gemini CLI가 이러한 변수에 액세스할 수 있도록 위의 환경 변수로 .env 파일을 만들고 Gemini CLI를 다시 시작하기 전에 소싱하면 됩니다.

인스턴스가 성장하는 동안 흙을 준비해 보겠습니다. 앱에 데이터베이스와 사용자가 필요합니다.

In the quickpoll-db instance, create a new database named quickpolldb.

Gemini CLI는 PostgreSQL용 Cloud SQL 확장 프로그램의 create_database 도구를 사용하여 데이터베이스를 만듭니다.

3a0ffbf97fbc35cc.png

이제 이를 관리할 사용자를 추가해 보겠습니다.

In the quickpoll-db instance, create a built in user named quickpoll-user with the password another-secure-password!.

이번에는 Gemini CLI가 create_user 도구를 사용합니다.

562db72ed9a59d4a.png

작업 2: 비밀 경로 (백엔드 연결)

백엔드에서 새 데이터베이스의 비밀 경로를 알아야 합니다. backend/main.py를 살펴보고 어떻게 경로를 찾는지 알아보겠습니다.

show me how would the backend/main.py connect to the database

6592c52d634253ce.png

아하! 보이시나요? Cloud SQL Python 커넥터를 사용하고 CLOUD_SQL_POSTGRES_INSTANCE, CLOUD_SQL_POSTGRES_USER, CLOUD_SQL_POSTGRES_PASSWORD, CLOUD_SQL_POSTGRES_DATABASE와 같은 환경 변수를 찾습니다. 이러한 값을 Cloud Run 서비스에 제공해야 합니다.

먼저 CLOUD_SQL_POSTGRES_INSTANCE가 필요합니다. 비밀 악수와 같습니다.

What are the details for the Cloud SQL instance quickpoll-db in us-central1?

aa539ea8798aad71.png

다양한 세부정보가 표시됩니다. 연결 이름을 찾아 해당 값을 복사합니다. your-project-id:us-central1:quickpoll-db와 같이 표시됩니다.

이제 애플리케이션을 Cloud Run에 배포하기 전에 필요한 테이블로 데이터베이스를 인스턴스화하겠습니다. 별도의 데이터베이스와 사용자를 만들었으므로 Gemini CLI를 종료하고 이전에 만든 .env를 새 값으로 업데이트합니다.

export CLOUD_SQL_POSTGRES_USER=quickpoll-user
export CLOUD_SQL_POSTGRES_PASSWORD=password-you-provided
export CLOUD_SQL_POSTGRES_DATABASE=quickpolldb

이제 Gemini CLI를 다시 시작하고 다음을 입력합니다.

execute backend/database.sql file on quickpolldb database as quickpolluser in quickpoll-db instance

5201cbf678dd3fc9.png

이 도구는 execute_sql 도구가 단일 호출에서 여러 SQL 명령어 실행을 지원하지 않는다는 것을 자동으로 파악했습니다. 따라서 각 SQL 명령어를 별도로 실행했습니다.

작업 3: 백엔드, 이륙 준비 (Cloud Run에 배포)

이제 백엔드가 둥지를 떠날 시간입니다. Gemini에게 백엔드 폴더를 Cloud Run에 배포하고 데이터베이스의 보안 비밀 경로를 제공하도록 요청합니다.

Deploy the backend folder to a new Cloud Run service called quickpoll-be in us-central1. Here are the secrets (environment variables):
CLOUD_SQL_POSTGRES_INSTANCE=your-project-id:us-central1:quickpoll-db
CLOUD_SQL_POSTGRES_USER=quickpoll-user
CLOUD_SQL_POSTGRES_PASSWORD=password-you-provided
CLOUD_SQL_POSTGRES_DATABASE=quickpolldb

Gemini가 코드를 패키징하고 컨테이너 이미지를 만들어 Cloud Run에 배포합니다. 몇 분 정도 걸릴 수 있는 작업이 완료되면 새 백엔드 서비스의 URL이 표시됩니다. 이 URL을 잘 보관하세요.

f3330321e52c98e9.png

작업 4: 마무리 작업 (프런트엔드 구성 및 배포)

프런트엔드는 애플리케이션의 친근한 얼굴과 같습니다. 백엔드를 찾을 위치를 알아야 합니다. 어디로 가야 하는지 알려주세요.

Deploy the frontend folder to a new Cloud Run service called quickpoll-fe in us-central1. Here are the secrets (environment variables):
BACKEND_URL=backend-url

a80fe48e54b47c4.jpeg

작업 5: 대공개

이제 됐습니다. 진실의 순간입니다. quickpoll-fe 서비스의 URL을 가져와 웹브라우저에서 엽니다.

QuickPoll 애플리케이션이 라이브로 표시되고 사용할 준비가 되어 있습니다. 설문조사를 만들고, 투표하고, 결과가 실시간으로 업데이트되는 것을 확인해 보세요.

축하합니다. 로컬 머신에서 프로젝트를 가져와 Google Cloud에서 실행했습니다. 이 모든 작업을 터미널에서 믿음직한 조력자인 Gemini CLI를 사용하여 수행했습니다.

이것이 바로 생산성입니다.

6. 개발자용 - 개발 수명 주기 가속화

8feb670e686f4038.png

자, 개발자 여러분, 지금부터가 정말 재미있는 부분입니다. 프로젝트를 살펴봤으니 이제 빌드할 차례입니다. Gemini가 최고의 코딩 파트너가 되어 간단한 아이디어를 다람쥐가 도토리를 찾는 것보다 빠르게 프로덕션에 사용할 수 있는 코드로 전환하는 방법을 보여드리겠습니다.

아이디어에서 코드까지

일반적인 개발 주기를 생각해 보세요. 코드를 작성하는 것만이 전부가 아니죠? 스캐폴딩, 오류 처리 추가, 리팩터링, 테스트 작성 등의 작업을 합니다. Gemini가 이 모든 것을 도와드릴 수 있습니다.

상용구 및 반복 작업: 더 이상 복사 붙여넣기하지 마세요

기본 애플리케이션 기능이 준비되었습니다. 이제 로깅을 추가하고 잠재적인 오류를 처리해야 하죠? 일반적으로 반복되는 try...except 블록이 많습니다. 이제는 아닙니다. 먼저 Gemini CLI에 코드를 분석하고 오류 로깅 및 예외 처리에 관한 권장사항을 제안해 달라고 요청해 보겠습니다.

What are the best practices for error handling and logging that should also be included in this application?

3a132d7bbf57bf67.png

Gemini CLI가 기존 파일을 분석하고 몇 가지 권장사항을 제공합니다. 직접 조사하는 시간을 절약해 주는 전문가 어시스턴트라고 생각하면 됩니다.

이제 이러한 추천을 구현해 달라고 요청해 보겠습니다.

please go ahead and implement these in the existing app

실제 출력은 다를 수 있지만 결국 변경사항의 세부정보가 표시됩니다. 예를 들어 아래 스크린샷에서 JSON 형식 로그를 생성하기 위해 structlog가 추가되었고, 중앙 집중식 예외 처리가 구현되었으며, 요청 응답이 로깅되는 방식이 개선되었음을 확인할 수 있습니다. 입력한 모든 내용을 저장해 보세요.

7fcd0153f88740ce.png

리팩터링: 개인 코드 검토자

우리 모두 깔끔하고 효율적인 코드를 작성하고 싶어 합니다. 하지만 때로는 급할 때도 있습니다. Gemini는 개인 코드 검토자 역할을 할 수 있습니다. 다음과 같은 질문을 할 수 있습니다.

please perform a comprehensive code review for best practices and security

e5482012a524210e.png

32039b0638d1efd.png

Gemini는 언어별 권장사항을 이해합니다. 위 스크린샷의 실제 출력은 다를 수 있지만 출력을 읽으면 Gemini CLI가 코드를 분석하기 위해 얼마나 자세한 수준으로 작업했는지 알 수 있습니다. 코드를 배우고 개선하는 데 도움이 됩니다.

테스트 생성: 가장 좋은 부분

제가 가장 좋아하는 트릭입니다. 테스트를 작성해야 한다는 것은 누구나 알고 있지만, 특히 모의 객체를 만들어야 하는 경우에는 지루할 수 있습니다. 자, 같이 확인해 보시죠. 다음과 같이 질문하면 됩니다.

Add a test suite to this application

d7475f5ca8c9d99d.png

ac55b84b842187b.png

3653819afe847cf3.png

Gemini가 함수를 분석하고, 입력과 출력을 식별하고, 종속 항목을 파악합니다. 그런 다음 '해피 패스'와 오류 조건을 포함한 여러 테스트 사례가 있는 완전한 test_main.py 파일을 생성합니다. 생산성을 크게 높일 수 있습니다.

테스트 실행 (도전 과제)

이제 정말 흥미로운 부분이 나옵니다. 이 부분은 직접 탐색해 보실 수 있도록 남겨두겠습니다. Gemini CLI에 생성된 테스트 사례를 실행하라고 요청할 수 있습니다. 그런 다음 편안히 앉아 마법이 펼쳐지는 과정을 지켜보세요.

7. 로컬호스트를 넘어 GitHub와 통합하기

d2664a4c173f1d6.png

로컬 머신, 즉 숲의 작은 구석에서 멋진 작업을 했습니다. 하지만 클라우드의 진정한 힘은 공동작업과 연결에 있습니다. 이제 개발자 숲에서 가장 큰 나무인 GitHub를 시작으로 Gemini가 더 넓은 세상과 어떻게 상호작용할 수 있는지 알아볼 시간입니다.

개념: 통합 DevOps 어시스턴트

지금까지는 Gemini를 로컬 코딩 도우미로 사용했습니다. 이제 이를 본격적인 통합 DevOps 어시스턴트로 업그레이드할 예정입니다. 이 모든 것은 모델 컨텍스트 프로토콜 (MCP) 통합 덕분입니다. 멋진 이름이지만 Gemini가 사용자를 대신하여 다른 서비스와 안전하게 대화할 수 있다는 의미입니다. 가장 먼저 마스터할 서비스는 GitHub입니다.

생각해 보세요. GitHub에서 pull 요청을 확인하거나, 문제를 만들거나, 저장소를 탐색하기 위해 터미널을 얼마나 자주 나가야 하나요? 컨텍스트 전환이 더 많아집니다. github 도구 세트를 사용하면 이 모든 작업을 여기에서 바로 할 수 있습니다. Gemini를 GitHub의 기본 인터페이스로 전환합니다.

공식 GitHub MCP 서버 문서에서는 노출된 도구와 구성 옵션에 관한 충분한 안내를 제공합니다. Gemini CLI는 원격 MCP 서버를 모두 완벽하게 지원하므로 로컬 또는 원격 작업을 자유롭게 선택할 수 있습니다.

이 튜토리얼에서는 GitHub용 원격 MCP 서버 옵션을 설정하는 방법을 안내합니다. 먼저 GitHub의 개인 액세스 토큰 (PAT)이 필요합니다.

PAT를 얻었으면 이제 settings.json 파일에 MCP 서버 객체를 추가할 차례입니다. 완전한 settings.json은 아래에 표시되어 있지만 mcpServers 객체가 여기에 표시된 내용과 일치하는지 확인하면 됩니다.

{
  "security": {
    "auth": {
      "selectedType": "vertex-ai"
    }
  },
 "mcpServers": {
    "github": {
      "httpUrl": "https://api.githubcopilot.com/mcp/",
      "headers": {
        "Authorization": "GITHUB_PAT"
      },
      "timeout": 5000
    }
  }
}

GitHub MCP 서버 구성으로 settings.json을 업데이트한 후 Gemini CLI를 다시 시작하거나 /mcp 새로고침 명령어를 실행하면 됩니다. 아래 스크린샷은 내 시스템에서 준비된 GitHub MCP 서버를 보여주며, Gemini CLI가 모델 컨텍스트 프로토콜을 사용하여 사용할 수 있는 다양한 강력한 도구를 보여줍니다.

cf9cab5f70ca1fc2.png

주요 명령어 표시

Gemini에는 GitHub를 위한 완전히 새로운 초능력이 제공됩니다. 다음은 제가 좋아하는 몇 가지입니다.

  • github.list_repositories: 브라우저를 열지 않고 조직의 모든 저장소를 확인하고 싶으신가요? 이 도구를 사용하세요. '우리 조직의 모든 저장소를 나열해 줘'라고 요청하면 됩니다.
  • github.create_issue: 버그를 발견하셨나요? 문제를 만들기 위해 창을 전환하지 마세요. Gemini에게 'sample-flask-app 저장소에 '로그인 버그 수정'이라는 제목으로 이 설명과 함께 문제를 만들어 줘'라고 말하면 짜잔, 문제가 생성됩니다.
  • github.get_pull_request: PR을 확인해야 하나요? 'sample-flask-app 저장소에서 PR 번호 42의 세부정보를 보여 줘'라고 요청할 수 있습니다. Gemini가 제목, 설명, 상태, 검토자를 가져옵니다.
  • github.get_file_contents: 정말 멋지네요. 먼저 클론하지 않고도 원격 저장소에서 파일을 읽을 수 있습니다. 로컬에 없는 프로젝트의 구성 파일이나 README를 빠르게 확인하는 데 유용합니다.

8. GitHub 탐색

7e66f28519488019.png

이제 그만 이야기하고 날아 볼까요? 새로운 GitHub 기능을 사용하여 터미널에서 조직과 프로젝트를 살펴볼 것입니다.

목표: Gemini를 사용하여 GitHub에 호스팅된 프로젝트를 살펴보고 이해합니다.

시나리오: 이전에 작업한 적이 없는 GitHub 프로젝트에 익숙해져야 합니다.

작업 1: 조직의 저장소 나열

먼저 GitHub 조직의 모든 프로젝트를 살펴보겠습니다. 이 실습에서는 자체 GitHub 사용자 이름 또는 소속된 조직을 사용할 수 있습니다. Gemini에게 목록을 작성해 달라고 요청해 보겠습니다.

List the repositories in the `[your-org-or-username]` GitHub organization.

([your-org-or-username]를 실제 정보로 바꿔야 합니다.) Gemini가 github.list_repositories 도구를 사용하여 모든 프로젝트 목록을 표시합니다. 좋습니다.

작업 2: 특정 저장소 찾기

저장소 목록이 표시됩니다. 이제 실제 개발자처럼 목록을 스캔하여 관심 있는 프로젝트를 찾아야 합니다. 실습에서는 이전에 클론한 quickpoll 저장소를 찾는다고 가정해 보겠습니다. 이 부분에는 명령어가 필요하지 않습니다. 마지막 단계의 출력을 읽고 저장소를 찾기만 하면 됩니다.

작업 3: 활성 pull 요청 나열

이제 타겟 저장소를 확인했으므로 저장소에서 어떤 일이 발생하는지 살펴보겠습니다. 열려 있는 풀 요청이 있나요? 다음과 같이 질문해 보세요.

List the open pull requests for the `quickpoll` repository in the `[your-org-or-username]` organization.

Gemini는 github.list_pull_requests 도구를 사용하여 open 상태를 필터링합니다. 그러면 열려 있는 PR이 나열되고 PR 번호, 제목, 작성자가 표시됩니다. 프로젝트의 활성 개발을 즉시 확인할 수 있습니다. 활발하게 기여하고 있는 저장소에서 이 기능을 사용해 보고 결과를 확인할 수 있습니다.

38aecd94347e633c.png

작업 4: 풀 요청 조사

목록에 흥미로운 PR이 있다고 가정해 보겠습니다. 자세한 내용을 알려주세요. 설명과 변경된 파일을 확인하고 싶습니다. 목록에서 PR 번호를 선택합니다 (없는 경우 건너뛰어도 되지만 있다고 가정해 보겠습니다).

Show me the details and files changed in PR number 1 in the `quickpoll` repo.

Gemini의 다단계 작업의 좋은 예입니다. 먼저 github.get_pull_request를 사용하여 제목, 본문, 작성자 등 기본 세부정보를 가져옵니다. 그런 다음 두 번째 도구인 github.get_pull_request_files를 사용하여 파일 변경사항을 가져옵니다. 그런 다음 이 모든 정보를 결합하여 깔끔한 요약을 제공합니다. 터미널을 나가지 않고 PR을 검토했습니다. 정말 놀랍지 않나요?

9. PRD에서 초기 커밋까지

bbaad74efa344d07.png

탐색, 빌드, 테스트 방법을 배웠습니다. 이제 실제 시나리오에서 이 모든 것을 종합해 보겠습니다. 이 단계에서 계획이 제품으로 전환됩니다. 제품 요구사항 문서 (PRD)부터 첫 번째 커밋까지 진행합니다. 멋진 콘텐츠를 만들어 보세요.

목표: 로컬 및 원격 컨텍스트를 결합하여 실제 개발 작업을 처음부터 끝까지 시뮬레이션합니다.

시나리오: 새로운 기능이 할당되었습니다. 요구사항은 프로젝트의 GitHub 저장소 내 PRD 파일에 있습니다.

작업 1: 이해 - PRD 읽기

가장 중요한 단계입니다. 코드를 한 줄이라도 작성하기 전에 계획을 파악해야 합니다. 새 기능의 요구사항은 prd/NEW_FEATURE.md 파일에 있습니다. 열어서 안에 뭐가 있는지 확인해 보겠습니다.

explain the requirements mentioned in prd/NEW_FEATURE.md

Gemini CLI는 read_file을 사용하여 PRD의 콘텐츠를 보여줍니다. 지금 바로 시작해 보세요. 사용자가 활성 설문조사 목록을 수동으로 업데이트할 수 있는 새로고침 버튼이라는 새로운 기능이 소개됩니다. 항상 청사진을 먼저 참고하세요.

b07e95a5977e927d.png

작업 2: 코딩 - 요구사항을 현실로 변환

이때가 바로 마법 같은 순간입니다. PRD의 요구사항을 가져와 Gemini에 코드를 작성해 달라고 요청합니다. 구체적으로 원하는 바를 정확하게 말해 보겠습니다.

Implement the changes as per the PRD

Gemini CLI가 작동하고 잠시 후 다음과 같은 출력이 표시됩니다. 이제 새 코드가 편안한 홈을 갖게 되었습니다.

aff664dee6796f8b.png

작업 3: 변경사항 확인

새 코드가 포함된 새 파일을 만들었습니다. 이 실습의 마지막 단계는 변경사항을 Cloud Run에 배포하고 확인하는 것입니다.

let's deploy the changes made to frontend to Cloud Run. The existing service on Cloud Run is quickpoll-fe in us-central1.

이 프롬프트에서 기존 Cloud Run 서비스 이름과 배포 리전과 같은 추가 세부정보를 제공하는 것을 확인하세요. 구체적으로 지정하면 시간을 절약할 수 있지만, 누락된 세부정보가 있으면 Gemini CLI에서 항상 프롬프트를 표시합니다.

업데이트된 Cloud Run 서비스에서 오류가 발생하면 Gemini CLI에 코드를 디버그하고 수정하라고 프롬프트하면 됩니다. AI는 강력한 기능을 갖춘 동반자입니다.

10. 축하합니다

393fa778d8ee9f18.png

여기까지입니다. 전체 개발 주기를 완료했습니다. 요구사항 문서에서 커밋하고 푸시할 준비가 된 새 기능으로 이동했습니다. 로컬 컨텍스트, 원격 컨텍스트, 파일 시스템 작업, 코드 생성을 결합했습니다. 개발자일 뿐만 아니라 생산성이 뛰어난 클라우드 설계자이기도 합니다. 축하합니다.

참조 문서