5강 — LLM API 연동 (OpenRouter)
🎯 학습 목표
- LLM을 코드로 호출한다는 것의 의미를 웹 채팅과 비교해 설명할 수 있다
- GPT·Claude를 직접 연동하지 않고 OpenRouter를 쓰는 이유를 이해할 수 있다
- API 키가 무엇이고 왜 코드에 직접 적으면 안 되는지 설명할 수 있다
- 실제로 AI를 호출하는 코드를 작성할 수 있다
📖 해설
지난 시간 데이터 품질 검증 프로젝트로 정제된 리뷰가 준비됐습니다(결측치 처리·중복 제거·분석 대상 언어 필터링 등). 이제 진짜 재미있는 부분이에요. 이 데이터를 AI에게 분석시키는 첫 걸음, 바로 LLM API 연동입니다. 생각보다 간단해요. 코드 몇 줄이면 AI에게 질문하고 답을 받습니다.
1. LLM 서비스에는 뭐가 있나
| 서비스 | 만든 곳 | 특징 |
|---|---|---|
| ChatGPT | OpenAI | 가장 유명한 AI 챗봇 |
| Claude | Anthropic | 긴 문서 처리에 강함 |
| Gemini | 무료로 사용 가능 | |
| Grok | xAI(일론 머스크) | 트위터(X)와 연동 |
이런 AI들은 웹사이트에서 채팅으로만 쓰는 게 아니라 코드로 호출할 수도 있습니다. 그게 바로 LLM API예요. 우리 프로그램이 AI에게 질문하고 답을 받는 거죠.
2. 왜 OpenRouter인가
GPT도, Claude도, Gemini도 써보고 싶다면? 직접 연동하려면 각각 회원가입하고, 각각 결제수단을 등록하고, 코드도 각각 다르게 작성해야 합니다. 너무 번거롭죠. 이걸 해결해 주는 게 OpenRouter입니다.
OpenRouter는 여러 AI 모델을 하나의 창구로 쓰게 해주는 서비스예요. 우리 코드가 OpenRouter에 요청을 보내면, OpenRouter가 원하는 AI 모델에게 대신 전달하고 응답을 받아옵니다. 장점 세 가지:
- 하나의 API — 코드를 한 번 배우면 GPT든 Claude든 Gemini든 다 씁니다.
- 무료 모델 지원 — Gemini 같은 무료 모델을 결제수단 없이 시작할 수 있습니다. (단, 인기 있는 무료 모델은 사용량이 다 차서 에러가 나기도 해요.)
- 쉬운 전환 — 다른 모델로 바꾸고 싶으면 코드 한 줄만 수정하면 됩니다.
3. API 키 = 나를 인증하는 비밀번호
API 키는 나를 인증하는 비밀번호입니다. 도서관 회원증으로 생각하면 쉬워요. 책을 빌리려면 회원증을 보여줘야 하듯, API를 쓰려면 API 키를 보내야 합니다. 회원증을 잃어버리면 남이 내 이름으로 책을 빌릴 수 있듯, API 키가 유출되면 남이 내 계정으로 AI를 써서 비용이 청구될 수 있어요. 그래서 절대 남에게 보여주면 안 됩니다. 비밀번호와 똑같이 다루세요.
발급 방법: openrouter.ai 접속 → 회원가입 → 우측 상단 API Keys 메뉴 → 키 생성(이름은 기억하기 좋게, 예: "AI 리뷰") → 복사해서 안전한 곳에 저장. ⚠️ 이 키는 처음 한 번만 보여주므로, 놓치면 다시 만들어야 합니다. 만료 기간은 개발용이면 무기한도 괜찮지만, 기간을 정하면 보안이 더 높아집니다.
4. API 키 관리 — Colab Secrets를 쓰세요
| 방법 | 문제/장점 | |
|---|---|---|
| ❌ 위험 | 코드에 키를 직접 입력 | 노트북을 공유하면 키도 같이 넘어감 |
| ✅ 안전 | Colab Secrets에 저장하고 코드에서 불러오기 | 코드에 키가 안 보여 공유해도 안전 |
Colab Secrets 설정: 왼쪽 사이드바의 열쇠 모양 아이콘 클릭 → 시크릿 패널 → 새 비밀 추가(+) → 이름에 OPENROUTER_API_KEY(인식할 이름), 값에 발급받은 키 붙여넣기 → 노트북 액세스 토글을 켜서 활성화. (권한을 부여해야 코드에서 그 키를 가져다 쓸 수 있습니다.)
이 방식은 OpenRouter뿐 아니라 유명한 LLM API를 쓸 때 공통으로 쓰는 표준 방법입니다. 기억해 두세요.
5. 실습 — 4단계로 첫 호출
실습은 ① 라이브러리 설치 → ② API 키 불러오기 → ③ 클라이언트 설정 → ④ 첫 호출, 네 단계입니다.
# ① 라이브러리 설치
# OpenRouter는 'OpenAI 호환' API를 제공하므로, openai 라이브러리를 그대로 쓴다.
# (ChatGPT가 초기 대표 LLM이라 API 사용 표준을 정했다고 보면 된다)
# 설치: pip install openai
# ② API 키 불러오기 (Colab Secrets에서 — 코드에 키를 직접 적지 않는다!)
from google.colab import userdata
api_key = userdata.get('OPENROUTER_API_KEY') # Secrets에 저장한 그 이름
# 키가 제대로 불려왔는지 먼저 확인한다. (앞 15자만 보여 키 전체는 가린다)
# 'OPENROUTER_API_KEY' 철자가 틀렸거나 '노트북 액세스' 토글을 안 켜면 None이 와서 여기서 걸린다.
if api_key:
print(f"키 확인: {api_key[:15]}...")
else:
print("API 키가 설정되지 않았습니다. Colab Secrets의 이름과 노트북 액세스 토글을 확인하세요.")
# ③ 클라이언트 설정
from openai import OpenAI
client = OpenAI(
base_url="https://openrouter.ai/api/v1", # ← OpenRouter 주소(이게 핵심)
api_key=api_key, # ← 방금 불러온 키
)
# ④ 첫 호출
response = client.chat.completions.create(
model="google/gemini-2.0-flash-exp:free", # ← 이 칸만 바꾸면 모델 교체
messages=[
{"role": "user", "content": "게임 리뷰 분석이 왜 중요한가요?"}
],
)
# 응답 구조: choices[0] → message → content 에 답변 텍스트가 들어 있다
print(response.choices[0].message.content)
# 이번 호출에 쓴 토큰 수(비용과 직결)
print(response.usage.total_tokens)
호출이 끝나면 한 번에 정리해서 확인하는 습관을 들이면 좋습니다. 답변과 토큰 수를 함께 출력해 두면, 질문을 바꿔 가며 실험할 때 비용 감각을 같이 익힐 수 있어요.
# 한 응답에서 답변과 토큰 수를 같이 출력 — 실험할 때 매번 이 형식으로 확인하면 편하다
print("=== 응답 정보 ===")
print(f"AI 답변: {response.choices[0].message.content}")
print(f"사용한 토큰: {response.usage.total_tokens}개")
같은 모델로 질문만 바꿔 가며 여러 번 시도해 보고 싶다면, 질문을 변수로 빼 두면 편합니다. content에 넣는 문자열만 바꾸면 되니까, 게임 리뷰를 하나씩 넣어 보며 AI 반응을 살피기에 좋아요.
# 질문을 변수로 빼 두면, 이 값만 바꿔서 같은 코드로 계속 실험할 수 있다
my_question = "게임 리뷰 분석이 왜 중요한가요?"
response = client.chat.completions.create(
model="google/gemini-2.0-flash-exp:free", # 모델은 그대로 두고 질문만 바꾼다
messages=[
{"role": "user", "content": my_question}
],
)
print(response.choices[0].message.content)
출력 내용은 어떤 모델을 쓰는지, 그날 그날의 응답에 따라 매번 조금씩 달라집니다. 토큰 수나 답변 문장이 위 예시와 똑같지 않아도 정상이에요.
6. 모델 교체 & rate limit
위 코드에서 model 칸만 바꾸면 여러 모델을 쓸 수 있습니다. 그런데 인기 있는 무료 모델(예: Gemini 2.0)은 사용량이 다 차서 rate limit error(사용량 초과) 가 날 때가 있어요. 당황하지 말고 OpenRouter 사이트의 모델 목록에서 free로 검색 → 다른 무료 모델(예: Mistral) 선택 → 모델 ID 복사 → model 칸에 붙여넣기 하면 됩니다. 이게 OpenRouter의 힘이에요. 외국 모델이 대다수지만 한국어도 대체로 잘 됩니다.
7. 응답 구조와 토큰
응답에서 답변을 꺼내는 경로 response.choices[0].message.content는 OpenAI 라이브러리가 정한 규칙이라 그대로 따라야 합니다. 그리고 토큰은 AI가 처리하는 텍스트 단위인데, 대략 영어 4글자 또는 한글 1~2글자가 1토큰입니다. 유료 모델은 토큰당 비용이 드니, 비용을 아끼려고 일부러 한국어를 영어로 바꿔서 요청을 보내는 경우도 있어요. (지금은 무료 모델이라 크게 걱정 안 해도 됩니다.)
🔑 핵심 용어
| 용어 | 쉬운 설명 |
|---|---|
| LLM API | 코드로 AI에게 질문하고 답을 받는 통로 |
| OpenRouter | 여러 AI 모델을 하나의 API로 쓰게 해주는 서비스 |
| API 키 | 나를 인증하는 비밀번호. 절대 유출 금지 |
| Colab Secrets | 키를 안전하게 저장·사용하는 Colab 기능 |
base_url |
요청을 보낼 주소(OpenRouter 주소를 넣음) |
chat.completions.create |
AI를 호출하는 메서드 |
choices[0].message.content |
답변 텍스트가 들어 있는 위치 |
| 토큰 | AI 처리 단위(영어 4자/한글 1~2자 ≈ 1토큰), 과금 기준 |
| rate limit | 사용량 초과 에러. 다른 모델로 바꾸면 됨 |
🎮 게임 기획자 시점
"코드 한 줄(model)만 바꾸면 모델을 교체한다"는 OpenRouter의 구조는, 기획자에게 모델을 갈아 끼우며 품질·비용·속도를 비교 실험할 자유를 줍니다. 우리 게임 리뷰엔 어떤 모델이 한국어를 잘 잡고 싸게 먹히는지 직접 테스트해 BM(분석 운영비)을 설계할 수 있어요. 또 "무료로 시작 → 필요할 때 유료 전환"은 기능을 MVP로 검증하고 확장하는 기획 흐름과 똑같습니다.
⚠️ 흔한 오해 / 짚고 갈 점
- API 키를 코드에 직접 적지 마세요. 노트북을 공유하면 키가 통째로 새어 나가 비용 폭탄을 맞을 수 있습니다. Colab Secrets를 쓰세요.
- 무료 모델이 안 될 때는 고장이 아닙니다.
rate limit이면 다른 무료 모델로 바꾸면 됩니다.
✅ 30초 정리
- LLM API는 결국 코드로 AI에게 질문하는 것. 몇 줄이면 됩니다.
- OpenRouter로 여러 모델을 하나의 API로 쓰고,
model한 줄만 바꿔 교체합니다. - API 키는 비밀번호 — 코드에 직접 적지 말고 Colab Secrets로 안전하게 관리하세요.
▶️ 다음 강 연결
호출은 성공했습니다. 그런데 같은 질문이라도 어떻게 묻느냐에 따라 답변 품질이 완전히 달라져요. 다음 6강에서 AI에게 잘 질문하는 기술 프롬프트 엔지니어링(역할 부여·출력 형식 지정)을 배우고, 게임 리뷰 감성 분석 함수를 직접 만듭니다.