요즘 가장 활발하게 사용하고 있는 LLM 은 Google에서 개발 및 배포한 Gemini입니다. 처음엔 ChatGPT를 주로 사용했었습니다. 다만 ChatGPT의 성능적인 답답함, 자주 발생하는 장애 상황 등의 이유로 요즘은 가장 활발하게 사용하는 Gemini입니다. 구글의 강력한 인프라를 통해 서비스가 제공되고 있으며 개선되고 있는 모델의 성능과 답변 방식이 가장 마음에 듭니다.
이와 더불어 터미널에서 사용 가능하도록 지원하는 오픈소스 AI 에이전트인 Gemini Cli 도 지원하고 있습니다. 이는 오픈소스로 제공되기 때문에 무료로 사용할 수 있으며, 아주 빠르게 커뮤니티에서 사용자들이 유입되면서 기능적인 개선이 이뤄지고 있습니다. 개인적으로 현재 가장 강력한 터미널 기반 AI 에이전트인 Claude Code 사용해보지 않았지만 무료 터미널 에이전트를 사용할 수 있다는 점은 gemini cli의 가장 큰 장점이며, 준수한 코드 생성 능력과 큰 콘텍스트가 큰 장점이라고 생각합니다.

Gemini cli 를 로컬 환경에 설정하는 튜토리얼을 따라가보면서 gemini cli를 사용하는 방법에 대해서 알아보겠습니다.
준비사항
gemini cli 를 설치하려면 다음 필요 항목을 준비해야 합니다.
- chrome 웹 브라우저
- Gmail 계정
- Node 버전 20 이상 설치된 로컬 머신
node package manager 인 npm을 사용해서 gemini cli를 전역 설정 (-g 옵션)으로 설치합니다.
sudo npm install -g @google/gemini-cli
gemini cli의 비용 정책은 무료 라이선스로 사용이 가능합니다. 무료 라이선스를 사용하더라도 100만 토큰 콘텍스트 윈도를 가지는 Gemini 2.5 pro 모델을 사용할 수 있습니다. 무료 등급의 최대 사용량은 분당 60개의 모델 요청과 일일 1000개의 요청이 가능합니다.
다음 명령어를 통해 gemini를 실행할 수 있습니다.
gemini
도움을 받읍시다 /help

`/help` 를 입력하면 위와 같은 전체 슬래시 명령어 목록이 나옵니다.
사용자와 interaction 이 가능한 터미널에서 gemini cli에게 자연어로 작성한 모든 명령어를 수행할 수 있습니다.
gemini 설정
gemini는 사용자의 로컬 컴퓨터의 특정 디렉터리에서 gemini에 대한 설정을 읽어옵니다.
다음은 우선순위에 따른 settings.json 파일의 위치입니다.
1. gemini를 입력한 디렉터리/. gemini/settings.json
2. ~/. gemini/settings.json
3. /etc/gemini-cli/settings.json
위에서부터 높은 우선순위를 가지는 설정 파일 저장 경로입니다. gemini의 설정을 확인하거나 변경하고 싶다면 해당 경로를 차례대로 확인할 수 있습니다.
다음은 제 로컬 환경에 설정된 gemini cli 설정 중 2번째 우선순위 `~/. gemini/settings.json` 에 저장된 설정을 읽어온 결과입니다.
cat ~/.gemini/settings.json
{
"security": {
"auth": {
"selectedType": "oauth-personal"
}
},
"ui": {
"theme": "GitHub"
}
}
tools!!
gemini cli에는 기본으로 제공하는 도구 세트가 있습니다. 해당 도구들을 이용해서 로컬 환경과 상호작용을 하고 정보에 접근하며 작업을 실행합니다. 이러한 도구는 cli 의 기능을 향상시켜 더 다양한 인터렉션을 로컬 작업 환경에서 할 수 있도록 합니다.
gemini cli 에 내장된 도구를 확인하는 방법은 다음 슬래시 명령어로 확인할 수 있습니다.
/tools

기본적으로 로컬 시스템에 파일을 쓰거나 외부 시스템에서 읽거나 외부 네트워크와 연결을 하는 작업을 하는 경우 gemini cli는 사용자에게 권한을 요청하는 문구를 표시합니다.
구글에서 읽은 정보를 로컬 json 파일로 저장하는 쿼리를 작성해 보도록 하겠습니다. 구글 서치가 `/tools` 명령어의 결과에 포함되어 있으니 구글 검색을 사용할 수 있는 요청을 하도록 해보겠습니다.
오늘 서울의 날씨를 구글 검색해서 가져오고 결과를 weather.json 파일로 저장해줘.

파일 쓰기 작업에 대해서 한 번만 허용, 계속 허용, 외부 에디터에서 수정, 권한 거부 등을 입력할 수 있는 창이 뜨게 됩니다. 이 경우 사용자는 위, 아래 방향키를 이용해서 답변을 선택한 후 엔터키를 눌러 답변을 선택할 수 있습니다.
저장된 파일을 읽기 위해선 @ (at)를 사용할 수 있습니다.
아래와 같이 쿼리에서 파일의 이름이 들어간 부분을 @로 시작하여 파일을 참조할 수 있습니다.
@weather.json 의 결과를 읽고 오늘의 날씨 정보를 요약해서 설명해줘.

RSS Feed Come on!
다음은 geek news의 rss 피드를 WebFetch 도구를 활용하여 읽고
결과를 포맷팅해서 저장하는 쿼리입니다.
최신 기술 뉴스인 geek news 의 rss 피드 주소인 https://feeds.feedburner.com/geeknews-feed 를 WebFetch 도구를 사용해서 읽고 xml 로 표현된 결과를 json 형식으로 저장해서
geek-news-<오늘날짜>.yaml 형태로 저장해줘.
추가적으로 해당 작업을 스크립트화 해서 매일 cron 으로 실행할 수 있도록 스크립트화 해서 geek-news-fetcher.sh 를 만들어줘.

xml로 제공되는 rss 피드는 shell script로 파싱 하는데 복잡성이 높기 때문에 python으로 작성하는걸 추천한다고 합니다. 따라서 데이터 처리 로직을 python 으로 작성하고 결과적으로 처음 요청한 내용을 수행해 달라고 요청합니다.


생성된 파이썬 스크립트 파일과 rss 피드를 읽고 yaml 형식으로 저장한 파일까지 저장된 모습입니다.

cat을 이용해 해당 파일을 읽어보면 yaml 파일로 포맷팅 된 geek news rss 피드를 확인해 볼 수 있습니다.
MCP!! 드디어 MCP!!
MCP는 Model Context Protocol의 약자로 AI 가 외부 시스템 및 데이터 소스와 상호작용을 할 수 있도록 도와줍니다. Gemini cli는 MCP를 사용할 수 있는 구성을 지원합니다.
/mcp 명령어를 사용하면 현재 환경에서 구성된 MCP 서버를 확인할 수 있습니다.
mcp 서버를 구성하기 위해선 settings 파일에 mcp 구성 블록을 추가해야힙니다.
"mcpServers": {
"server_name_1": {
"command": "required",
"url": "required.url",
"httpUrl": "httpEndpoint"
},
"server_name_2": {},
"server_name_n": {}
}
MCP에 대한 구성을 위해 github mcp 서버 구성을 테스트해 봅니다. GIthub 공식 MCP 서버 설전을 다음과 같이 설정할 수 있습니다.
{
# ...
"mcpServers": {
"github": {
"httpUrl": "https://api.githubcopilot.com/mcp/",
"headers": {
"Authorization": "GITHUB_PAT"
},
"timeout": 5000
}
}
}
Github MCP 서버 구성으로 `settings.json`를 업데이트한 후 Gemini CLI를 다시 시작하거나 `/mcp refresh` 명령어를 실행하면 됩니다. 아래 스크린숏은 `/mcp` 명령어를 통해 내 머신에 구성된 GitHub MCP 서버와 이제 Gemini CLI에서 MCP와 함께 사용할 수 있는 다양한 도구를 표시합니다.

GIthub MCP 서버의 도구를 사용하는 프롬프트를 입력합니다. 자연어를 통해서 질문하면 권한 확인을 하고 명시적 권한을 제공해야 합니다.

- <repo-name>을 설명해 줘.
- 내 로컬 머신에서 <repo-name>을 클론해 줘.
- @<파일 이름> 또는 @<디렉터리 이름>을 설명해 줘.
- 이 저장소의 구성요소에는 무엇이 있나요?
- 필요한 변경사항을 적용했습니다. 변경사항을 GitHub에 푸시하고 GitHub MCP 서버 도구를 사용하여 이를 수행할 수 있나요?
context7 MCP 서버
Context7 은 LLM 및 AI 에디터에 관한 최신 문서를 제공합니다. 프레임워크의 최신 문서를 사용하여 LLM에 콘텍스트를 제공할 때 Context MCP는 좋은 선택이 될 수 있습니다.
settings.json 에 추가하는 mcp 서버 설정은 다음과 같습니다.
"context7": {
"httpUrl": "https://mcp.context7.com/mcp"
}
이제 프롬프트에서 구체적으로 지정하여 특정 프레임워크를 사용하여 애플리케이션이나 코드 스니펫을 생성할 때 최신 문서를 위해 Context7을 사용하도록 Gemini CLI에 요청할 수 있습니다.

Gemini Cli 멀티 모달 지원
Gemini CLI는 Gemini를 통해 멀티 모델을 지원하며, 요구사항에 따라 다양한 파일을 처리하도록 요청할 수 있습니다.
이미지 파일, pdf 파일, 텍스트 파일, 로컬 데이터베이스 파일 등 여러 파일을 읽고 수정하고 쓰고 할 수 있습니다.
다음 예시는 이미지 파일을 읽어 해당 이미지 파일의 내용을 요약해서 제공해 달라는 요청입니다. 랜딩페이지에 사용할 수 있는 카피라이트 팁 6가지에 대한 이미지입니다.

위 내용을 아래와 같이 나이스하게 요약해서 보여줍니다. gemini cli의 멀티모달 지원 기능을 정확하게 확인할 수 있으며, 이미지 내용에 대해서 정확한 요약을 제공합니다.

Gemini cli를 사용하는 바이브 코딩이라구!!!! 레츠고!
바이브코딩이 대세인데 gemini cli 를 사용해서 바이브코딩을 할 수 있습니다.
기술 강연으로 가득 찬 1일 이벤트용 웹사이트를 생성해 주세요. 이 이벤트는 1시간짜리 강연 6개로 구성된 단일 트랙으로 진행됩니다. 각 강연은 다음과 같은 정보를 가집니다: 제목, 1명 또는 최대 2명의 연사, 카테고리 (1개 또는 최대 3개의 키워드), 시간, 그리고 설명.
이 웹사이트는 사용자가 하루 종일의 일정을 시간과 함께 볼 수 있는 단일 페이지를 가집니다. 1시간의 점심시간이 한 번 있으며, 이벤트는 오전 10시에 시작합니다. 강연 사이에 10분의 전환 시간을 유지해 주세요.
서버 사이드에는 Node.js를, 프론트엔드에는 표준 HTML, JavaScript, CSS를 사용하고 싶습니다. 사용자는 카테고리를 기반으로 강연을 검색할 수 있어야 합니다.
다음과 같은 방식으로 진행해 주셨으면 합니다:
이 애플리케이션을 어떻게 설계하고 코드를 작성할지 계획을 세워주세요.
진행 과정에서 명확히 해야 할 부분이 있다면 저에게 질문해 주세요.
제가 계획에 동의하면, 코드를 생성하고 로컬에서 실행 및 테스트하는 방법을 안내해 주세요.
위와 같이 바이브 코딩을 위한 스크립트를 작성해 주면 gemini cli는 사용자 요구사항을 파악하고 수행합니다.

localhost:3000에서 실행하는 서버는 다음과 같습니다.

GEMINI.md 파일로 Gemini cli 맞춤 설정하기
명확하고 원하는 결과를 Gemini cli를 통해 생성할 수 있도록 Gemini 가 지켜야 할 여러 규칙이 포함된 프롬프트를 제공할 수 있습니다. 하지만 사용자는 매번 모델이 지켜야할 규칙을 프롬프트에 포함시켜 전달하는 것은 번거롭고 어려운 일입니다. 잘 구성된 프롬프트를 제공하더라도 제공하는 규칙이 포함되어 있는지 여부에 따라 답변의 결과가 차이가 나게 될 것입니다.
Gemini.md 는 모델에 제공하는 명령 콘텍스트를 구성하는데 중요한 파일입니다. 이 파일을 사용하면 프로젝트별 지침, 코딩 스타일 가이드, 프레임워크 사용 규칙, 도구 사용 규칙, 프로젝트 관련 배경 정보를 모델에게 제공하여 응답을 사용자의 요구에 맞춤화되고 정확하게 만들 수 있도록 도와줍니다.
확장자에서 확인해 볼 수 있듯이 md 인 Markdown 형식의 파일이며, 여러 디렉터리의 위치에서 아래와 같은 순서로 파일을 읽고 파일을 결합하여 최종적으로 모델에게 제공합니다.
- Global Context: `~/. gemini/GEMIN.md` 의 경로에 생성된 파일로 모든 프로젝트에 적용되는 지침입니다.
- Project / 상위 Context: cli는 현재 디렉터리에서 프로젝트 루트까지 GEMINI.md 파일을 검색합니다.
- 하위 디렉토리 Context: 하위 디렉토리에서 GEMINI.md 파일을 검색하여 적용합니다.
`/memory show` 명령어를 사용하면 최종 결합되어 모델에게 전송되는 콘텍스트를 확인할 수 있습니다.
아래는 GEMINI.md 파일의 예시입니다.
# 프로젝트: My Awesome TypeScript Library
## 일반 지침:
- 새로운 TypeScript 코드를 생성할 때, 기존 코딩 스타일을 준수해 주세요.
- 모든 새로운 함수와 클래스에 JSDoc 주석을 포함해야 합니다.
- 적절한 경우 함수형 프로그래밍 패러다임을 선호합니다.
- 모든 코드는 TypeScript 5.0 및 Node.js 20+와 호환되어야 합니다.
## 코딩 스타일:
- 들여쓰기는 2칸 공백을 사용합니다.
- 인터페이스 이름은 `I` 접두사를 붙여야 합니다 (예: `IUserService`).
- 비공개(private) 클래스 멤버는 밑줄(`_`) 접두사를 붙여야 합니다.
- 항상 엄격한 동등 연산자 (`===` 및 `!==`)를 사용합니다.
## 특정 컴포넌트: `src/api/client.ts`
- 이 파일은 모든 외부 API 요청(outbound requests)을 처리합니다.
- 새로운 API 호출 함수를 추가할 때, 강력한(robust) 오류 처리 및 로깅 기능을 반드시 포함해야 합니다.
- 모든 GET 요청에는 기존 `fetchWithRetry` 유틸리티를 사용합니다.
## 의존성에 관하여:
- 반드시 필요한 경우가 아니면 새로운 외부 의존성을 추가하지 마세요.
- 새로운 의존성이 필요한 경우, 그 이유를 명시해 주세요.
마크다운 문법이 적용된 문서 형태로 일반적인 지침, 코딩 스타일, 의존성, 컴포넌트 등 typescript 프로젝트에 사용해 볼 수 있는 예시입니다.
다른 예시로는 Gemini cli를 계획모드에서만 사용하는 방법을 보여주는 지침입니다. 해당 지침을 프로젝트 지침으로 사용해서 위에서 생성한 동일한 애플리케이션에 대한 프롬프트를 제공해 보도록 하겠습니다.
아래 파일을 `<프로젝트 root>/GEMINI.md` 파일의 경로에 저장합니다.
# Gemini CLI Plan Mode
You are Gemini CLI, an expert AI assistant operating in a special 'Plan Mode'. Your sole purpose is to research, analyze, and create detailed implementation plans. You must operate in a strict read-only capacity.
Gemini CLI's primary goal is to act like a senior engineer: understand the request, investigate the codebase and relevant resources, formulate a robust strategy, and then present a clear, step-by-step plan for approval. You are forbidden from making any modifications. You are also forbidden from implementing the plan.
## Core Principles of Plan Mode
* **Strictly Read-Only:** You can inspect files, navigate code repositories, evaluate project structure, search the web, and examine documentation.
* **Absolutely No Modifications:** You are prohibited from performing any action that alters the state of the system. This includes:
* Editing, creating, or deleting files.
* Running shell commands that make changes (e.g., `git commit`, `npm install`, `mkdir`).
* Altering system configurations or installing packages.
## Steps
1. **Acknowledge and Analyze:** Confirm you are in Plan Mode. Begin by thoroughly analyzing the user's request and the existing codebase to build context.
2. **Reasoning First:** Before presenting the plan, you must first output your analysis and reasoning. Explain what you've learned from your investigation (e.g., "I've inspected the following files...", "The current architecture uses...", "Based on the documentation for [library], the best approach is..."). This reasoning section must come **before** the final plan.
3. **Create the Plan:** Formulate a detailed, step-by-step implementation plan. Each step should be a clear, actionable instruction.
4. **Present for Approval:** The final step of every plan must be to present it to the user for review and approval. Do not proceed with the plan until you have received approval.
## Output Format
Your output must be a well-formatted markdown response containing two distinct sections in the following order:
1. **Analysis:** A paragraph or bulleted list detailing your findings and the reasoning behind your proposed strategy.
2. **Plan:** A numbered list of the precise steps to be taken for implementation. The final step must always be presenting the plan for approval.
NOTE: If in plan mode, do not implement the plan. You are only allowed to plan. Confirmation comes from a user message.
`/memory show` 명령어를 사용하여 현재 gemini의 세션에 지침이 반영되었는지 확인합니다.

앞서 바이브 코딩을 하면서 생성한 페이지를 만들어 달라는 동일한 프롬프트를 붙여 넣으면 아래와 같이 단계별로 구축 계획을 제공하며, 계획에 대해 사용자의 확인을 받은 후 코드 생성을 진행합니다.

추가적으로 `/memory add <추가 지침>` 명령어를 사용하면 GEMINI.md 에 지침을 추가할 수 있으며, `<추가 지침>을 기억해`, `메모리에 <추가 지침>을 추가해` 와 같은 자연어 명령어를 사용해 GEMINI.md 에 지침을 추가할 수도 있습니다.
추가적으로 실용적으로 Gemini cli를 사용 가능하게 하는 시리즈를 제공하며, plan mode, explain mode 등 다양한 mode에 대한 사용 지침도 확인해 볼 수 있습니다.
사용자 지정 슬래시 명령어
'관심 기술 > AI' 카테고리의 다른 글
| [Claude Code] AI 워크플로우 플러그인 Arc 만들기 #1 (0) | 2026.03.12 |
|---|---|
| AI 시대: 성진우가 혼자만 레벨업을 할 수 있었던 이유 (0) | 2026.02.26 |
| Claude Code 를 Github Actions 에 녹여보자 - 준비편 (0) | 2025.09.12 |
| Claude Code 를 Github Actions 에 녹여보자 - 이론편 (0) | 2025.09.12 |