본문 바로가기
C.W.K.
Stream
Lesson 04 of 06 · published

인증 방법

~12 min · auth, api-key, oauth, service-account

Level 0불씨
0 XP0/35 lessons0/10 achievements
0/140 XP to next level140 XP to go0% complete

세 가지 인증, 세 가지 쓰임새

Gemini를 호출하는 쪽은 반드시 자기 신원을 밝혀야 해. 방법은 세 가지이고, 누가 호출의 주체인가에 따라 답이 정해져:

  1. API 키 — 애플리케이션 자체가 주체야. 가장 단순하고 AI Studio에 맞아.
  2. OAuth 2.0 — 최종 사용자가 주체고 앱은 그 사람을 대신해 Gemini를 호출해. 검색 API처럼 데이터가 Google 계정 범위에 묶인 경우에 써.
  3. 서비스 계정 — 서버 쪽 신원이 주체야. Vertex AI와 운영 GCP 작업에 맞아.

API 키 — 30초 경로

AI Studio에서 키를 받은 뒤 GEMINI_API_KEYGOOGLE_API_KEY로 설정하면 SDK가 자동으로 읽어. 둘 다 설정했을 때는 GOOGLE_API_KEY가 우선이야. 키를 커밋하거나 브라우저에서 실행되는 JavaScript에 넣으면 절대 안 돼. 키가 새면 청구서가 폭발할 뿐 아니라, 누군가 그 키로 민망한 콘텐츠를 만들어 계정 평판까지 망칠 수 있어.

OAuth 2.0 — 사용자가 데이터의 소유자일 때

로그인한 사용자의 Drive, Gmail, Generative Language 검색 데이터처럼 그 사람의 권한으로 행동해야 하는 앱에는 OAuth가 필요해. 흐름은 표준 Google OAuth야. 동의 화면으로 보내고, 받은 코드를 갱신 토큰과 액세스 토큰으로 교환한 뒤 필요할 때 토큰을 갱신해.

서비스 계정 — Vertex 운영 환경의 기본값

Vertex AI에서는 Application Default Credentials(ADC)가 권장 방식이야. SDK가 서비스 계정 JSON, 워크로드 아이덴티티 바인딩, 로컬의 gcloud auth application-default login 같은 환경에서 자격 증명을 찾아. 코드에 키를 넣을 필요가 없어.

Code

API 키 경로(AI Studio)·bash
# .env (gitignored)
GEMINI_API_KEY=AIzaSy...

# 또는 일회성 shell
export GEMINI_API_KEY=AIzaSy...
코드에서 API 키 사용하기·python
from google import genai

# env 의 GEMINI_API_KEY (또는 GOOGLE_API_KEY) 읽음
client = genai.Client()

# 명시적 (덜 흔함; 테스트에 유용)
client = genai.Client(api_key='AIzaSy...')

# Raw HTTP 등가
# curl 'https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent' \
#   -H "x-goog-api-key: $GEMINI_API_KEY" \
#   -H 'Content-Type: application/json' \
#   -d '{"contents":[{"parts":[{"text":"Hello"}]}]}'
OAuth — 사용자를 대신해 행동하기·python
from google.auth.transport.requests import Request
from google.oauth2.credentials import Credentials
from google_auth_oauthlib.flow import InstalledAppFlow
import os

SCOPES = ['https://www.googleapis.com/auth/generative-language.retriever']

def load_creds():
    creds = None
    if os.path.exists('token.json'):
        creds = Credentials.from_authorized_user_file('token.json', SCOPES)
    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            creds.refresh(Request())
        else:
            flow = InstalledAppFlow.from_client_secrets_file(
                'client_secret.json', SCOPES)
            creds = flow.run_local_server(port=0)
        with open('token.json', 'w') as f:
            f.write(creds.to_json())
    return creds
서비스 계정 / ADC(Vertex)·python
from google import genai

# 로컬 dev: `gcloud auth application-default login` 한 번이면
# ADC 자동 작동.
# Server: GOOGLE_APPLICATION_CREDENTIALS=/path/to/sa.json
#         (또는 GKE/Cloud Run 이면 workload identity)

client = genai.Client(
    vertexai=True,
    project='my-prod-project',
    location='us-central1',
)
# 코드에 key 없음. ADC 가 옳은 credential 자동 resolve.

External links

Exercise

새 Python 환경에 Gemini 인증 경로 두 가지를 설정해. (1) 로컬 .env에서 API 키 읽기, (2) 위 OAuth 흐름으로 개인 Google 계정 인증하기야. 각 경로에서 generateContent를 한 번씩 호출해 둘 다 작동하는지 확인하고, 다음 프로젝트에서 어느 방식을 쓸지 한 문장으로 정해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.