실무 Multi-Agent 오케스트레이션 2장 · 개발 환경 구성과 LLM API 호출 6 / 9 ← 이전목차다음 → TechLead Cro

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로 이 설정을 가져다 씁니다.
← 이전 절API 키 발급과 .env 파일다음 절 →따라하기 — 첫 LLM 호출
오명운 · macro@prag-ai.com