1. 📖 소개

이 Codelab에서는 Gemini CLI의 기본사항을 알아보고 소프트웨어 개발 워크플로에서 코드 검토 및 보안 분석 확장 프로그램을 활용합니다.
학습할 내용
- Gemini CLI 설정 방법
- Gemini CLI 구성 방법
- Gemini CLI 확장 프로그램 설치 방법
- 코드 검토 및 보안 분석을 위해 Gemini CLI 확장 프로그램을 활용하는 방법
- Gemini CLI용 MCP를 구성하는 방법
- CI/CD에서 Gemini CLI를 검사하는 방법
필요한 항목
- Chrome 웹브라우저
- Gmail 계정
- 결제 계정이 사용 설정된 Cloud 프로젝트
2. 🚀 워크숍 개발 설정 준비
1단계: Cloud Console에서 활성 프로젝트 선택하기
Google Cloud 콘솔의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다 (콘솔의 왼쪽 상단 섹션 참고).

이 버튼을 클릭하면 다음 예와 같이 모든 프로젝트 목록이 표시됩니다.

빨간색 상자로 표시된 값이 프로젝트 ID이며 이 값은 튜토리얼 전체에서 사용됩니다.
Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다. 이를 확인하려면 왼쪽 상단 표시줄에 있는 햄버거 아이콘 ☰을 클릭하여 탐색 메뉴를 표시하고 결제 메뉴를 찾습니다.


결제 / 개요 제목 ( 클라우드 콘솔의 왼쪽 상단 섹션) 아래에 'Google Cloud Platform 무료 체험판 결제 계정'이 표시되면 이 튜토리얼에서 프로젝트를 사용할 준비가 된 것입니다. 그렇지 않은 경우 이 튜토리얼의 시작 부분으로 돌아가서 체험판 결제 계정을 사용하세요.

2단계: Cloud Shell 익히기
튜토리얼의 대부분에서 Cloud Shell을 사용합니다. Google Cloud 콘솔 상단에서 Cloud Shell 활성화를 클릭합니다. 승인을 요청하는 메시지가 표시되면 승인을 클릭합니다.


Cloud Shell에 연결되면 셸 ( 또는 터미널)이 계정으로 이미 인증되었는지 확인해야 합니다.
gcloud auth list
아래 예시 출력과 같이 개인 Gmail이 표시되면 모든 것이 정상입니다.
Credentialed Accounts
ACTIVE: *
ACCOUNT: alvinprayuda@gmail.com
To set the active account, run:
$ gcloud config set account `ACCOUNT`
그렇지 않은 경우 브라우저를 새로고침하고 메시지가 표시되면 승인을 클릭하세요 ( 연결 문제로 인해 중단될 수 있음).
다음으로, 터미널에서 $아이콘 앞에 ( ) 안의 값이 표시되는 경우 ( 아래 스크린샷에서 값은 'your-workshop-project') 셸이 이미 보유한 올바른 프로젝트 ID로 구성되어 있는지 확인해야 합니다. 이 값은 활성 셸 세션에 대해 구성된 프로젝트를 보여줍니다.

표시된 값이 이미 올바른 경우 다음 명령어를 건너뛸 수 있습니다. 하지만 올바르지 않거나 누락된 경우 다음 명령어를 실행합니다.
gcloud config set project <YOUR_PROJECT_ID>
3단계: Cloud Shell 편집기 숙지 및 애플리케이션 작업 디렉터리 설정
이제 코드 편집기를 설정하여 코딩 작업을 할 수 있습니다. 이를 위해 Cloud Shell 편집기를 사용합니다.
편집기 열기 버튼을 클릭하면 Cloud Shell 편집기
가 열립니다.
이제 아래와 같은 Cloud Shell 편집기 인터페이스가 표시됩니다.

이제 상호작용할 데모 저장소를 클론합니다. 먼저 편집기의 터미널을 열어야 합니다. 메뉴 바에서 터미널 -> 새 터미널을 클릭하거나 Ctrl + Shift + C를 사용하여 브라우저 하단에 터미널 창을 열 수 있습니다.

그런 다음 터미널에서 다음 명령어를 실행합니다.
git clone https://github.com/alphinside/gemini-cli-code-analysis-demo.git code-analysis-demo
그런 다음 Cloud Shell 편집기의 상단 섹션으로 이동하여 File->Open Folder를 클릭하고 username 디렉터리를 찾은 다음 복제된 저장소 디렉터리 code-analysis-demo를 찾아 OK 버튼을 클릭합니다. 이렇게 하면 선택한 디렉터리가 기본 작업 디렉터리가 됩니다. 이 예시에서 사용자 이름은 alvinprayuda이므로 디렉터리 경로는 아래와 같습니다.


이제 Cloud Shell 편집기 작업 디렉터리가 다음과 같이 표시됩니다.

이제 다음 단계로 넘어갈 수 있습니다.
3. 🚀 설정 및 구성
로컬 시스템에 Gemini CLI를 설치하려면 다음 단계를 따르세요.
- 시스템에 Node 버전 20 이상이 있는지 확인합니다.
- 다음 중 한 가지 방법으로 Gemini CLI를 사용 설정합니다.
- 전역 패키지로 설치
# Install as an executor
npm install -g @google/gemini-cli
# then run it from terminal
gemini
- 또는 소스에서 직접 실행하여 항상 최신 버전을 가져옵니다.
npx https://github.com/google-gemini/gemini-cli
처음 실행하면 몇 가지 질문이 표시됩니다. IDE (예: VSCode)에서 실행하면 다음 질문이 표시됩니다.

그런 다음 인증을 위한 몇 가지 옵션을 묻습니다.

다음과 같은 몇 가지 옵션이 있습니다.
- Google 계정으로 로그인을 선택하면 브라우저에서 Google 인증 페이지가 열리며, 이를 수락하기만 하면 됩니다.
- Gemini API 키를 사용하려면 AI Studio 페이지에서 키를 만든 다음 작업 디렉터리에서 변수 GEMINI_API_KEY가 설정된 .env 파일을 만듭니다 ( 또는 명령줄에서
export GEMINI_API_KEY="your-api-key"명령어를 실행). - Vertex AI를 사용하려면 이전에 설정한 것과 같은 프로젝트가 필요하며 .env 파일을 만들고 GOOGLE_CLOUD_PROJECT 및 GOOGLE_CLOUD_LOCATION을 설정해야 합니다.
이러한 인증 방법을 변경하려면 Gemini CLI에서 /auth 명령어를 실행하거나 구성 파일을 수정하면 됩니다. 구성 파일을 직접 수정하려면 Linux에서는 $HOME/.gemini/settings.json에 있어야 합니다 . security 및 auth 유형이 표시되며 이를 수정할 수 있습니다.
{
"security": {
"auth": {
"selectedType": "vertex-ai" # or "gemini-api-key" or "oauth-personal"
}
}
}

4. 🚀 기본 명령어 및 내장 도구
이제 Gemini CLI를 사용해 자세히 알아보겠습니다. 사용할 수 있는 기본 명령어를 찾고 있다면 /help를 입력하여 사용 가능한 모든 명령어를 표시할 수 있습니다.

/help
다음과 같은 출력이 표시됩니다. 
Gemini CLI는 AI 에이전트이므로 사용자가 제공한 작업을 해결할 수 있는 도구가 장착되어 있습니다. 내장된 도구를 확인하려면 /tools 명령어를 실행합니다.

/tools
다음과 같은 출력이 표시됩니다.

Gemini CLI에는 파일 읽기 및 쓰기, 웹 검색 등 여러 기능이 있습니다. 이러한 도구 중 일부는 잠재적 위험으로 인해 기본적으로 사용자 확인이 필요했습니다.
이제 실제 사례를 살펴보겠습니다. Gemini CLI에서 다음 프롬프트를 실행해 보세요.

Find top 10 OWASP security issue and write it down to owasp.md
GoogleSearch 도구가 호출되고 나중에 WriteFile 도구를 사용하여 결과가 작성됩니다. IDE를 활용하면 제안을 수락할지 거부할지 여부에 따라 차이점과 표시 옵션이 표시됩니다. 여기에서 Gemini CLI가 파일 쓰기 권한을 요청하는 것을 확인할 수 있습니다.

5. 🚀 확장 프로그램
AI 에이전트로 특정 작업을 수행할 때 출력을 개선하려면 적절한 프롬프트를 작성하고, 적절한 도구 통합으로 적절한 컨텍스트 엔지니어링을 관리하는 등의 어려운 점이 있습니다.
Gemini CLI 확장 프로그램은 외부 도구에 연결할 수 있는 사전 패키지화되고 쉽게 설치할 수 있는 프롬프트와 통합입니다. 각 확장 프로그램에는 도구를 효과적으로 사용하는 방법에 관한 내장 '플레이북'이 포함되어 있으며 다음 구성요소로 구성될 수 있습니다.
- 맞춤 슬래시 명령어
- MCP 구성
- 컨텍스트 파일

보안 확장 프로그램 설치
예를 들어 이 튜토리얼에서는 code-review 및 security 확장 프로그램을 설치하는 방법을 살펴봅니다.
터미널에서 다음 명령어를 실행하여 security 확장 프로그램을 설치합니다.
gemini extensions install https://github.com/gemini-cli-extensions/security
다음 질문이 표시됩니다. Enter 키를 눌러 수락하세요.
Installing extension "gemini-cli-security". **Extensions may introduce unexpected behavior. Ensure you have investigated the extension source and trust the author.** This extension will run the following MCP servers: * securityServer (local): node /home/alvinprayuda/.gemini/extensions/gemini-cli-security/mcp-server/dist/security.js This extension will append info to your gemini.md context using GEMINI.md Do you want to continue? [Y/n]: Extension "gemini-cli-security" installed successfully and enabled.
코드 검토 확장 프로그램 설치
다음으로 code-review 확장 프로그램을 설치합니다. 아래 명령어를 실행하세요.
gemini extensions install https://github.com/gemini-cli-extensions/code-review
완료되면 Gemini CLI를 다시 실행합니다.
gemini
/extensions 명령어를 실행하면 이 두 확장 프로그램이 이미 설치되어 있는 것을 확인할 수 있습니다.

/extensions
이제 이전에 클론한 샘플 저장소에서 실제로 실행해 보겠습니다.
6. 🚀 대화형 모드 - 코드 보안 분석 확장 프로그램 애플리케이션
보안 확장 프로그램은 저장소의 보안을 강화하기 위해 빌드된 오픈소스 Gemini CLI 확장 프로그램입니다. 이 확장 프로그램은 코드 변경사항을 분석하여 다양한 보안 위험과 취약점을 식별하는 새로운 명령어를 Gemini CLI에 추가합니다.
이제 데모 저장소를 먼저 준비해 보겠습니다. 다음 명령어를 실행하여 보안 위험이 있는 변경사항이 이미 적용된 브랜치로 변경합니다.
git checkout refactor/analysis-demo
그런 다음 터미널에서 Gemini CLI를 실행합니다.
gemini
그런 다음 확장 프로그램을 실행해 보겠습니다.

/security:analyze
이렇게 하면 장기 실행 프로세스가 시작되며, 프로세스 중에 아래와 같이 mkdir와 같은 특정 작업을 실행할 권한을 요청하는 여러 인터럽트가 표시됩니다.

이는 사용자가 Gemini CLI에 의해 실행될 내용을 알 수 있도록 하는 보호 메커니즘입니다. 튜토리얼의 나머지 부분에서는 항상 허용할 수 있습니다 ( 옵션 2).
이 확장 프로그램은 장기 실행 프로세스를 호출합니다. .gemini_security 디렉터리 내에 계획 파일이 생성되는 것을 확인할 수 있으며, 어떤 프로세스가 완료되었는지 체크리스트를 통해 확인할 수 있습니다. 아래 예와 같이

작업을 완료하는 데 시간이 걸리므로 기다리는 동안 GitHub 저장소에서 이러한 확장 프로그램의 소스를 확인할 수 있습니다 . 이 URL은 이러한 모든 보안 검사 프로세스를 실행하는 데 사용되는 프롬프트를 보여줍니다.

여기에서 볼 수 있듯이 Gemini CLI로 프롬프트를 스캔하여 2단계 검사, 즉 정찰 단계와 더 자세한 조사 단계를 실행합니다.
Gemini CLI에서 다음 프롬프트가 표시되면 옵션 2를 선택하여 루프 감지를 사용 중지할 수 있습니다.

그런 다음 Gemini CLI에 계속하라는 메시지를 표시합니다.

continue
이는 무한한 비생산적인 도구 호출 루프를 방지하는 메커니즘이며 시간이 지남에 따라 계속 개선될 예정입니다.
완료되면 대화형 터미널에 보고서가 표시됩니다. 이를 더 쉽게 하기 위해 Gemini CLI에 security-analysis.md에 작성하도록 지시합니다.

write the result to security-analysis.md file
이제 파일에 작성된 결과를 검사할 수 있습니다.
7. 🚀 비대화형 모드 - 코드 검토 확장 프로그램 애플리케이션
code-review 확장 프로그램은 코드 변경사항을 분석하여 다양한 코드 품질 문제를 식별하는 새로운 명령어를 Gemini CLI에 추가합니다.
이 확장 프로그램은 Gemini CLI 비대화형 모드에서 실행할 수 있습니다. 즉, Gemini CLI 셸을 입력하지 않고도 모든 프로세스를 실행할 수 있습니다. 비대화형 모드에서 Gemini CLI를 실행하려면 다음 명령 패턴을 사용하면 됩니다.
gemini "put your command here"
하지만 비대화형 모드로 실행하면 사용자 권한이 필요한 도구 작업이 사용 중지되므로 비대화형 모드에서 모든 도구를 사용 설정한다는 의미로 --yolo 플래그를 추가하여 모든 작업을 자동 승인해야 합니다.
다음 명령어를 사용하여 code-review 확장 프로그램을 실행해 보겠습니다.
gemini "/code-review" --yolo -e code-review > code-review.md
이 명령어는 Gemini CLI 출력 결과를 code-review.md 파일에 작성합니다. 여기에서 -e 플래그를 확인하세요. 이 플래그는 세션 중에 활성화할 확장 프로그램을 제어합니다. 여기서는 code-review 확장 프로그램만 활성화하고 나머지는 사용 중지합니다.
시간이 걸리지만 완료되면 아래와 같이 마크다운 파일에 결과가 표시됩니다.
Here are the results of the code review.
While the recent changes to rename `get_products` and `get_product` to `GetProducts` and `GetProduct` are minor, the codebase has some inconsistencies in its naming conventions. For instance, other functions like `create_product` use `snake_case`, while the newly renamed functions use `PascalCase`. For better code quality and readability, I recommend using a consistent naming convention throughout the project.
More importantly, I have identified several security vulnerabilities in the `main.py` file. Here is a summary of the findings:
### 1. SQL Injection
* **Severity**: High
* **Location**:
* `main.py:99` in `get_products_by_category`
* `main.py:146` in `search_products`
* `main.py:372` in `get_user_transactions`
* `main.py:438` in `adjust_inventory_by_query`
* **Description**: The endpoints directly use f-strings to construct SQL queries, making them vulnerable to SQL injection attacks. An attacker could manipulate the input to execute arbitrary SQL commands, potentially leading to data breaches or unauthorized modifications.
* **Recommendation**: Use parameterized queries or an ORM to handle database interactions. This will ensure that user input is properly sanitized and prevent SQL injection attacks.
### 2. Server-Side Request Forgery (SSRF)
* **Severity**: High
* **Location**: `main.py:265` in `fetch_url`
* **Description**: The `fetch_url` endpoint allows users to specify an arbitrary URL, which the server then requests. This can be exploited to make requests to internal services or local files, leading to information disclosure or other security breaches.
* **Recommendation**: Implement a whitelist of allowed domains or protocols to restrict the URLs that can be requested. Additionally, you can disable redirects and use a timeout to limit the impact of an attack.
### 3. Information Exposure
* **Severity**: Medium
* **Location**: `main.py:423` in `get_environment_variables`
* **Description**: The `get_environment_variables` endpoint exposes all environment variables to the user. This can include sensitive information such as API keys, database credentials, and other secrets.
* **Recommendation**: Remove this endpoint or restrict access to it to authorized users. If you need to expose some environment variables, do so selectively and avoid exposing sensitive information.
8. 🚀 모델 컨텍스트 프로토콜 지원
이제 확장 프로그램 설명에서 이전에 살펴본 것처럼 Gemini CLI가 모델 컨텍스트 프로토콜을 통해 도구와 리소스를 제공하는 애플리케이션인 MCP 서버에 연결할 수 있습니다. 이 연결을 통해 Gemini CLI는 MCP 서버를 로컬 환경과 API와 같은 외부 서비스 간의 브리지로 사용하여 외부 시스템 및 데이터 소스와 상호작용할 수 있습니다.

자체 MCP 서버를 설정하려면 .gemini/settings.json 파일을 수정하고 다음 구성을 추가해야 합니다.
{
...
# Previous settings above if any
"mcpServers": {
"server_name": {
# MCP server configurations here
}
}
}
이 튜토리얼에서는 이전 보고서 데이터를 GitHub에 푸시하기 위해 GitHub 계정과의 연결을 구성합니다.
Github MCP 서버 구성
먼저 Gemini CLI 프로젝트 구성 파일을 만들어 보겠습니다. 다음 명령어를 실행합니다.
mkdir -p .gemini && touch .gemini/settings.json
그런 다음 .gemini/settings.json 파일을 열고 다음 구성으로 채웁니다.
{
"mcpServers": {
"github": {
"httpUrl": "https://api.githubcopilot.com/mcp/",
"headers": {
"Authorization": "your-personal-access-token"
},
"timeout": 5000
}
}
}
이제 여기에 자체 GitHub 개인 액세스 토큰이 필요하므로 자체 GitHub 계정이 있어야 합니다.
GitHub에 로그인하고 Settings로 이동합니다.

그런 다음 아래로 스크롤하여 개발자 설정을 찾아 클릭합니다.

그런 다음 개인 액세스 토큰을 선택하고 토큰 (클래식)을 선택합니다.


여기에 개인 액세스 토큰의 이름을 지정하고 repo 범위를 선택합니다.

그런 다음 아래로 스크롤하여 토큰 생성 버튼을 클릭하고 다음을 확인합니다.
새 토큰 생성 버튼을 클릭하고 새 토큰 생성 (클래식)을 선택합니다. 그런 다음 생성된 토큰을 복사하여 .gemini/settings.json에 작성합니다.

따라서 .gemini/settings.json은 다음 예와 같아야 합니다.
{
"mcpServers": {
"github": {
"httpUrl": "https://api.githubcopilot.com/mcp/",
"headers": {
"Authorization": "ghp-xxxx"
},
"timeout": 5000
}
}
}
이제 연결을 확인해 보겠습니다. 다음 명령어를 실행하여 Gemini CLI를 입력합니다.
gemini
그런 다음 /mcp 명령어를 실행하면 GitHub MCP가 이미 올바르게 구성되어 있습니다.

/mcp
그런 다음 다음 명령어를 제출하여 이 MCP 연결을 테스트해 보겠습니다.

Aggregate the findings from @code-review.md and @security-analysis.md into a single report and ensure no duplicates issues reported. Post this report as a comment on the relevant pull request for the current git branch on GitHub and display the pull request URL for manual review
여기에서 @code-review.md 및 @security-analysis.md 표기법을 참고하세요. 이는 Gemini CLI에 전달할 파일을 참조하는 방법입니다. 이 명령어는 두 파일의 콘텐츠를 읽고 Github MCP 연결을 사용하여 이 브랜치와 관련된 풀 요청에 댓글을 푸시합니다. 그런 다음 풀 요청 URL에서 이를 확인할 수 있습니다.

9. 💡CI/CD 워크플로의 Gemini CLI
GitHub 사용자는 run-gemini-cli GitHub 작업을 활용하여 CI/CD 파이프라인에 Gemini CLI를 쉽게 삽입할 수 있습니다. 중요한 일상 코딩 작업을 위한 자율 에이전트이자 작업을 빠르게 위임할 수 있는 주문형 파트너 역할을 합니다.
이를 활용하여 GitHub 저장소 내에서 Gemini를 대화형으로 사용하여 pull 요청 검토, 문제 분류, 코드 분석 및 수정 등을 실행할 수 있습니다.
이 통합의 예는 이 pull 요청에서 확인할 수 있습니다. 여기서 러너 내에서 Gemini CLI 보안 확장 프로그램을 활용하고 Pull 요청이 생성될 때 검토를 제공합니다.




10. 💡기타 Gemini CLI 확장 프로그램 살펴보기

https://geminicli.com/extensions에서 더 많은 확장 프로그램을 살펴볼 수도 있습니다 . 더 흥미로운 도구를 확인해 보세요.
11. 🧹 정리
이 Codelab에서 사용한 리소스의 비용이 Google Cloud 계정에 청구되지 않도록 하려면 다음 단계를 따르세요.
- Google Cloud 콘솔에서 리소스 관리 페이지로 이동합니다.
- 프로젝트 목록에서 삭제할 프로젝트를 선택하고 삭제를 클릭합니다.
- 대화상자에서 프로젝트 ID를 입력하고 종료를 클릭하여 프로젝트를 삭제합니다.