구글 나노 바나나 2 API 사용법

Ashley Innocent

Ashley Innocent

27 February 2026

구글 나노 바나나 2 API 사용법

Apidog 엔터프라이즈

온프레미스 배포

SSO & RBAC

SOC 2 준수

Apidog Enterprise 살펴보기

AI 이미지 생성으로 애플리케이션을 구축하는 것은 마법처럼 느껴집니다. 하지만 복잡한 API 문서, 인증 문제, 디버깅 악몽에 부딪히기 전까지는요. Nano Banana 2가 무엇을 할 수 있는지 보셨을 겁니다: 텍스트 프롬프트로 생성되는 멋진 이미지, Flash 속도의 전문가 수준 출력, 그리고 다중 이미지 워크플로우를 가능하게 하는 주제 일관성 같은 기능들 말이죠. 하지만 이것을 실제로 코드베이스에 통합하는 것은? 대부분의 개발자가 막히는 부분입니다.

아마 Google 문서를 뒤지고, 인증 흐름을 조립하고, CLI에서 수동으로 요청을 테스트하느라 애쓰셨을 겁니다. 잘못된 요청을 디버깅하느라 API 할당량을 이미 소진했거나, 이미지가 매번 흐릿하게 돌아오는 이유를 궁금해했을 수도 있습니다. 사실, Nano Banana 2처럼 강력한 새 API를 통합하는 것은 단순히 문서를 읽는 것 이상의 노력이 필요합니다. 신속하게 테스트하고, 프롬프트를 반복하고, API 호출을 효율적으로 관리할 수 있는 워크플로우가 필요합니다.

💡
바로 이 지점에서 Apidog가 빛을 발합니다. Apidog는 Nano Banana 2와 같은 API 작업의 모든 단계를 간소화하는 완벽한 API 개발 플랫폼입니다. 테스트, 디버깅, 문서화를 위한 별도의 도구를 사용하는 대신, Apidog는 통합된 작업 공간을 제공합니다.
다운로드

이 가이드에서는 Google Cloud 프로젝트 설정부터 Python 및 JavaScript로 프로덕션 준비 코드를 작성하는 것까지, Nano Banana 2를 애플리케이션에 통합하는 데 필요한 모든 것을 안내합니다. 하지만 이 가이드를 특별하게 만드는 점은 다음과 같습니다. Apidog를 사용하여 모든 단계를 테스트하고 디버깅하는 방법을 보여드림으로써, 단순히 코드를 복사하는 것이 아니라 유지보수 및 확장이 가능한 워크플로우를 구축하도록 돕습니다.

사전 준비 사항

시작하기 전에 다음 사항을 확인하세요:

이 가이드는 HTTP 요청을 만들고 JSON 데이터를 처리하는 데 익숙하다고 가정합니다. API가 처음이라면, 기본적인 내용을 다루는 API 테스팅 가이드를 참조하세요.

Google Cloud 프로젝트 설정

Nano Banana 2 API를 사용하려면 Generative Language API가 활성화된 Google Cloud 프로젝트가 필요합니다.

1단계: 새 프로젝트 생성

  1. Google Cloud Console로 이동
  2. "프로젝트 선택" → "새 프로젝트" 클릭
  3. 프로젝트 이름 입력 (예: "nano-banana-image-gen")
  4. "만들기" 클릭
  5. 프로젝트가 생성될 때까지 기다립니다
Google Cloud 프로젝트 생성

2단계: API 액세스 구성

  1. "API 및 서비스" → "사용자 인증 정보"로 이동
  2. "사용자 인증 정보 만들기" → "API 키" 클릭
  3. API 키 복사 (나중에 필요합니다)
Google Cloud 프로젝트에서 API 키 생성
전문가 팁:

API 키 가져오기

API에 액세스하는 방법은 두 가지입니다:

옵션 1: Google Cloud Console (프로덕션 환경에 권장)

위에 설명된 단계를 따르세요. 생성한 API 키가 액세스 자격 증명입니다.

옵션 2: Google AI Studio (개발 환경에 권장)

  1. Google AI Studio로 이동
  2. Google 계정으로 로그인
  3. 탐색 메뉴에서 "API 키 가져오기" 클릭
  4. "API 키 만들기" (또는 기존 프로젝트 선택) 클릭
  5. API 키 복사
Google AI Studio에서 API 키 생성

AI Studio 키는 개발 및 테스트에 유용합니다. 프로덕션 환경에서는 더 나은 관리와 보안을 위해 Google Cloud Console 키를 사용하세요.

첫 API 요청

모든 것이 작동하는지 확인하기 위해 간단한 이미지 생성 요청을 해봅시다.

cURL 사용

curl -X POST \
  "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash-exp-image-generation:predict?key=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "A cute banana character wearing sunglasses, fun cartoon style",
    "number_of_images": 1
  }'

응답 이해

{
  "predictions": [
    {
      "image": {
        "mimeType": "image/png",
        "data": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQ42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg=="
      },
      "generatedImageId": "img_abc123xyz",
      "metadata": {
        "prompt": "A cute banana character wearing sunglasses, fun cartoon style",
        "seed": 12345,
        "finishReason": "SUCCESS"
      }
    }
  ],
  "metadata": {
    "modelVersion": "gemini-3.1-flash-image-preview",
    "processingTimeMs": 1250,
    "contentAuthenticity": {
      "synthID": "enabled",
      "c2pa": "enabled"
    }
  }
}

data 필드는 base64로 인코딩된 PNG 이미지를 포함합니다. 이미지를 저장하거나 표시하려면 디코딩해야 합니다.

Python 통합

Python 애플리케이션에 Nano Banana 2를 통합하는 방법은 다음과 같습니다:

클라이언트 라이브러리 설치

pip install google-generativeai

기본 이미지 생성

import google.generativeai as genai
import base64
import os

# Configure the API with your key
genai.configure(api_key=os.environ.get("GEMINI_API_KEY"))

# Create the model
model = genai.GenerativeModel("gemini-3.1-flash-image-preview")

# Generate an image
response = model.generate_images(
    prompt="A modern minimalist office with natural lighting, indoor plants, standing desk, 4k quality",
    number_of_images=1
)

# Save the image
if response.generated_images:
    image_data = response.generated_images[0].image_bytes
    with open("output_image.png", "wb") as f:
        f.write(image_data)
    print("Image saved to output_image.png")

매개변수를 사용한 고급 이미지 생성

import google.generativeai as genai
from PIL import Image
import io

genai.configure(api_key=os.environ.get("GEMINI_API_KEY"))

model = genai.GenerativeModel("gemini-3.1-flash-image-preview")

# Generate with advanced parameters
response = model.generate_images(
    prompt="A futuristic cityscape at night with neon lights, flying cars, cyberpunk aesthetic",
    number_of_images=1,
    aspect_ratio="16:9",
    negative_prompt="blurry, low quality, distorted, ugly",
    safety_filter_level="block_medium_and_above"
)

# Process the response
for idx, generated_image in enumerate(response.generated_images):
    # Convert to PIL Image
    image = Image.open(io.BytesIO(generated_image.image_bytes))

    # Save with custom name
    image.save(f"generated_image_{idx}.png")

    # Access metadata
    print(f"Image {idx}: {generated_image.finish_reason}")
    print(f"Seed: {generated_image.seed}")

배치 이미지 생성

import google.generativeai as genai
import os

genai.configure(api_key=os.environ.get("GEMINI_API_KEY"))
model = genai.GenerativeModel("gemini-3.1-flash-image-preview")

# Generate multiple images at once
prompts = [
    "A red sports car on a mountain road",
    "A cozy coffee shop interior",
    "A minimalist bedroom design",
    "A tropical beach sunset"
]

# Generate all images
for idx, prompt in enumerate(prompts):
    response = model.generate_images(
        prompt=prompt,
        number_of_images=1,
        aspect_ratio="16:9"
    )

    if response.generated_images:
        image_data = response.generated_images[0].image_bytes
        with open(f"image_{idx + 1}.png", "wb") as f:
            f.write(image_data)
        print(f"Generated: image_{idx + 1}.png")

캐릭터 일관성 예제

import google.generativeai as genai

genai.configure(api_key=os.environ.get("GEMINI_API_KEY"))
model = genai.GenerativeModel("gemini-3.1-flash-image-preview")

# Base character description
base_character = "A friendly cartoon robot with round body, blue eyes, antenna on head, white and light blue color scheme"

# Generate base character (note the seed for consistency)
response1 = model.generate_images(
    prompt=base_character + ", front view, standing pose",
    number_of_images=1,
    seed=42  # Important: note this seed
)

base_seed = response1.generated_images[0].seed
print(f"Base character seed: {base_seed}")

# Generate variations using the same seed
poses = [
    "sitting pose",
    "waving hand",
    "holding a ball",
    "walking"
]

for pose in poses:
    response = model.generate_images(
        prompt=f"{base_character}, {pose}, same character as seed {base_seed}",
        number_of_images=1,
        seed=base_seed  # Same seed maintains consistency
    )

    if response.generated_images:
        filename = f"robot_{pose.replace(' ', '_')}.png"
        with open(filename, "wb") as f:
            f.write(response.generated_images[0].image_bytes)
        print(f"Generated: {filename}")

JavaScript/Node.js 통합

클라이언트 라이브러리 설치

npm install @google/generative-ai

기본 이미지 생성

const { GoogleGenerativeAI } = require("@google/generative-ai");
const fs = require("fs");
const path = require("path");

// Initialize with API key
const genAI = new GoogleGenerativeAI(process.env.GEMINI_API_KEY);

async function generateImage() {
  // Get the model
  const model = genAI.getGenerativeModel({
    model: "gemini-3.1-flash-image-preview",
  });

  // Generate image
  const result = await model.generateImages({
    prompt: "A beautiful sunset over the ocean with palm trees silhouette",
    numberOfImages: 1,
  });

  // Process the response
  if (result.generatedImages && result.generatedImages.length > 0) {
    const imageData = result.generatedImages[0].imageBytes;

    // Save to file
    fs.writeFileSync("sunset.png", Buffer.from(imageData, "base64"));
    console.log("Image saved to sunset.png");

    // Log metadata
    console.log("Seed:", result.generatedImages[0].seed);
    console.log("Finish Reason:", result.generatedImages[0].finishReason);
  }
}

generateImage().catch(console.error);

Base64 응답 처리

const { GoogleGenerativeAI } = require("@google/generative-ai");
const fs = require("fs");

const genAI = new GoogleGenerativeAI(process.env.GEMINI_API_KEY);

async function generateAndProcessImage() {
  const model = genAI.getGenerativeModel({
    model: "gemini-3.1-flash-image-preview",
  });

  const result = await model.generateImages({
    prompt: "Professional headshot of a person in business attire, studio lighting",
    numberOfImages: 1,
    aspectRatio: "1:1",
    resolution: "1024x1024"
  });

  const generatedImage = result.generatedImages[0];

  // Decode base64
  const imageBuffer = Buffer.from(generatedImage.imageBytes, "base64");

  // Save with metadata in filename
  const filename = `portrait_${generatedImage.seed}.png`;
  fs.writeFileSync(filename, imageBuffer);

  return {
    filename,
    seed: generatedImage.seed,
    finishReason: generatedImage.finishReason
  };
}

generateAndProcessImage()
  .then(info => console.log("Generated:", info))
  .catch(err => console.error("Error:", err));

Express.js REST API 예제

const express = require("express");
const { GoogleGenerativeAI } = require("@google/generative-ai");
const multer = require("multer");
const fs = require("fs");

const app = express();
const genAI = new GoogleGenerativeAI(process.env.GEMINI_API_KEY);

app.use(express.json());

// Image generation endpoint
app.post("/api/generate", async (req, res) => {
  try {
    const { prompt, aspect_ratio, negative_prompt, number_of_images } = req.body;

    const model = genAI.getGenerativeModel({
      model: "gemini-2.0-flash-exp-image-generation",
    });

    const result = await model.generateImages({
      prompt,
      numberOfImages: number_of_images || 1,
      aspectRatio: aspect_ratio || "1:1",
      negativePrompt: negative_prompt
    });

    // Convert images to base64 for response
    const images = result.generatedImages.map((img, idx) => ({
      id: idx,
      seed: img.seed,
      finishReason: img.finishReason,
      data: img.imageBytes // Base64 encoded
    }));

    res.json({
      success: true,
      images,
      metadata: {
        modelVersion: result.response?.metadata?.modelVersion,
        processingTimeMs: result.response?.metadata?.processingTimeMs
      }
    });
  } catch (error) {
    console.error("Generation error:", error);
    res.status(500).json({
      success: false,
      error: error.message
    });
  }
});

// Batch generation endpoint
app.post("/api/generate/batch", async (req, res) => {
  try {
    const { prompts } = req.body;
    const model = genAI.getGenerativeModel({
      model: "gemini-3.1-flash-image-preview",
    });

    const results = [];

    for (const prompt of prompts) {
      const result = await model.generateImages({
        prompt,
        numberOfImages: 1
      });

      results.push({
        prompt,
        seed: result.generatedImages[0]?.seed,
        success: !!result.generatedImages[0]
      });
    }

    res.json({ success: true, results });
  } catch (error) {
    res.status(500).json({ success: false, error: error.message });
  }
});

app.listen(3000, () => {
  console.log("Server running on port 3000");
});

고급 매개변수

Nano Banana 2는 이미지 생성을 세부적으로 조정할 수 있는 다양한 매개변수를 지원합니다:

매개변수 참조

매개변수타입설명예시
promptstring원하는 이미지에 대한 텍스트 설명"A cat sitting on a mat"
number_of_imagesinteger생성할 이미지 수 (1-4)2
aspect_ratiostring이미지 가로세로 비율"16:9", "1:1", "4:3"
resolutionstring출력 해상도"1024x1024", "2048x2048"
negative_promptstring

Apidog에서 API 설계-첫 번째 연습

API를 더 쉽게 구축하고 사용하는 방법을 발견하세요