Gemini

Gemini 2.0 Flash deprecated 완전 가이드: 지금 당장 마이그레이션 해야 하는 이유

cell-devlog 2026. 6. 8. 16:39
반응형

 

6월 1일자로 gemini-2.0-flash가 종료됐습니다. 아직 코드베이스에 이 모델 ID가 박혀 있다면 지금 API 호출이 404를 뱉고 있습니다.

핵심 요약 → gemini-2.0-flash-001, gemini-2.0-flash-lite-001 2026년 6월 1일 완전 종료 → 별도 fallback 없음 — 여전히 해당 모델 ID 사용 중이면 현재 API 호출 실패 → 직접 교체 대상: gemini-2.5-flash (성능 우선) 또는 gemini-2.5-flash-lite (비용 우선) → 점프 마이그레이션 옵션: gemini-3.5-flash — 5월 19일 GA 출시, 코딩·에이전틱 최강 → gemini-2.5-flash도 2026년 10월 16일 종료 예정 — 지금 2.5로 가면 4.5개월 뒤 또 마이그레이션 → 비용 주의: gemini-2.5-flash thinking 토큰 미설정 시 실제 비용 2~3배 폭증 → gemini-3.5-flash 기본 thinking_level: medium — 이전 모델에서 이전 시 명시 설정 필수 → gemini-3.5-flash TTFT(첫 토큰 시간) 기본값 17~19초 — 실시간 UX엔 thinking_budget: 0 필수 → Imagen 모델도 6월 24일 종료 예정 — Gemini Image 모델로 동시 마이그레이션 필요 → Gemini API 과금 체계도 변경됨 — 4월부터 prepaid 방식, Tier 1($250), Tier 2($2,000) 월 한도


실전 1: 지금 무슨 일이 벌어지고 있나 — 종료 타임라인 전체

Google은 2026년 2월 18일 Gemini 2.0 Flash 계열 전체에 deprecated 공지를 냈습니다. 이미 종료된 것들과 앞으로 종료될 것들을 한 번에 정리합니다.

모델 ID 종료일 상태

gemini-1.0-pro 계열 전체 이미 종료 ❌ 404 반환
gemini-1.5-flash, gemini-1.5-pro 이미 종료 ❌ 404 반환
gemini-3-pro-preview 2026년 3월 9일 ❌ 이미 종료
gemini-2.0-flash-001 2026년 6월 1일 현재 종료
gemini-2.0-flash-lite-001 2026년 6월 1일 현재 종료
gemini-3.1-flash-lite-preview 종료 완료 ❌ 종료
gemini-2.5-flash 2026년 10월 16일 ⚠️ 4.5개월 남음
gemini-3.1-flash-image-preview 2026년 6월 25일 ⚠️ D-17
gemini-3-pro-image-preview 2026년 6월 25일 ⚠️ D-17
Imagen 계열 전체 2026년 6월 24일 ⚠️ D-16

중요한 것은 자동 fallback이 없다는 점입니다. gemini-2.0-flash를 하드코딩한 코드는 6월 1일 이후 아무 경고 없이 API 오류를 반환합니다. alias(gemini-2.0-flash — 버전 번호 없는 것)도 동일하게 종료됐습니다.


실전 2: 마이그레이션 경로 3가지 — 뭘 골라야 하나

gemini-2.0-flash에서 이동할 수 있는 경로는 세 가지입니다. 상황에 따라 선택이 달라집니다.

경로 1 — gemini-2.5-flash-lite (비용 최우선)

gemini-2.0-flash를 쓰던 팀 중 비용이 최우선이라면 이게 맞는 경로입니다.

gemini-2.5-flash-lite는 gemini-2.0-flash와 토큰당 가격이 동일합니다($0.10/$0.40 per M). 그러면서 출력 토큰 한도가 8배 늘었습니다. 분류, 추출, 단순 요약처럼 복잡한 추론이 필요 없는 작업은 여기가 최적입니다.

# Before
model = genai.GenerativeModel("gemini-2.0-flash")

# After (비용 유지)
model = genai.GenerativeModel("gemini-2.5-flash-lite")

단, gemini-2.5-flash-lite도 2026년 10월 16일에 종료됩니다. 지금 마이그레이션하면 4.5개월 뒤 한 번 더 해야 합니다.

경로 2 — gemini-2.5-flash (성능·비용 균형)

복잡한 추론이 필요하거나 품질을 높이고 싶은 팀의 기본 선택지입니다.

가격은 $0.30/$2.50 per M으로 gemini-2.0-flash 대비 입력 3배, 출력 6.25배 비쌉니다. 그런데 여기서 절대 놓치면 안 되는 함정이 있습니다.

gemini-2.5-flash는 기본적으로 thinking 모드가 활성화돼 있습니다. thinking 토큰은 출력 요금($2.50/M)으로 과금됩니다. 설정을 안 하면 실제 비용이 공시 가격의 2~3배가 될 수 있습니다.

# thinking 비활성화 — 비용 통제 필수
response = model.generate_content(
    prompt,
    generation_config=genai.GenerationConfig(
        thinking_config={"thinking_budget": 0}  # 반드시 명시
    )
)

이 모델도 2026년 10월 16일 종료 예정입니다.

경로 3 — gemini-3.5-flash (점프 마이그레이션, 권장)

한 번만 마이그레이션하고 싶은 팀, 또는 에이전틱·코딩 작업이 많은 팀에게 권장합니다.

gemini-3.5-flash는 2026년 5월 19일 GA 출시됐고 현재 종료 일정이 공지되지 않았습니다. 지금 2.5로 가면 10월에 또 해야 하지만, 3.5로 점프하면 당분간 추가 마이그레이션 없이 사용할 수 있습니다.

성능도 다릅니다. Gemini 3.5 Flash는 코딩과 에이전틱 벤치마크에서 Gemini 3.1 Pro를 넘어섰습니다. Terminal-Bench 2.1 76.2%, MCP Atlas 83.6% — Flash 티어 모델이 이전 세대 Pro를 능가하는 첫 사례입니다.

가격은 $1.50/$9.00 per M으로 2.0 Flash 대비 비쌉니다. 단 thinking_level 설정에 따라 실제 비용이 크게 달라집니다.

모델 입력 (/M) 출력 (/M) 종료일 추천 상황

gemini-2.0-flash $0.10 $0.40 ❌ 종료
gemini-2.5-flash-lite $0.10 $0.40 2026.10.16 단순 작업, 비용 최우선
gemini-2.5-flash $0.30 $2.50 2026.10.16 범용, thinking 비활성화 시
gemini-3.5-flash $1.50 $9.00 미정 에이전틱·코딩, 장기 운영

실전 3: 실제 코드 마이그레이션 — Python SDK 기준 완전 가이드

SDK 패키지 확인

먼저 SDK 버전을 확인합니다. 구버전 SDK는 새 모델 ID를 지원하지 않을 수 있습니다.

# 현재 설치된 버전 확인
pip show google-generativeai

# 최신 버전으로 업그레이드
pip install --upgrade google-generativeai

# 또는 새 SDK 사용 (권장)
pip install google-genai

기본 마이그레이션 — 모델 ID 교체

대부분의 경우 모델 ID 교체만으로 마이그레이션이 완료됩니다.

import google.generativeai as genai

# ❌ 종료된 모델
model = genai.GenerativeModel("gemini-2.0-flash")
model = genai.GenerativeModel("gemini-2.0-flash-001")
model = genai.GenerativeModel("gemini-2.0-flash-lite")

# ✅ 비용 유지 (단순 작업)
model = genai.GenerativeModel("gemini-2.5-flash-lite")

# ✅ 성능·비용 균형 (thinking 반드시 비활성화)
model = genai.GenerativeModel(
    "gemini-2.5-flash",
    generation_config=genai.GenerationConfig(
        thinking_config={"thinking_budget": 0}
    )
)

# ✅ 점프 마이그레이션 (에이전틱·코딩)
model = genai.GenerativeModel("gemini-3.5-flash")

Gemini 3.5 Flash thinking_level 명시 설정

gemini-3.5-flash로 마이그레이션할 때 가장 많이 놓치는 부분입니다. 이전 모델들의 기본 thinking 수준과 다르게 설정돼 있어서 명시하지 않으면 예상과 다른 품질과 비용이 나옵니다.

from google import genai
from google.genai import types

client = genai.Client()

# ✅ 실시간 UX — thinking 비활성화 (TTFT 17~19초 → 즉각 응답)
response = client.models.generate_content(
    model="gemini-3.5-flash",
    contents="사용자 질문",
    config=types.GenerateContentConfig(
        thinking_config=types.ThinkingConfig(
            thinking_budget=0  # thinking 완전 비활성화
        )
    )
)

# ✅ 복잡한 추론 작업 — thinking 활성화
response = client.models.generate_content(
    model="gemini-3.5-flash",
    contents="복잡한 코드 리뷰 요청",
    config=types.GenerateContentConfig(
        thinking_config=types.ThinkingConfig(
            thinking_budget=8192  # 예산 명시
        )
    )
)

# ✅ 에이전틱 파이프라인 — thinking_level로 제어
response = client.models.generate_content(
    model="gemini-3.5-flash",
    contents=prompt,
    config=types.GenerateContentConfig(
        thinking_config=types.ThinkingConfig(
            thinking_level="medium"  # minimal | low | medium | high
        )
    )
)

환경변수로 모델 ID 추상화 — 향후 마이그레이션 대비

이번 deprecated 사태로 배운 교훈은 모델 ID를 코드에 하드코딩하면 매번 코드를 수정해야 한다는 것입니다. 환경변수로 분리하면 다음 마이그레이션 때 코드 수정 없이 설정 변경만으로 대응할 수 있습니다.

import os
import google.generativeai as genai

# 환경변수로 분리
GEMINI_MODEL = os.getenv("GEMINI_MODEL", "gemini-3.5-flash")
GEMINI_FALLBACK_MODEL = os.getenv("GEMINI_FALLBACK_MODEL", "gemini-2.5-flash")

def get_model(use_fallback=False):
    model_id = GEMINI_FALLBACK_MODEL if use_fallback else GEMINI_MODEL
    return genai.GenerativeModel(model_id)

# .env 파일
# GEMINI_MODEL=gemini-3.5-flash
# GEMINI_FALLBACK_MODEL=gemini-2.5-flash-lite

실전 4: 비용 함정 — thinking 토큰이 청구서를 폭탄으로 만드는 방법

이번 마이그레이션에서 가장 많은 팀이 당하는 함정입니다. 단순히 모델 ID만 바꿨다가 다음 달 청구서를 보고 당황하는 경우입니다.

문제 구조

gemini-2.5-flash와 gemini-3.5-flash는 기본적으로 thinking 모드가 활성화돼 있습니다. Thinking 토큰은 사용자에게 보이지 않지만 내부적으로 생성되며, 출력 토큰 요금으로 과금됩니다.

예를 들어 gemini-2.5-flash($2.50/M output)로 단순 분류 작업을 1,000만 회 돌리면, thinking 없이는 $25지만 thinking이 응답당 500토큰씩 발생하면 $37.5로 50% 초과됩니다. 복잡한 프롬프트에서는 2~3배까지 치솟을 수 있습니다.

실제 비용 추정 코드

def estimate_monthly_cost(
    requests_per_day: int,
    avg_input_tokens: int,
    avg_output_tokens: int,
    model: str = "gemini-3.5-flash",
    thinking_tokens_per_request: int = 0
):
    pricing = {
        "gemini-2.5-flash-lite": {"input": 0.10, "output": 0.40},
        "gemini-2.5-flash":      {"input": 0.30, "output": 2.50},
        "gemini-3.5-flash":      {"input": 1.50, "output": 9.00},
    }
    
    p = pricing[model]
    monthly_requests = requests_per_day * 30
    
    input_cost  = (monthly_requests * avg_input_tokens / 1_000_000) * p["input"]
    output_cost = (monthly_requests * (avg_output_tokens + thinking_tokens_per_request) / 1_000_000) * p["output"]
    
    return {
        "monthly_cost_usd": round(input_cost + output_cost, 2),
        "input_cost": round(input_cost, 2),
        "output_cost": round(output_cost, 2)
    }

# 사용 예시
print(estimate_monthly_cost(
    requests_per_day=10000,
    avg_input_tokens=500,
    avg_output_tokens=200,
    model="gemini-2.5-flash",
    thinking_tokens_per_request=500  # thinking 활성화 시
))
# {'monthly_cost_usd': 157.5, 'input_cost': 45.0, 'output_cost': 112.5}

print(estimate_monthly_cost(
    requests_per_day=10000,
    avg_input_tokens=500,
    avg_output_tokens=200,
    model="gemini-2.5-flash",
    thinking_tokens_per_request=0  # thinking 비활성화
))
# {'monthly_cost_usd': 60.0, 'input_cost': 45.0, 'output_cost': 15.0}

실전 5: Imagen 모델도 6월 24일 종료 — 동시 대응 필요

Gemini 2.0 Flash와 함께 Imagen 계열도 6월 24일 종료됩니다. 이미지 생성 기능을 사용 중이라면 함께 대응해야 합니다.

# ❌ 종료 예정 (6월 24일)
model = "imagen-3.0-generate-001"
model = "imagen-3.0-fast-generate-001"

# ✅ 대체 모델 — Gemini Image 계열 ("Nano Banana" 모델)
# Firebase AI Logic 기준
model = "gemini-3.1-flash-image"   # 일반 이미지 생성
model = "gemini-3.1-flash-image-lite"  # 경량 버전

실전 6: 마이그레이션 체크리스트

마이그레이션 전에 확인해야 할 항목들입니다.

□ 코드베이스 전체에서 gemini-2.0-flash 문자열 검색
  grep -r "gemini-2.0-flash" . --include="*.py" --include="*.js" --include="*.ts"

□ 환경변수 파일(.env, config.yaml 등)에서 모델 ID 확인

□ CI/CD 파이프라인 설정 파일에서 모델 ID 확인

□ 마이그레이션 대상 모델 선정 (워크로드 유형별로 다름)
  - 단순 분류·추출: gemini-2.5-flash-lite
  - 범용 생성: gemini-2.5-flash (thinking_budget: 0 설정)
  - 에이전틱·코딩: gemini-3.5-flash

□ thinking 설정 명시 여부 확인 (2.5/3.5 Flash 모두)

□ TTFT 요구사항 확인 (실시간 UX면 thinking_budget: 0 필수)

□ 스테이징 환경에서 비용 실측 후 프로덕션 배포

□ Imagen 모델 사용 여부 확인 (6월 24일 종료)

□ 모델 ID 환경변수로 추상화 (하드코딩 제거)

□ gemini-2.5-flash 사용 시 10월 16일 재마이그레이션 일정 캘린더에 등록

정리 → gemini-2.0-flash, gemini-2.0-flash-lite 6월 1일 종료 완료, 현재 API 호출 실패 → 비용 유지: gemini-2.5-flash-lite ($0.10/$0.40), 단순 작업 최적 → 성능·비용 균형: gemini-2.5-flash — thinking_budget: 0 설정 필수 → 장기 운영·에이전틱: gemini-3.5-flash로 점프 마이그레이션 권장 → gemini-2.5-flash도 10월 16일 종료 — 지금 2.5 가면 4.5개월 후 또 마이그레이션 → thinking 토큰 미설정 시 실제 비용 2~3배 폭증 주의 → Imagen 계열도 6월 24일 종료 예정, 동시 대응 필요

주의사항 → gemini-3.5-flash 기본 TTFT 17~19초 — 실시간 UX에서 thinking_budget: 0 필수 → gemini-3-flash-preview → gemini-3.5-flash 이전 시 기본 thinking_level 변경됨 → 모델 alias(gemini-2.0-flash — 버전 없는 형태)도 동일하게 종료

 

반응형