본문 바로가기
목차
CE

Gemini CLI와 함께하는 터미널(CLI) 명령어 학습하기

by ds31x 2025. 12. 26.
728x90
반응형


이 문서에선 Windows CMDmacOS Zsh 환경에서

초보자가 터미널 명령어(CLI)를 익히는 과정을 돕기 위해 개인 AI 조교(Gemini CLI) 를 설정하고 활용하는 방법을 다룸.

 

이 튜토리얼을 통해 여러분은 Gemini CLI의 4단계 설정 시스템을 실습하며, 다음과 같은 능력을 갖춘 AI 를 직접 구축함:

  1. 파일 시스템 조작: 파일 및 폴더의 생성, 복사, 이동, 삭제를 안전하게 가이드하거나 직접 수행.
  2. 시스템 정보 확인: 내 컴퓨터의 OS 버전, 호스트 이름 등 하드웨어 정보를 파악.
  3.  환경 변수 제어: 시스템의 동작을 제어하는 환경 변수의 개념을 이해하고 설정.

 

터미널에 대한 자세한 내용은 다음을 참고:
https://dsaint31.me/mkdocs_site/OS/console_terminal_shell_kernel/

 

BME

Console, Terminal, and Shell Console: 컴퓨터(주로 서버)에 command를 작성하여 입력하고 그 결과를 확인할 수 있는 (물리적) 입출력 장치 . Terminal과 비슷한 의미를 가지고 있으나 보다 물리적인 측면이 강

dsaint31.me

Gemini CLI 설치는 다음을 참고:

2025.12.26 - [개발환경] - Gemini CLI 설치 가이드 (Homebrew 이용)

 

Gemini CLI 설치 가이드 (Homebrew 이용)

Intro이 문서는 Windows(WSL Ubuntu)와 macOS(Zsh) 환경에서패키지 매니저인 Homebrew를 사용하여 Gemini CLI를 설치하는 방법을 안내함.Gemini CLI란?Gemini CLI는 구글의 Gemini를 터미널(Terminal) 환경에 통합한 도구

ds31x.tistory.com

Gemini CLI 의 설정에 대한 원본은 다음을 참고:

https://github.com/google-gemini/gemini-cli/blob/main/docs/get-started/configuration-v1.md

 

gemini-cli/docs/get-started/configuration-v1.md at main · google-gemini/gemini-cli

An open-source AI agent that brings the power of Gemini directly into your terminal. - google-gemini/gemini-cli

github.com


1. GEMINI CLI 설정: settings.json

Gemini CLI는 settings.json 이라는 Java Script Object Notation (JSON) 형식의 파일을 통해 설정을 관리함:

  • 단, 여러 사용자와 다양한 프로젝트 환경이 공존할 때 발생할 수 있는 충돌을 방지하기 위해
  • 엄격한 우선순위(Precedence)를 가진 4단계 설정 구조를 채택하고 있음.
  • 이는 settings.json파일이 어디에 있느냐에 따라 다른 범위와 우선순위를 가지도록 하여 이루어짐.

json파일이란?

2024.01.07 - [CE] - [Term] JSON (JavaScript Object Notation) :

 

[Term] JSON (JavaScript Object Notation) :

JSON (JavaScript Object Notation)은JavaScript에서 Object Notation (객체 표기)의 목적으로 제안되었고,JavaScript 언어의 subset 임.하지만, 오늘날 JSON은 프로그램들 간에 데이터를 교환에 사용되는 대표적인 Light-

ds31x.tistory.com


0순위: 시스템 설정 (System Settings) - [절대 권력]

  • 위치:
    • /Library/Application Support/GeminiCli/settings.json (macOS)
    • C:\ProgramData\gemini-cli\settings.json (Win)
  • 역할: 시스템 상에서 가장 높은 우선순위의 최상위 규칙 임.
    • 일반적으로 적용되는 범위가 넓은 경우 우선순위가 떨어지나,
    • 여기에 놓인 settings.json시스템 전체에 영향을 주며 우선순위도 최상위임.
  • 특징:
    • 강제성(Override): 사용자가 아무리 자신의 설정 파일에서 특정 기능을 activation하려고 해도, 여기서 false로 막혀있다면 절대 활성화되지 않음.
    • 보안: rm -rf / 같은 위험한 명령어를 원천 차단하거나, 특정 시간대에만 접속을 허용하는 등의 강력한 제어가 가능함.

1순위: 프로젝트 설정 (Project Settings)

  • 위치: 현재 작업 중인 폴더 내부의 ./.gemini/settings.json
  • 역할: 특정 프로젝트(폴더)에 들어갔을 때만 적용되는 맞춤형 규칙 이 지정됨.
  • 특징:
    • 유연성: 
      • Python_Study 폴더에서는 AI가 '파이썬 선생님'이 되고,
      • Java_Project 폴더에서는 '자바 전문가'가 되도록 설정할 수 있음.
    • 협업:
      • 팀원들과 공유하는 폴더에 이 파일을 넣어두면, 팀원 모두가 동일한 AI 설정 환경에서 작업할 수 있음.
    • 적용되는 범위는 해당 폴더에만 한정되는 가장 좁은 범위이나, 우선 순위는 System Settings를 제외하고 가장 높음.

2순위: 사용자 설정 (User Settings)

  • 위치: 사용자 홈 디렉토리의 ~/.gemini/settings.json
  • 역할: 해당 사용자에게 기본으로 적용되는 설정이 놓임.
  • 특징:
    • 편의성:
      • 사용자가 선호하는 언어(한국어), 테마(다크 모드), 기본 모델(빠른 모델) 등을 설정.
    • 지속성:
      • 어떤 폴더에 있든, 해당 폴더에 프로젝트 설정이 따로 없다면 이 설정이 기본으로 적용됨.

3순위: 시스템 기본값 (System Defaults)

  • 위치: 도구 설치 시 내장된 기본값 파일
  • 역할: 위 0~2번 설정 파일이 하나도 없을 때 적용되는 설정임.
  • 특징: 가장 안전하고 보수적인 설정(명령어 실행 차단 등)으로 되어 있는 경우가 많음.
    • 만약 이 시스템 기본값을 바꾸고 싶다면
    • System Setting이 있는 디렉토리에 system-defaults.json 을 만들어서
    • 시스템 관리자가 모든 사용자에게 적용할
      최저 수준의 기본값을 파일로 정의할 수 있음.

Gemini CLI의 설정에 대해 보다 자세한 내용은 다음을 참고:
https://github.com/google-gemini/gemini-cli/blob/main/docs/get-started/configuration.md

 

gemini-cli/docs/get-started/configuration.md at main · google-gemini/gemini-cli

An open-source AI agent that brings the power of Gemini directly into your terminal. - google-gemini/gemini-cli

github.com


2. 준비: 체계적인 실습 폴더 구조 구축

이 문서는

  • 터미널 사용법을 익히는데 도움을 주는 Gemini CLI를 설정해보면서
  • Gemini CLI를 위한 settings.json에 대한 이해와 함께
  • CLI 명령어들을 익히도록 진행됨.

 

우선, 2개의 다른 프로젝트 디렉토리를 만들고, 각각의 settings.json을 적용해 볼 것임.

 

여기서 만들어진 설정(settings.json)을 통해 각기 다르게 동작하는 Gemin CLI를 3번 실습에서 살펴볼 예정임.


2-1  실습 위한 프로젝트 디렉토리 생성

2-1-1 Windows 사용자 (CMD)

Win + R을 누르고 cmd를 입력하여 다음을 실행할 것:

:: 1. 바탕화면으로 이동 (가장 익숙한 공간으로 이동)
cd %USERPROFILE%\Desktop

:: 2. CLI_Lab라는 폴더 생성
mkdir CLI_Lab
cd CLI_Lab

:: 3. Step1과 Step2 폴더 생성 (Project Directory)
mkdir Step1_Basic_and_SystemInfo
mkdir Step2_File_and_Env
  • 위 파일의 내용을 .bat의 확장자를 가지는 batch파일로 만들어서 실행시켜도 됨.

2-1-2 macOS 사용자 (Zsh)

터미널(Terminal) 앱을 실행하고 다음의 명령어를 실행.

# 1. 바탕화면으로 이동
cd ~/Desktop

# 2. 대장 폴더와 하위 폴더를 한 번에 생성 (`-p` 옵션 사용)
mkdir -p CLI_Lab/Step1_Basic_and_SystemInfo CLI_Lab/Step2_File_and_Env
cd CLI_Lab

2-2. Global Setup: Setting Your AI Persona (User Settings)

이제 특정 사용자가 사용하는 모든 Gemini가 기본적으로 따를 설정을 수행: User Settings

 

사용할 설정은 다음과 같음:

  • 한국어(ko)로 대화
  • 눈이 편안한 다크 모드 (dark) 사용.

User Settings는 다음의 설정 파일에서 이루어짐:

  • ~/.gemini/settings.json (Mac)
  • %USERPROFILE%\.gemini\settings.json (Win)

설정 내용 (Configuration):

{
  "$schema": "https://raw.githubusercontent.com/google-gemini/gemini-cli/main/schemas/settings.schema.json",
  "model": "gemini-2.0-flash",
  "ui": {
    "theme": "dark",
    "language": "ko"
  },
  "tools": {
    "google_web_search": { "enabled": true }
  }
}
  1. $schema: 에디터의 길잡이 (The Editor's Guide)
    • 역할: JSON 파일의 구조를 정의한 '설계도' 주소를 지정함.
    • 효과: VS Code 등에서 오타를 감지하고, 사용 가능한 옵션을 자동 추천하여 설정 오류를 방지함.
    • 현재 개발 중이라서 그런저, schema와 다른 설정도 동작을 하는 경우가 많으니 참고로만 사용할 것.
  2. model: 두뇌의 선택 (Choosing the Brain)
    • 역할: 사용할 AI 모델의 종류를 결정함.
    • 선택: 빠르고 효율적인 gemini-2.0-flash 모델을 기본값으로 지정하여 쾌적한 명령어 응답 속도를 확보함.
  3. ui: 인터페이스 환경 (User Interface Environment)
    • theme: 터미널 출력 색상을 dark로 설정하여, 어두운 배경에서 눈이 편안하도록 가독성을 높임.
    • language: 응답 언어를 한국어(ko)로 고정하여, 언제나 자연스러운 한국어로 소통하도록 함.
  4. tools: 도구 사용 권한 (Tool Permissions)
    • 역할: AI에게 허용할 특수 능력을 제어함.
    • 설정: google_web_search를 켜두어(true), AI가 모르는 최신 정보도 실시간으로 검색해 답변할 수 있게 함.

2-3 Step 1 / Step 2프로젝트 설정 만들기:

2-3-1 Basics and System Information Class

Step 1에서는 AI가 명령어를 대신 실행시키지 않고, 오직 '설명'만 해주는 방식으로 동작함.

  • 여러분이 직접 타이핑하며 명령어를 손에 익히는 것이 목표로 동작.
  • AI의 직접 명령어 실행이 위험한 경우에 해당 설정을 응용가능함.
  • Step 1에 해당하는 디렉토리에만 적용됨: Project Settings

이 Project Settings 을 위한 설정 파일의 위치 및 설정 내용.

 

설정 파일 위치:

  • ./Step1_Basic_and_SystemInfo/.gemini/settings.json

설정 (Configuration):

{
    "$schema": "https://raw.githubusercontent.com/google-gemini/gemini-cli/main/schemas/settings.schema.json",
    "model": "gemini-1.5-flash",
    "agent": {
        "instruction": "너는 엄격하지만 친절한 터미널 명령어를 알려주는 조교야. .env에 정의된 OS_TYPE을 확인하여 해당 운영체제에 맞는 명령어  (ls/dir 등)를 알려주고, STUDENT_LEVEL에 맞춰서 아주 쉽게 설명해줘. 절대로 명령어를 대신 실행하지 말고 학생이 직접 타이핑하도록 유도해."
    },
    "tools": {
        "run_shell_command": { "enabled": false }
    }
}
  1. $schema: 에디터의 길잡이 (The Editor's Guide)
    • 역할: JSON 파일 구조를 정의하여 설정 파일 작성 시 오류를 방지함.
    • 효과: 초보자가 실수로 설정 파일을 잘못 건드리지 않도록 에디터 수준에서 가이드를 제공함.
  2. model: 교육용 최적화 모델 (Education-Optimized Model)
    • 역할: 기초 개념 설명에 적합한 가볍고 빠른 모델을 선택함.
    • 선택: 복잡한 추론보다는 명확한 설명이 중요하므로 gemini-1.5-flash 모델을 사용하여 빠른 반응성을 유지함.
  3. agent: 교육 조교 페르소나 (Teaching Assistant Persona)
    • 역할: AI가 단순히 정답을 주는 기계가 아니라, '선생님'으로서 학생을 지도하도록 설정함.
    • 지침: "명령어를 대신 실행하지 말고 설명만 하라"는 지침을 통해 학생이 직접 키보드를 치며 배우도록 유도함.
  4. tools: 실행 권한 제한 (Restricted Permissions)
    • 역할: AI가 시스템을 마음대로 조작하는 것을 원천적으로 차단함.
    • 설정: run_shell_command, write_file, read_file을 모두 false로 설정하여, AI가 '말로만' 설명할 수밖에 없는 안전 모드(Safe Mode)를 강제함.

2-3-2 Step 2: Advanced File Ops & Env Variables Class

Step 2에서는 AI가 사용자를 대신해 복잡한 작업을 수행하거나 직접 실행을 돕는 방식으로 동작함.

  • 명령어의 원리를 넘어, 실무적인 파일 관리와 시스템 환경 제어 능력을 키우는 것을 목표로 함.
  • 반복적인 파일 복사/이동 작업이나 복잡한 환경변수 설정 등 전문적인 작업이 필요할 때 응용 가능.
  • 일반적으로 Gemini CLI 와 같은 AI를 이용할 때의 기본적인 상황임.
  • Step 2에 해당하는 디렉토리에만 적용되는 프로젝트 설정(Project Setting)임.

이 Project Settign을 위한 설정 파일의 위치 및 설정 내용.

 

위치:

  • ./Step2_File_and_Env/.gemini/settings.json

설정 (Configuration):

{
    "$schema": "https://raw.githubusercontent.com/google-gemini/gemini-cli/main/schemas/settings.schema.json",
    "model": "gemini-3.0-pro",
    "agent": {
    	"instruction": "너는 베테랑 시스템 엔지니어야. .env의 OS_TYPE과 STUDENT_LEVEL을 확인해서 그에 맞는 파일 조작 및 환경변수 설정법을 실무 관점에서 알려줘. 필요하면 직접 스크립트를 작성해서 실행까지 도와줘."
    },
    "tools": {
    	"run_shell_command": { "enabled": true },
    	"write_file": { "enabled": true },
    	"read_file": { "enabled": true }
    }
}
  1. $schema: 에디터의 길잡이 (The Editor's Guide)
    • 역할: 복잡한 설정을 추가할 때 문법 오류를 잡아주는 설계도 역할.
    • 효과: 심화 단계에서 다양한 옵션을 실험할 때 안전망을 제공함.
  2. model: 전문가용 고성능 모델 (Expert High-Performance Model)
    • 역할: 복잡한 시스템 명령과 스크립트 로직을 처리할 수 있는 고지능 모델을 선택함.
    • 선택: gemini-3.0-pro 모델을 사용하여 단순 명령어를 넘어, 조건문이나 자동화 스크립트까지 정확하게 생성하도록 함.
  3. agent: 엔지니어 페르소나 (Engineer Persona)
    • 역할: AI를 실무적인 문제를 해결해 주는 '든든한 선배 엔지니어'로 설정함.
    • 지침: "직접 수행하고 실무 관점에서 알려달라"는 지침을 통해, 이론보다는 실제 해결 능력에 초점을 맞춤.
  4. tools: 풀 액세스 권한 (Full Access Permissions)
    • 역할: AI가 시스템 관리자처럼 자유롭게 컴퓨터를 제어할 수 있도록 함.
    • 설정:
      • run_shell_command: true (파일 이동, 복사 명령 직접 실행)
      • write_file: true (자동화 스크립트 파일 생성)
      • read_file: true (설정 파일이나 로그 내용 읽기)
      • 이 모든 도구를 활성화하여 진정한 자동화 비서로 동작하게 함.

2-4 .env 파일 설정하기

이번 절에서는 .env 파일을 활용하는 방법을 소개함.

2-4-1 .env 파일이란? (What is .env?)

  • 원래 용도 (Standard Usage):
    • API 키(GEMINI_API_KEY)나 비밀번호처럼
    • 남에게 보여주면 안 되는 민감한 정보(Secrets)를 안전하게 관리하기 위해 사용하는 파일.
  • 이번 실습에서의 활용 (Tutorial Usage):
    • 이 파일이 'AI가 읽을 수 있는 변수 저장소'라는 점을 이용하여,
    • 운영체제 종류나 학습 수준 같은 추가 정보를 전달하는 메모장으로 활용함.

2-4-2 .env 파일의 우선순위 (Priority of .env)

  1. 현재 프로젝트 폴더 (Local):
    • Step1이나 Step2 프로젝트 폴더 안의 .env.
    • 가장 구체적인 정보(STUDENT_LEVEL 등)를 저장.(e.g., STUDENT_LEVEL).
  2. User Global Folder (Global/Default):
    • ~/.gemini/.env
    • 컴퓨터 전체에서 해당 사용자가 공통으로 사용하는 정보를 저장(예: API_KEY나 사용자 이름)

Gemini CLI는 기본적으로 명령어를 실행하는 현재 작업 디렉토리(Current Working Directory)에서 .env 파일을 찾음.

따라서 우리가 진행하는 튜토리얼의 구조에서는 각 단계별 폴더 안에 각각 .env 파일을 만드는게 권장됨.

2-4-3 설정에서 사용할 .env

AI가 윈도우용(dir) 명령어를 줄지, 맥용(ls) 명령어를 줄지 판단할 수 있도록 정보를 남김.

 

Windows (CMD):

echo OS_TYPE=Windows_CMD > .env
echo STUDENT_LEVEL=Beginner >> .env

macOS (Zsh):

echo "OS_TYPE=macOS_Zsh" > .env
echo "STUDENT_LEVEL=Beginner" >> .env

 

앞서 Step1과 Step2의 settings.json 에서 agent설정부분에서 이를 참고하도록 지시하고 있음.


3. 연습 시나리오

다음의 시나리오 별로 해당 폴더에서 해당 질문을 수행해볼 것:

3-1. 시나리오 A: "내 컴퓨터 시스템의 정보를 확인하기"

상황: Step 1 폴더에서 Gemini에게 질문 (터미널에서 해당 폴더로 이동 후 gemini 입력).

질문: "내 컴퓨터 이름이랑 OS 버전이 뭔지 알고 싶어."

  • Gemini (Windows):
    • "CMD에서는 hostname을 치면 컴퓨터 이름이 나옵니다."
    • "OS 버전은 ver 명령어로 간단히 보거나, systeminfo로 아주 자세히 볼 수 있어요."
    • (명령어만 알려주고 실행은 안 함)
  • Gemini (macOS):
    • "Zsh에서는 hostname으로 이름을 확인합니다."
    • "OS 버전은 sw_vers 명령어를 사용하세요. 커널 정보는 uname -a로 봅니다."
    • (명령어만 알려주고 실행은 안 함)

3-2 시나리오 B: "파일과 폴더를 생성 및 복사, 이동하기"

상황: Step 2 폴더에서 Gemini에게 질문 (터미널에서 해당 폴더로 이동 후 gemini 입력).

질문: "현재 폴더에 memo.txt 파일을 만들고, Backup 폴더를 만들어서 거기로 복사해줘. 그리고 원본은 지워줘(이동)."

  • Gemini 3 (Windows):
    • "네, 엔지니어님. 다음 작업을 순차적으로 수행합니다."
      1. echo 내용 > memo.txt (파일 생성)
      1. mkdir Backup (폴더 생성)
      1. move memo.txt Backup\ (파일 이동)
    • (직접 명령어를 실행하여 완료)
  • Gemini 3 (macOS):
    • "알겠습니다. Zsh 명령어로 처리하겠습니다."
      1. touch memo.txt (파일 생성)
      1. mkdir Backup (폴더 생성)
      1. mv memo.txt Backup/ (파일 이동)
    • (직접 명령어를 실행하여 완료)

3-3 시나리오 C: "환경변수 생성하기"

질문: "환경변수가 뭐야? 나만의 변수를 만들고 싶어."

  • Gemini 3 (공통 답변): "환경변수는 컴퓨터가 기억하는 '전역 변수'입니다. 마치 게임의 '저장된 슬롯'처럼, 어디서든 꺼내 쓸 수 있는 값이죠."
  • 실습 (Windows): "CMD에서는 set MY_VAR=Hello라고 입력합니다. 확인은 echo %MY_VAR%로 합니다."
  • 실습 (macOS): "Zsh에서는 export MY_VAR=Hello라고 입력합니다. 확인은 echo $MY_VAR로 합니다."

같이 보면 좋은 자료들

https://github.com/google-gemini/gemini-cli/blob/main/docs/get-started/configuration-v1.md

 

gemini-cli/docs/get-started/configuration-v1.md at main · google-gemini/gemini-cli

An open-source AI agent that brings the power of Gemini directly into your terminal. - google-gemini/gemini-cli

github.com

 

2024.05.20 - [utils/cmd and powershell] - [cmd] command prompt 연습하기 (file, dir 사용하기)

 

[cmd] command prompt 연습하기 (file, dir 사용하기)

CMD 프롬프트 기초 튜토리얼: 파일 및 디렉토리 다루기1. CMD 프롬프트 열기Windows 키 + R을 눌러 실행 창을 엽니다.cmd를 입력하고 Enter를 누릅니다.기본적으로 현재 User의 home 디렉토리를 cwd (current wo

ds31x.tistory.com

https://dsaint31.me/mkdocs_site/OS/linux_cmds/

 

BME

명령어 (Linux) 이 문서는 Linux의 bash(Bourne Again SHell)에서 사용되는 기본적인 명령어를 소개합니다. Bash는 Linux의 Terminal과 사용되는 Shell임. Linux의 기본적인 명령어를 실행하고, 간단한 스크립트 (.sh

dsaint31.me

2023.06.20 - [개발환경] - [Env] Environment Variable (환경변수)

 

[Env] Environment Variable (환경변수)

정의Environment variable (환경변수) 란,OS나 SW에서 참조하는 변수들로OS나 SW가 동작 (or 실행)에 영향을 주는 값을 가짐.shell script 나 software들이 각 장비의 환경에 맞게 동작할 수 있도록 해 줌.종류Envr

ds31x.tistory.com

 


 

728x90

'CE' 카테고리의 다른 글

특수키의 role과 notation - Special Key  (0) 2026.01.09
Shell (Python Shell 포함) 의 키보드 단축키에 대해  (0) 2026.01.07
glob 이란?  (0) 2025.10.04
Font: TTF vs. OTF  (1) 2025.09.20
Open Source Licenses  (0) 2025.09.19