2장 · 개발 환경 구성과 LLM API 호출실습 환경 한눈에 보기 — 딱 한 번만 하면 됩니다도구 설치 — Git, 미니콘다, VS Code프로젝트 폴더 세팅 — haru-market 폴더 만들기가상환경과 라이브러리 설치API 키 발급과 .env 파일따라하기 — 환경 점검따라하기 — 첫 LLM 호출정리와 체크리스트실습문제와 해답
2장. 개발 환경 구성과 LLM API 호출
따라하기 — 환경 점검
목표
환경이 제대로 갖춰졌는지 제공된 config.py를 실행해 확인합니다. 그리고 이 파일이 앞으로의 실습에서 무엇을 해 주는지 봅니다.
0. 실습 준비
VS Code에서 haru-market 폴더를 열고 터미널(Ctrl + `)에서 환경을 켭니다.
$ conda activate myenv
프롬프트 앞에 (myenv)가 보이는지 확인합니다.
1. 환경 점검 — config.py 실행
제공된 config.py를 직접 실행하면 설정 상태를 알려 줍니다.
$ python config.py
이렇게 나오면 성공입니다.
프로젝트 폴더 : C:\Users\사용자명\Documents\haru-market
데이터 폴더 : C:\Users\사용자명\Documents\haru-market\data (있음)
기본 모델 : gemini-3.8-flash
임베딩 모델 : models/gemini-embedding-001
API 키 : 찾음
경로는 본인 컴퓨터에 따라 다르게 나옵니다. 봐야 할 것은 두 곳입니다.
- 데이터 폴더 줄 끝의
(있음) - 마지막 줄의
API 키 : 찾음
| 이렇게 나오면 | 원인과 조치 |
|---|---|
API 키 : 없음 |
.env 파일이 없거나, 키를 넣고 저장하지 않았습니다. 앞 절 「API 키 발급과 .env 파일」로 돌아갑니다 |
데이터 폴더 … (없음) |
폴더가 두 겹이거나 다른 위치에서 실행했습니다. pwd로 위치를 확인합니다 |
ModuleNotFoundError: No module named 'dotenv' |
(myenv)가 꺼져 있거나 라이브러리를 설치하지 않았습니다. conda activate myenv 후 pip install -r requirements.txt |
python: can't open file 'config.py' |
터미널 위치가 haru-market이 아닙니다. cd ~/Documents/haru-market |
2. config.py가 하는 일
이 파일은 고칠 필요가 없지만, 앞으로 모든 실습 파일이 불러 쓰므로 무엇을 해 주는지는 알아 둡니다. VS Code에서 config.py를 열어 보세요.
# -*- coding: utf-8 -*-
"""모든 장 공통 설정 — .env 로드, Gemini 클라이언트, 데이터 경로.
모든 lesson 파일은 이 모듈을 통해 클라이언트를 얻는다:
from config import get_client, MODEL
client = get_client()
"""
import os
from pathlib import Path
from dotenv import load_dotenv
# 프로젝트 루트 (이 파일이 있는 폴더)
ROOT = Path(__file__).resolve().parent
DATA_DIR = ROOT / "data"
# .env 를 읽어 환경변수로 등록 (.env 는 커밋 금지)
load_dotenv(ROOT / ".env")
MODEL = os.getenv("GEMINI_MODEL", "gemini-3.8-flash")
EMBEDDING_MODEL = os.getenv("GEMINI_EMBEDDING_MODEL", "models/gemini-embedding-001")
def get_client():
"""google-genai 클라이언트를 생성한다. GOOGLE_API_KEY 가 없으면 안내 후 종료."""
from google import genai
api_key = os.getenv("GOOGLE_API_KEY")
if not api_key or api_key.startswith("여기에"):
raise SystemExit(
"[설정 필요] GOOGLE_API_KEY 가 없습니다.\n"
" 1) https://aistudio.google.com/apikey 에서 키 발급\n"
" 2) 프로젝트 루트에서: cp .env.example .env\n"
" 3) .env 파일에 키 입력 후 다시 실행"
)
return genai.Client(api_key=api_key)
def print_usage(response, label: str = ""):
"""응답의 토큰 사용량을 출력 — 2장부터 '비용 감각'을 잡는 습관."""
u = response.usage_metadata
print(f" [토큰{(' ' + label) if label else ''}] "
f"입력 {u.prompt_token_count} + 출력 {u.candidates_token_count} "
f"= 총 {u.total_token_count}")
if __name__ == "__main__":
# 환경 점검: python config.py
key = os.getenv("GOOGLE_API_KEY") or ""
ok = bool(key) and not key.startswith("여기에")
print("프로젝트 폴더 :", ROOT)
print("데이터 폴더 :", DATA_DIR,
"(있음)" if DATA_DIR.exists() else "(없음 — 폴더 위치를 확인하세요)")
print("기본 모델 :", MODEL)
print("임베딩 모델 :", EMBEDDING_MODEL)
print("API 키 :",
"찾음" if ok else "없음 — .env 파일에 GOOGLE_API_KEY 를 넣으세요")
| 이름 | 하는 일 |
|---|---|
ROOT, DATA_DIR |
프로젝트 폴더와 data 폴더의 위치. 어디서 실행해도 같은 곳을 가리킵니다 |
load_dotenv(...) |
.env 파일을 읽어 그 안의 값을 프로그램이 쓸 수 있게 올립니다 |
MODEL, EMBEDDING_MODEL |
.env에 적힌 모델 이름. 없으면 기본값을 씁니다 |
get_client() |
API 키로 Gemini 클라이언트를 만들어 돌려줍니다. 키가 없으면 무엇을 해야 하는지 알려 주고 멈춥니다 |
print_usage(response) |
응답의 토큰 사용량을 한 줄로 출력합니다 |
클라이언트(client) 는 "Gemini에 요청을 보내는 창구" 객체입니다. 실습 파일들은 맨 위에서 이렇게 시작합니다.
from config import MODEL, get_client
client = get_client()
핵심 정리
python config.py에서API 키 : 찾음이 보이면 환경 준비가 끝난 것입니다.config.py는.env를 읽고, Gemini 클라이언트를 만들어 주는 공통 설정입니다.- 실습 파일은 맨 위에서
from config import MODEL, get_client로 이 설정을 가져다 씁니다.