API를 통해 Nano Banana를 사용하는 방법 (2026)
Nano Banana AI 추론을 위한 전체 API 연동 가이드
Hypereal로 구축 시작하기
단일 API를 통해 Kling, Flux, Sora, Veo 등에 액세스하세요. 무료 크레딧으로 시작하고 수백만으로 확장하세요.
신용카드 불필요 • 10만 명 이상의 개발자 • 엔터프라이즈 지원
2026년 API를 통한 Nano Banana 사용 가이드
Banana(최신 버전에서는 흔히 Nano Banana로 불림)는 개발자가 간단한 API를 통해 머신러닝 모델을 배포하고 실행할 수 있게 해주는 서버리스 GPU 추론 플랫폼입니다. GPU 인프라를 직접 관리하지 않고도 이미지 생성, 언어 모델 또는 커스텀 ML 모델을 위한 빠르고 확장 가능한 추론 환경이 필요하다면 Banana가 명확한 솔루션을 제공합니다.
이 가이드에서는 Python 및 JavaScript 코드 예제와 함께 Nano Banana를 애플리케이션에 통합하는 데 필요한 모든 내용을 다룹니다.
Nano Banana란 무엇인가요?
Nano Banana는 Banana 추론 플랫폼의 경량화 및 비용 최적화 계층입니다. 다음 사항에 집중합니다:
- Cold start 최적화: 사전 준비된(pre-warmed) 컨테이너를 통해 모델이 더 빠르게 가동됩니다.
- 초당 과금 방식(Pay-per-second): 실제 컴퓨팅 시간만큼만 비용을 지불합니다.
- 간단한 REST API: 표준 HTTP 요청을 사용하며 별도의 SDK가 필요하지 않습니다.
- 커스텀 모델 지원: Hugging Face의 모든 모델이나 사용자의 자체 체크포인트를 배포할 수 있습니다.
사전 준비 사항
시작하기 전에 다음이 필요합니다:
- banana.dev의 Banana 계정
- Banana 대시보드에서 발급받은 API key
- Model ID (사전 구축된 모델 또는 직접 배포한 모델)
- 코드 예제 실행을 위한 Python 3.8+ 또는 Node.js 18+
1단계: API 인증 정보 가져오기
banana.dev에 가입하고 대시보드의 API Keys 섹션으로 이동합니다. 다음 정보가 필요합니다:
- API Key: 인증 토큰
- Model Key: 호출하려는 모델의 고유 식별자
2단계: 첫 번째 API 호출하기 (Python)
Banana Python SDK를 설치합니다:
pip install banana-dev
다음은 text-to-image 모델을 호출하는 기본 예제입니다:
import banana_dev as banana
api_key = "your-api-key"
model_key = "your-model-key"
payload = {
"prompt": "a futuristic city at sunset, cyberpunk style, 4k",
"num_inference_steps": 30,
"guidance_scale": 7.5,
"width": 1024,
"height": 1024
}
result = banana.run(api_key, model_key, payload)
print(result["modelOutputs"])
3단계: 첫 번째 API 호출하기 (JavaScript)
fetch를 사용하여 REST API를 직접 호출하는 방식입니다:
const API_KEY = "your-api-key";
const MODEL_KEY = "your-model-key";
async function runInference() {
const response = await fetch("https://api.banana.dev/start/v4/", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
apiKey: API_KEY,
modelKey: MODEL_KEY,
modelInputs: {
prompt: "a futuristic city at sunset, cyberpunk style, 4k",
num_inference_steps: 30,
guidance_scale: 7.5,
width: 1024,
height: 1024,
},
}),
});
const data = await response.json();
console.log(data);
}
runInference();
4단계: 비동기 작업(Async) 처리
실행 시간이 긴 작업의 경우, Banana는 비동기 패턴을 사용합니다. 작업을 시작한 후 결과를 폴링(poll)하여 가져옵니다:
import banana_dev as banana
import time
api_key = "your-api-key"
model_key = "your-model-key"
# 작업 시작
payload = {
"prompt": "a detailed portrait of a cyberpunk warrior",
"num_inference_steps": 50,
}
# 비동기 작업 시작
start_result = banana.start(api_key, model_key, payload)
call_id = start_result["callID"]
print(f"Job started with callID: {call_id}")
# 완료 여부 폴링
while True:
check_result = banana.check(api_key, call_id)
if check_result["message"] == "success":
print("Result:", check_result["modelOutputs"])
break
elif check_result["message"] == "error":
print("Error:", check_result)
break
print("Still processing...")
time.sleep(2)
5단계: 커스텀 모델 배포
사용자 정의 모델을 Banana에 배포할 수 있습니다. Dockerfile과 app.py를 생성합니다:
# app.py - Banana 모델 서버
from potassium import Potassium, Request, Response
from transformers import pipeline
app = Potassium("my-model")
@app.init
def init():
model = pipeline("text-generation", model="meta-llama/Llama-3-8b")
context = {"model": model}
return context
@app.handler()
def handler(context: dict, request: Request) -> Response:
model = context["model"]
prompt = request.json.get("prompt", "")
max_tokens = request.json.get("max_tokens", 100)
result = model(prompt, max_new_tokens=max_tokens)
return Response(json={"output": result[0]["generated_text"]}, status=200)
if __name__ == "__main__":
app.serve()
Dockerfile:
FROM pytorch/pytorch:2.1.0-cuda12.1-cudnn8-runtime
WORKDIR /app
COPY . .
RUN pip install potassium transformers torch
EXPOSE 8000
CMD ["python", "app.py"]
Banana CLI를 사용하여 배포합니다:
banana deploy
API 엔드포인트 참조
| 엔드포인트 | 메소드 | 설명 |
|---|---|---|
/start/v4/ |
POST | 동기식 추론 작업 시작 |
/start/v4/async |
POST | 비동기식 추론 작업 시작 |
/check/v4/ |
POST | 비동기 작업 상태 확인 |
/cancel/v4/ |
POST | 실행 중인 작업 취소 |
요청 및 응답 형식
요청 본문(Request body):
{
"apiKey": "your-api-key",
"modelKey": "your-model-key",
"modelInputs": {
"prompt": "your prompt here",
"parameter1": "value1",
"parameter2": "value2"
},
"startOnly": false
}
응답 본문(Response body - 성공):
{
"id": "call-abc123",
"message": "success",
"created": 1707235200,
"apiVersion": "v4",
"modelOutputs": [
{
"image_base64": "iVBORw0KGgo...",
"seed": 42
}
]
}
가격 비교
| 플랫폼 | 가격 모델 | Cold Start | GPU 옵션 |
|---|---|---|---|
| Nano Banana | 초당 과금 | 최적화됨 | A100, A10G, T4 |
| Replicate | 초당 과금 | 가변적임 | A100, A40, T4 |
| fal.ai | 초당 과금 | 빠름 | A100, H100 |
| Hypereal AI | 생성 건당 과금 | Cold Start 없음 | 관리형 |
| RunPod | 초당 과금 | 가변적임 | 다양한 선택지 |
에러 처리 베스트 프랙티스
항상 적절한 에러 처리와 재시도 로직을 구현하세요:
import banana_dev as banana
import time
def run_with_retry(api_key, model_key, payload, max_retries=3):
for attempt in range(max_retries):
try:
result = banana.run(api_key, model_key, payload)
if result.get("message") == "success":
return result["modelOutputs"]
if "cold start" in str(result.get("message", "")).lower():
print(f"Cold start detected, retrying ({attempt + 1}/{max_retries})...")
time.sleep(5)
continue
raise Exception(f"API error: {result.get('message')}")
except Exception as e:
if attempt == max_retries - 1:
raise
print(f"Attempt {attempt + 1} failed: {e}. Retrying...")
time.sleep(2 ** attempt)
raise Exception("Max retries exceeded")
# 사용 예시
result = run_with_retry(
api_key="your-api-key",
model_key="your-model-key",
payload={"prompt": "a beautiful landscape painting"}
)
웹훅(Webhook) 지원
프로덕션 애플리케이션에서는 폴링 대신 웹훅을 사용하세요:
payload = {
"prompt": "a cinematic shot of a mountain range",
"num_inference_steps": 50,
}
result = banana.start(
api_key,
model_key,
payload,
webhook={
"url": "https://your-app.com/api/banana-webhook",
"headers": {"Authorization": "Bearer your-secret"}
}
)
작업이 완료되면 웹훅 엔드포인트에서 결과를 수신합니다:
# Flask 웹훅 핸들러 예제
from flask import Flask, request
app = Flask(__name__)
@app.route("/api/banana-webhook", methods=["POST"])
def banana_webhook():
data = request.json
call_id = data["id"]
outputs = data["modelOutputs"]
# 결과 처리
print(f"Job {call_id} completed with outputs: {outputs}")
return {"status": "ok"}, 200
문제 해결
긴 Cold Start 시간: 일정에 따라 더미 요청을 보내 모델을 미리 예열(Pre-warm)하세요. Nano Banana의 최적화 계층은 Cold Start를 줄여주지만, 오랜 비활성 기간 이후에는 여전히 발생할 수 있습니다.
타임아웃 에러: 클라이언트 측 타임아웃 설정을 늘리고, 30초 이상 걸리는 추론 작업은 비동기(async) 모드를 사용하세요.
속도 제한(Rate limiting): Banana는 플랜에 따라 속도 제한을 적용합니다. 제한에 도달하면 지수 백오프(exponential backoff)를 구현하거나 플랜을 업그레이드하세요.
모델 배포 실패:
Dockerfile에 누락된 종속성이 있는지 확인하세요. 서버 측 에러 메시지를 보려면 banana logs를 사용하세요.
결론
Nano Banana는 간단한 API와 초당 과금 방식을 통해 서버리스 GPU 추론을 위한 견고한 플랫폼을 제공합니다. 사전 구축된 이미지 생성 모델을 실행하든 커스텀 ML 모델을 배포하든, Python과 JavaScript 모두에서 통합 과정이 간편합니다.
모델 배포를 직접 관리하지 않고 더욱 단순하게 AI 미디어를 생성하고 싶다면 Hypereal AI를 고려해 보세요. 이미지 생성, 비디오 제작, 립싱크 등을 처리하는 통합 API를 제공하며, 건당 과금 방식과 Cold Start 없는 환경을 지원하므로 인프라 관리보다 제품 구축에 집중하고자 하는 개발자에게 이상적입니다.
