배치 API: 안 쓰면 손해인 LLM 50% 할인
배치 API란 무엇인가
배치 API는 OpenAI와 Anthropic이 제공하는 별도 엔드포인트로, JSONL 형식으로 요청 묶음을 업로드하면 비동기로 처리해 결과를 반환합니다. 처리 시간은 SLA상 최대 24시간이며 표준 가격 대비 50% 할인이 적용됩니다. 동기 API와 결과 품질은 완전히 동일합니다 — 같은 모델, 같은 토크나이저, 같은 추론. 차이는 단지 처리 시점만 보장되지 않는다는 것입니다.
왜 이렇게 큰 할인이 가능할까요? 공급자 입장에서 배치는 GPU 클러스터의 한가한 시간대(미국 새벽, 유럽 점심시간 등)에 묶어서 처리할 수 있어 실시간 트래픽이 몰리는 시간을 피할 수 있습니다. 클러스터 활용률이 시간대에 따라 30~90%로 출렁이는데, 한가한 시간에 배치를 채워 넣으면 동일 인프라로 더 많은 처리량을 뽑아낼 수 있습니다 — 50% 할인은 그 효율의 일부를 사용자에게 돌려주는 것입니다.
언제 배치를 써야 하나
"24시간 안에만 결과가 나오면 되는" 모든 워크로드에 배치를 써야 합니다. 거의 모든 비실시간 LLM 사용 사례가 여기에 해당합니다:
- 야간 분석 파이프라인: 일일 사용자 행동 로그 요약, 감정 분석, 토픽 분류 — 새벽에 배치 제출, 출근 시간에 결과 확인.
- 콘텐츠 모더레이션 큐: 사용자 제출 게시물의 안전성 검사 — 즉시 결과가 필요한 라이브 채팅 외에는 거의 모두 배치 가능.
- 임베딩 생성: 새 문서 코퍼스를 벡터화하는 1회성/주기적 작업 — 항상 배치.
- 데이터 라벨링: 학습 데이터셋 자동 라벨링, 합성 데이터 생성 — 사람보다 빠르고 저렴.
- 마이그레이션 백필: 기존 콘텐츠를 새 모델로 재처리(요약 재생성, 번역 업그레이드 등) — 한 번만 하면 되는 작업.
- 리포트 및 다이제스트: 일일/주간 뉴스레터, 요약 메일 — 발송 시점 24시간 전에 배치 제출.
배치가 부적합한 경우는 명확합니다: 사용자가 화면 앞에서 응답을 기다리는 모든 사례 — 챗봇, 검색 자동완성, 대화형 어시스턴트, 코드 자동완성, 라이브 번역 등. 이런 워크로드에는 표준 동기 API를 사용하되, 비대화 부분(분석/요약 등)은 별도로 배치로 분리하세요.
OpenAI Batch API — 실용 가이드
OpenAI 배치는 JSONL 파일을 업로드 → 배치 생성 → 폴링/웹훅으로 결과 수신의 3단계입니다. 한 줄에 하나의 요청을 JSONL로 작성하면 됩니다:
{"custom_id": "req-1", "method": "POST", "url": "/v1/chat/completions",
"body": {"model": "gpt-5.4-mini", "messages": [{"role":"user","content":"Hello"}]}} 파일 업로드는 /v1/files, 배치 생성은 /v1/batches 엔드포인트를 사용합니다. completion_window: "24h" 파라미터로 SLA를 명시하며 — 현재는 24시간이 유일한 옵션입니다. 배치 상태는 validating → in_progress → finalizing → completed 순서로 진행되며, completed 상태가 되면 결과 JSONL 파일을 다운로드할 수 있습니다.
지원 모델: GPT-5.5, GPT-5.4 및 GPT-5.4 mini, GPT-5.4 nano, GPT-5.3-codex, 그리고 일부 구버전 GPT-4 계열. 모든 임베딩 모델(text-embedding-3-small, -large)도 지원합니다. o1/o3 추론 모델은 배치 비지원 (실시간 추론 토큰 처리 특성 때문). 가격 페이지의 "Batch" 컬럼이 정확한 적용 모델 목록입니다.
제한: 한 배치당 최대 50,000 요청, 파일 크기 100MB. 더 큰 워크로드는 분할 — 분할 자체에는 비용/지연 페널티가 없습니다. 큐 깊이는 enqueued tokens 기준 모델별 한도가 있어 (예: GPT-5.4-mini는 50M 토큰까지 큐 대기 가능) 매우 큰 작업은 시간 분산 제출 필요.
Anthropic Message Batches API
Anthropic 배치는 OpenAI보다 더 단순한 API입니다. JSONL 파일 업로드 단계 없이, 요청 배열을 직접 단일 POST로 제출하면 됩니다 (배치당 100,000 요청, 256MB 한도):
{
"requests": [
{"custom_id": "req-1",
"params": {"model": "claude-sonnet-4-6", "max_tokens": 1024,
"messages": [{"role":"user","content":"Hello"}]}},
{"custom_id": "req-2", "params": {...}}
]
} 지원 모델: Claude Opus 4.7/4.6/4.5/4.1, Claude Sonnet 4.6/4.5, Claude Haiku 4.5. 거의 모든 현재 Claude 모델이 배치를 지원합니다. 가격은 표준 대비 50% 일률 할인 — 입력, 출력, 캐시 쓰기 모두 절반 가격. 캐시 읽기 단가는 이미 매우 낮아서 배치에서도 동일하게 유지됩니다.
가장 강력한 조합: 배치 + 프롬프트 캐싱. 큰 시스템 프롬프트를 캐시에 두고 배치로 여러 사용자 메시지를 처리하면, 캐시 prefix는 캐시 읽기 단가($0.30/1M), 사용자 메시지와 출력은 배치 단가(표준의 50%)로 처리됩니다. 5만 토큰 시스템 프롬프트 + 1만 사용자 메시지 워크로드의 경우 표준 가격 약 $1,500 → 캐시 + 배치 적용 약 $90 — 약 94% 절감.
실제 절감액: 워크로드 규모별 시뮬레이션
GPT-5.4 mini ($0.75 입력 / $4.50 출력) 기준, 요청당 2,000 입력 + 500 출력 토큰의 워크로드:
- 월 10,000 요청: 표준 $37.50/월 → 배치 $18.75/월 — 월 $18.75 절감
- 월 100,000 요청: 표준 $375/월 → 배치 $187.50/월 — 월 $187.50 절감
- 월 1,000,000 요청: 표준 $3,750/월 → 배치 $1,875/월 — 월 $1,875 절감, 연 $22,500
- 월 10,000,000 요청: 표준 $37,500/월 → 배치 $18,750/월 — 월 $18,750 절감, 연 $225,000
플래그십 모델(Claude Opus 4.7, GPT-5.5)에서는 절감액이 5~6배 커집니다. 월 100만 요청 워크로드에서 GPT-5.5 표준 $40,000/월 → 배치 $20,000/월 — 월 $20,000 절감. 일부 워크로드(분석/리포트)는 충분히 비동기로 옮길 수 있으므로, 배치를 안 쓰는 것은 가장 큰 무료 최적화를 무시하는 셈입니다.
배치 + 동기 하이브리드 아키텍처
대부분 프로덕션 시스템은 100% 동기도 100% 배치도 아닙니다. 워크로드를 라우터로 분리하세요:
- 실시간 큐: 사용자 대면 요청은 표준 동기 API. 지연이 답변 품질의 일부.
- 배치 큐: 백그라운드 작업(요약, 분류, 리포트) — Cron이나 큐 워커가 N분마다 모아서 배치 제출.
- 폴백: 배치 작업이 SLA 만료(24h) 직전인데도 완료되지 않으면 표준 API로 재제출. 매우 드물지만 안전장치로 필요.
배치 큐 워커의 핵심은 "지연 허용 시간"입니다. 5분 이내 결과가 필요한 작업은 동기, 24시간까지 허용되면 배치. 그 사이(예: 1시간 이내)는 동기로 처리하되 비용 측면에서는 손실. 워크로드 분류를 명시적으로 하지 않으면 모든 비실시간 작업이 동기 API로 흘러가 무료 50% 할인을 영구히 놓치게 됩니다.
자주 묻는 함정
- 잘못된 모델로 배치 생성: 가격 페이지의 "Batch" 컬럼이 없는 모델은 배치 엔드포인트가 거부합니다. 새 모델 출시 직후 며칠~몇 주는 배치 지원이 없는 경우가 흔하니, 새 모델로 마이그레이션할 때 배치 지원 여부를 먼저 확인하세요.
- JSONL 형식 오류: 한 줄에 정확히 하나의 JSON 객체 — 줄바꿈 누락이나 추가 공백이 흔한 실패 원인. 대용량 파일은 항상 작은 샘플(10개 줄)로 먼저 테스트.
- custom_id 누락/중복: 응답을 원본 요청과 매칭하려면 custom_id가 필요합니다. 누락하거나 중복되면 결과를 다시 정렬할 수 없어 작업 전체를 재실행해야 할 수 있습니다.
- 토큰 한도 초과: 모델별로 enqueued tokens 한도가 있어 매우 큰 배치는 거부될 수 있습니다 — 작업을 시간대별로 나누어 제출.
- 오류 결과 처리 누락: 배치 내 일부 요청이 실패해도 배치 전체는 completed 상태가 됩니다. 결과 JSONL의
error필드를 반드시 확인하고 실패한 요청을 재시도 로직에 넣으세요.
자주 묻는 질문
배치 API의 처리 시간이 정말 24시간이나 걸리나요?
항상 그런 것은 아닙니다. 24시간은 SLA(보증되는 최대 시간)이며 실제로는 대부분 작업이 10분~2시간 안에 끝납니다. OpenAI와 Anthropic 모두 한가한 시간대에는 거의 즉시 처리되기도 합니다. 다만 SLA가 24시간이므로 실시간 사용 사례에는 부적합하며, 그 사이 어떤 보증도 없다는 점을 인지하고 설계해야 합니다.
배치 작업 중간에 취소할 수 있나요?
예. OpenAI와 Anthropic 모두 진행 중인 배치를 취소할 수 있는 엔드포인트를 제공합니다. 이미 처리된 부분은 청구되지만, 아직 처리되지 않은 부분은 청구되지 않습니다. 잘못된 요청 파일을 제출했을 때 빠르게 정정할 수 있어 유용합니다.
배치 API에서도 프롬프트 캐싱이 적용되나요?
Anthropic은 예 — 배치 요청에도 cache_control 브레이크포인트를 사용할 수 있으며, 비캐시 토큰은 배치 할인(50%), 캐시 토큰은 캐시 읽기 단가가 별도 적용됩니다. 이 둘을 결합하면 가장 유리한 종합 단가가 나옵니다. OpenAI는 배치 처리에 자동 캐싱이 동일하게 적용됩니다.
배치 요청 한 번에 얼마나 많은 작업을 넣을 수 있나요?
OpenAI는 한 배치당 최대 50,000개 요청, JSONL 파일 크기 100MB 제한. Anthropic은 한 배치당 최대 100,000개 요청, 256MB 제한. 더 큰 워크로드는 여러 배치로 분할하면 됩니다. 분할 자체는 추가 비용이 없습니다.