tracks
Google이 이미지 생성 모델의 두 번째 버전인 Nano Banana 2를 방금 공개했습니다. Nano Banana가 처음 출시되었을 때 전 세계를 놀라게 했고, 가장 뛰어나고 가장 빠른 AI 이미지 생성 모델로 빠르게 자리 잡았습니다.
이 글에서는 새 모델을 깊이 있게 살펴보고, 새로운 기능을 탐구하며, Python으로 API를 통해 사용하는 방법을 알아봅니다.
이미지 생성 전반에 관심이 있다면, 다음 모델에 대한 가이드를 확인해 보세요.
Nano Banana 2란?
Nano Banana 2는 Gemini 3.1 Flash Image로도 알려져 있으며, Google DeepMind의 최신 최첨단 이미지 생성 및 편집 AI 모델입니다. Nano Banana Pro의 폭넓은 세계 지식, 품질, 추론 능력과 Gemini Flash의 초고속을 결합하여, 하나의 워크플로에서 고충실도 생성과 빠른 반복을 모두 가능하게 합니다.
주요 기능
Nano Banana 2의 핵심 기능은 다음과 같습니다.
- 정확도 향상: Gemini의 실제 세계 지식과 실시간 웹 이미지 신호를 바탕으로 특정 대상을 더 정확히 렌더링합니다. 인포그래픽, 다이어그램, 데이터 시각화에 적합합니다.
- 향상된 타이포그래피: 이미지 내 텍스트를 읽기 쉽고 정확하게 생성하며, 이미지 내에서 직접 현지화와 번역을 지원합니다.
- 창의적 제어: 내러티브와 스토리보드에서 주제 일관성이 개선되었습니다. 단일 워크플로에서 최대 5개의 캐릭터 유사성과 최대 14개의 오브젝트 충실도를 유지합니다.
- 신뢰성: 복잡하고 미묘한 프롬프트를 더 잘 반영하도록 지시사항을 정확히 준수합니다.
- 고해상도: 512픽셀부터 4K까지 유연한 종횡비와 해상도의 프로덕션급 사양을 제공합니다.
- 시각적 품질: 더 풍부한 질감, 생생한 조명, 더 선명한 디테일을 Flash 속도로 구현합니다.
Nano Banana가 처음이라면, 먼저 첫 번째 버전인 Nano Banana Pro에 관한 이전 글을 읽어보시기 바랍니다.
Nano Banana 2에 접근하는 방법
이 글에서는 Python으로 API를 사용해 Nano Banana 2를 활용하는 방법을 다룹니다. 다만 새 모델은 전체 Gemini 생태계에서 이용 가능합니다.
- Gemini 앱: Nano Banana 2는 Fast, Thinking, Pro 모드 전반의 기본 이미지 모델입니다. Google AI Pro 및 Ultra 구독자는 사실 정확도가 극대화된 특수 용도를 위해 점 3개 메뉴에서 Nano Banana Pro로 다시 생성할 수 있습니다.
- 검색: Google 앱과 모바일/데스크톱 브라우저의 AI Mode 및 Lens에서 이용 가능하며, 지원 지역(141개 국가/지역 추가)과 언어(8개 언어 추가)가 확대되었습니다.
- AI Studio + Gemini API: 프리뷰에서 이용 가능(요금제 참조). Google Antigravity에서도 이용 가능합니다.
- Google Cloud: Vertex AI의 Gemini API를 통해 프리뷰로 제공됩니다.
- Flow: 모든 Flow 사용자에게 기본 이미지 생성 모델로 제공됩니다.
- Google Ads: 캠페인 생성 시 크리에이티브 제안을 지원합니다.
API 요금
이 글에서는 API로 Nano Banana 2를 사용할 것이므로 구독은 필요 없고, 대신 생성하는 이미지마다 비용을 지불합니다.
저는 공식 요금표가 약간 이해하기 어렵게 느껴졌습니다. 보통 AI 이미지 모델은 이미지당 고정 가격을 명시합니다.
더 단순하게 보기 위해 이미지 크기에 따른 예상 비용을 계산해 보았습니다. 실제 가격은 약간 달라질 수 있으므로 참고용으로 보세요.
|
이미지 크기 |
이미지당 비용 |
|
512px |
$0.045 |
|
1024px (1K) |
$0.067 |
|
2048px (2K) |
$0.101 |
|
4096px (4K) |
$0.151 |
Nano Banana 2는 더 정확한 결과를 위해 웹 검색을 수행할 수 있습니다. 매우 유용한 기능이지만, 검색에는 추가 비용이 발생하므로 요금에 반영해야 합니다.
Google Search를 사용한 그라운딩의 경우, 월 5,000건까지의 검색 쿼리는 무료입니다. 이후에는 1,000건당 $14가 부과됩니다.
첫 Nano Banana 2 이미지 생성하기
그럼 바로 Nano Banana 2를 시작해 보겠습니다.
API 키 생성
API를 사용하려면 먼저 API 키를 생성해야 합니다. 이를 위해 Google AI Studio에 로그인하세요. 그런 다음 오른쪽 상단의 Create API Key 버튼을 클릭합니다.
API 키는 Google Cloud 프로젝트에 연결되어야 합니다. Google AI Studio에서는 API 키 생성 과정에서 프로젝트를 바로 만들 수 있어 간편합니다.

API 키를 사용하려면 연결된 Google Cloud 프로젝트에서 결제가 활성화되어 있어야 합니다. 방금 새 프로젝트를 만들었다면, API 키 옆의 Set up billing 버튼을 클릭해 활성화하세요.

마지막으로 API 키를 복사해 다음 형식으로 .env라는 파일에 붙여넣습니다.
GEMINI_API_KEY=<paste_key_here>
이 .env 파일은 Python 스크립트를 작성할 동일한 폴더에 생성해야 합니다.
환경 설정
다음으로 Gemini API와 상호작용하기 위한 Python 의존성을 설치합니다. 아래 명령을 실행하세요.
pip install google-genai python-dotenv pillow
다음 패키지가 설치됩니다.
-
google-genai: 공식 Google 생성 AI 패키지입니다. Gemini API와 쉽게 상호작용할 수 있도록 클라이언트를 생성하는 데 사용합니다. -
python-dotenv: .env 파일에서 API 키를 로드하는 유틸리티 패키지입니다. -
pillow: Nano Banana 2에 입력으로 제공할 이미지를 손쉽게 로드하기 위한 이미지 라이브러리입니다.
이미지 생성
다음은 이미지를 생성하는 전체 Python 코드입니다.
from google import genai
from dotenv import load_dotenv
from google.genai import types
import time
# Load API key
load_dotenv()
client = genai.Client()
prompt = """
Lego version of the empire state building being built.
"""
# Make API request
response = client.models.generate_content(
model="gemini-3.1-flash-image-preview",
contents=[prompt],
config=types.GenerateContentConfig(
response_modalities=["Image"],
image_config=types.ImageConfig(
aspect_ratio="16:9",
image_size="4K",
),
)
)
# Save the image and display output text if any
for part in response.parts:
if part.text is not None:
print(part.text)
elif part.inline_data is not None:
image = part.as_image()
image.save(f"image_{int(time.time())}.png")
결과는 다음과 같습니다.

지원 종횡비와 해상도
위 요청에서 aspect_ratio 매개변수로 종횡비를, image_size 매개변수로 해상도를 지정했습니다.
Nano Banana 2는 512픽셀부터 4K까지 다양한 종횡비와 해상도를 지원합니다. 지원 값은 다음과 같습니다.
-
aspect_ratio: "1:1","1:4","1:8","2:3","3:2","3:4","4:1","4:3","4:5","5:4","8:1","9:16","16:9","21:9" -
image_size(해상도): "512px", "1K", "2K", "4K"
Nano Banana 2 직접 다뤄보기
이제 모든 설정을 마치고 첫 이미지를 성공적으로 만들었으니, 광고된 기능들을 직접 시험해 보겠습니다.
주제 일관성을 유지한 이미지 편집
pillow 패키지에서 설치한 PIL로 이미지를 로드해 contents 리스트에 포함시켜 모델에 이미지를 제공할 수 있습니다.
Nano Banana 2의 주요 기능 중 하나는 이미지 생성 시 주제를 보존하는 능력입니다. 이전 버전의 Nano Banana나 GPT-Image 같은 다른 모델을 사용할 때, 실제 대상 기반 이미지를 생성하면 모델이 외형을 바꾸는 경향이 있어 어려움을 겪곤 했습니다.
문서에 따르면 이 모델은 최대 5개의 캐릭터와 10개의 오브젝트, 총 14개의 레퍼런스를 지원합니다. 캐릭터와 오브젝트를 명시적으로 정의하지는 않지만, 직관적으로는 최대 4개의 주요 주제와 이들이 상호작용하는 최대 10개의 보조 오브젝트를 배치해 장면을 생성하도록 학습되었다는 의미로 보입니다.
모델이 캐릭터 이미지와 오브젝트를 제출하기 위한 별도의 매개변수를 제공하는 것은 아닙니다. 대신 프롬프트에서 이를 처리합니다. 몇 가지 데모의 소스 코드를 살펴보며 프롬프트에서 이를 어떻게 표현하는지 파악했습니다.
찾아낸 템플릿은 다음과 같습니다.
<subject_name> (<Character #number>) = Image <#index>
예를 들어, "Alice"와 "Bob"이라는 두 캐릭터가 있다면 다음과 같습니다.
Subjects: Alice (Character 1) = Image 0, Bob (Character 2) = Image 1
아래는 개와 고양이 두 반려동물을 함께 포즈 잡게 하는 전체 코드 예시입니다.
from google import genai
from dotenv import load_dotenv
from google.genai import types
import time
from PIL import Image
# Load API key
load_dotenv()
client = genai.Client()
prompt = """
Goldie and Wiskers are posing together.
Subjects: Goldie (Character 1) = Image 0, Wiskers (Character 2) = Image 1
Maintain strict subject consistency for characters.
Adjust the subject composition/pose as appropriate for the scene.
"""
dog = Image.open("dog.png")
cat = Image.open("cat.png")
# Make API request
response = client.models.generate_content(
model="gemini-3.1-flash-image-preview",
contents=[prompt, dog, cat],
config=types.GenerateContentConfig(
response_modalities=["Image"],
image_config=types.ImageConfig(
aspect_ratio="9:16",
),
)
)
# Save the image and display output text if any
for part in response.parts:
if part.text is not None:
print(part.text)
elif part.inline_data is not None:
image = part.as_image()
image.save(f"image_{int(time.time())}.png")

오브젝트 포함하기
앞서 언급했듯 이 템플릿은 공식 문서의 일부는 아닙니다. 모델은 프롬프트와 이미지에서 각 요소를 알아들을 수 있을 것입니다. 그러나 실제 애플리케이션에서 일관된 결과를 원한다면, 프롬프트에서 최대한 정확하고 일관되게 작성하는 것이 모범 사례이므로 이 템플릿 사용을 권장합니다.
예시에서는 오브젝트 참조에 대해 "Character"를 "Object"로 바꾸는 방식으로 템플릿을 확장했습니다. 이를 통해 이미지가 주요 주제가 아니라 오브젝트를 가리킨다는 것을 모델에 알립니다.
이를 보여주기 위해, 두 개의 오브젝트 참조를 제공해 개에게 특정 선글라스를, 고양이에게 모자를 씌워 보겠습니다. 제가 사용한 프롬프트는 다음과 같습니다.
Goldie and Wiskers are posing together. Goldie is wearing the Glasses, and Wiskers is wearing the Hat.
Subjects: Goldie (Pet 1) = Image 0, Wiskers (Pet 2) = Image 1, Glasses (Object 1) = Image 3, Hat (Object 2) = Image 4.
Maintain strict subject consistency for characters and objects.
Adjust the subject composition/pose as appropriate for the scene.
결과는 다음과 같습니다.

검색으로 그라운딩한 이미지 생성
Nano Banana 2는 검색에 기반해 이미지 생성을 그라운딩함으로써 결과를 더 정확하게 만들 수 있습니다. 이는 특정 위치나 특정 동물 종처럼 현실과 일치해야 하는 이미지를 생성할 때 특히 유용합니다.
저는 대만에 살고 있는데, 최근 한 산행 행사에서 주최자가 Nano Banana로 생성한 이미지를 해당 산행 장소를 묘사하는 데 사용했습니다. 하지만 이미지가 전혀 정확하지 않아, 실제와 너무 달라 실망한 사람이 많았습니다.
그래서 Nano Banana 2가 이 문제를 해결할 수 있는지 시험해 보고 싶었습니다.
생성 요청의 tools 매개변수를 사용해 웹 검색과 이미지 검색을 모두 활성화할 수 있습니다.
전체 예시는 다음과 같습니다.
from google import genai
from dotenv import load_dotenv
from google.genai import types
import time
# Load API key
load_dotenv()
client = genai.Client()
prompt = """
Create an image of the Yinhe Cave (銀河洞) in Taiwan at golden hour.
- Use Image Search to search for an image of the specified place.
- Keep the location and the view as close to the real reference as possible.
"""
# Make API request
response = client.models.generate_content(
model="gemini-3.1-flash-image-preview",
contents=[prompt],
config=types.GenerateContentConfig(
response_modalities=["Image"],
image_config=types.ImageConfig(
aspect_ratio="9:16",
),
tools=[
types.Tool(google_search=types.GoogleSearch(
search_types=types.SearchTypes(
web_search=types.WebSearch(), # Enables web search
image_search=types.ImageSearch() # Enables image search
)
))
]
)
)
# Save the image and display output text if any
for part in response.parts:
if part.text is not None:
print(part.text)
elif part.inline_data is not None:
image = part.as_image()
image.save(f"image_{int(time.time())}.png")
아래는 결과입니다. 먼저 Google Photos에서 가져온 실제 사진, 다음은 검색을 사용해 Nano Banana 2가 생성한 이미지, 마지막은 검색 없이 생성한 이미지입니다. 검색을 사용하면 결과가 매우 정확해짐을 볼 수 있습니다.

Gemini 팀은 특정 장소를 창문 너머 풍경처럼 보여주는 작은 앱 Window View 데모를 만들었습니다. 이 아이디어를 활용해 모델의 현실 이해 능력을 잘 보여줍니다.
주제 일관성과 세계 이해를 결합하기
모델이 실제 위치를 높은 정밀도로 생성할 수 있으므로, 특정 주제를 실제 위치에 배치할 수 있습니다.
Goldie와 Wiskers를 대만의 한 장소에 배치해 보겠습니다. 세계적으로 유명하지 않은 장소도 모델이 처리할 수 있는지 확인하고 싶었습니다.
사용한 프롬프트는 다음과 같습니다.
Goldie and Wiskers are traveling across the Sanxiantai Arch Bridge in Taiwan.
Subjects: Goldie (Pet 1) = Image 0, Wiskers (Pet 2) = Image 1
Use image search to find visual references of the location.
Maintain strict subject consistency for characters and objects.
Adjust the subject composition/pose as appropriate for the scene.
프롬프트에서 이미지 검색 사용을 명시적으로 요청했다는 점에 주목하세요. 도구를 사용할 때는 프롬프트에서 도구 사용을 명확히 지시하는 편이 항상 더 좋았습니다.
두 캐릭터가 함께 여행하는 이미지는 다음과 같습니다.

더 나아가 위도와 경도를 제공해 위치를 지정해 보았는데, 잘 작동했습니다!
Goldie and Wiskers are at the location with a latitude of 17.0621186 and a longitude of -96.7255102.
Subjects: Goldie (Pet 1) = Image 0, Wiskers (Pet 2) = Image 1
Use image search to find visual references of the location.
Maintain strict subject consistency for characters and objects.
Adjust the subject composition/pose as appropriate for the scene.

위치가 위도·경도와 완벽히 일치하지 않더라도, 이미지 속 요소들이 해당 위치에서 볼 수 있는 것들과 대응한다는 점이 매우 인상적입니다.
텍스트 현지화
Nano Banana 2는 이전 Flash 기반 이미지 모델 대비 더 일관되고 신뢰할 수 있는 텍스트 렌더링을 제공합니다.
이제 텍스트가 주변 그래픽만큼 선명하고 정확하게 표현됩니다. 또한 이미지 내 현지화를 지원하여, 생성된 이미지 안에서 텍스트를 여러 언어로 직접 생성하거나 번역할 수 있습니다.
가상의 VR 헤드셋 브랜드 "Beyond Reality" 포스터를 생성한 뒤, 다음과 같은 프롬프트로 현지화를 테스트했습니다.
Change the language of the poster to Japanese.
포스터 텍스트를 프랑스어로 바꾸고, 이어서 일본어로 바꾼 결과는 다음과 같습니다.

프롬프트에 명시하지 않았음에도 불구하고, 모델이 브랜드명은 번역하지 않는 것이 적절하다고 판단한 점이 흥미로웠습니다.
대화 모드
마지막으로 살펴볼 기능은 대화 모드입니다. 앞선 예시는 상호작용형이 아닙니다. API에 요청을 보내고 결과를 받는 방식입니다. 결과를 반복 편집하려면, 해당 이미지와 원하는 변경 사항으로 새 요청을 만들어야 합니다.
더 나은 방법은 채팅 모드를 사용하는 것입니다. 채팅 모드에서는 client.chats.create() 함수로 채팅을 생성한 다음, client.send_message() 함수로 메시지를 주고받습니다. 이를 통해 채팅 편집 워크플로를 구현할 수 있습니다.
- 사용자가 프롬프트를 보냅니다.
- Nano Banana 2는 프롬프트와 이전 이미지(있다면)를 바탕으로 이미지를 생성합니다.
- 이미지가 사용자에게 표시됩니다.
- 사용자가 편집 프롬프트를 보내면 2단계로 돌아갑니다.
이 흐름을 구현한 전체 스크립트는 다음과 같습니다.
from google import genai
from google.genai import types
from dotenv import load_dotenv
from PIL import Image
import time
load_dotenv()
client = genai.Client()
# Initialize the chat session
chat = client.chats.create(
model="gemini-3.1-flash-image-preview",
config=types.GenerateContentConfig(
response_modalities=['TEXT', 'IMAGE'],
tools=[{"google_search": {}}]
)
)
# We keep track of the latest image object to send back as context
latest_image = None
while True:
user_input = input("\nPrompt: ")
if user_input.lower() in ['quit', 'exit', 'q']:
break
# Construct the message content
# If we have a previous image, we include it so the model knows what to edit
content = [user_input]
if latest_image:
content.append(latest_image)
try:
response = chat.send_message(content)
for part in response.parts:
# Handle Text Response
if part.text:
print(f"\nAI: {part.text}")
elif part.inline_data is not None:
image = part.as_image()
filename = f"image_{int(time.time())}.png"
image.save(filename)
print("Saved image", filename)
latest_image = Image.open(filename)
latest_image.show()
except Exception as e:
print(f"An error occurred: {e}")
print("Session ended.")
이 스크립트를 실행하면 터미널에서 이미지를 반복적으로 직접 편집할 수 있습니다.

이번 상호작용의 결과는 다음과 같습니다.

Nano Banana vs. Nano Banana 2
아래 표는 Nano Banana 모델 간의 주요 차이점을 강조합니다. 앞서 언급했듯 새 버전은 정확도, 일관성, 해상도에서 큰 향상을 이루었으며, 첫 번째 버전에 비해 속도 저하는 매우 미미합니다.

이 표는 실제로 Nano Banana 2에 데이터를 제공해 생성했습니다.
Nano Banana Pro를 사용할 때
Nano Banana 2가 새로운 표준이지만, Nano Banana Pro는 여전히 "Thinking" 및 특수 작업에 사용 가능합니다. 다음과 같은 경우에는 Pro를 선택할 수 있습니다.
- 극대의 사실감: 조명 물리와 피부 질감에서 Pro가 근소한 우위를 유지합니다.
- 복잡한 추론: Pro는 공간적 지시(예: "왼쪽 두 번째 기둥 뒤의 사람")를 "생각하며" 처리하는 데 더 능숙합니다.
결론
Nano Banana 2는 반복 간 “드리프트”를 크게 줄여, 한 번 잡은 룩을 장면, 형식, 언어 전반에 신뢰성 있게 유지하도록 해주는 진정한 후속작처럼 느껴집니다.
더 강력해진 주제 지속성, 더 엄밀한 지시 준수, 검색 기반 사실성, 그리고 “다시 그리기”가 아닌 미세 조정을 하는 대화형 편집 덕분에, 변주를 탐색하면서도 정체성, 레이아웃, 스타일을 훨씬 쉽게 유지할 수 있습니다.
프로덕션급 텍스트 렌더링은 브랜드 요소의 일관성을 돕고, 유연한 종횡비는 배너, 포스터, 모바일 스토리 등 다양한 포맷으로 캠페인을 손쉽게 확장할 수 있게 합니다. 스토리보드, 제품 사진, 다국가 크리에이티브를 만드는 팀에게 속도나 충실도를 희생하지 않고 반복 가능성을 제공합니다.
Nano Banana 2는 Nano Banana와 Nano Banana Pro 사이의 간극을 분명히 좁힙니다. 속도는 사실상 Nano Banana의 거의 즉시 응답하는 Flash에 가깝고, 기능, 시각 충실도, 정밀한 지시 준수, 주제 일관성, 검색 기반 사실성은 정기적으로 Nano Banana Pro에 근접합니다.
Nano Banana 2와 같은 도구의 개념을 더 배우고 싶다면 Generative AI Concepts 코스를 추천합니다.
Nano Banana 2 자주 묻는 질문(FAQ)
API에서 Nano Banana 2의 모델 이름은 무엇인가요?
Nano Banana 2의 기술적 모델 이름은 gemini-3.1-flash-image-preview입니다.
Nano Banana 2는 이미지 생성에 무료 등급을 제공하나요?
Gemini 구독이 있다면 Nano Banana 2가 새로운 기본값이므로 거기서 바로 사용할 수 있습니다. API를 사용할 때는 무료 등급이 없지만, 이미지 한 장을 생성하는 비용은 매우 저렴합니다.
Nano Banana 2가 Nano Banana Pro보다 더 좋은가요?
Nano Banana 2는 Nano Banana와 Nano Banana Pro 사이에 위치합니다. Nano Banana Pro보다 훨씬 빠르면서 유사한 결과를 냅니다.
Nano Banana 2에서 검색 그라운딩이 기본으로 활성화되어 있나요?
아니요. 검색 그라운딩을 사용하려면 해당 도구를 모델에 명시적으로 제공해야 합니다. 첫 5,000건의 검색 요청은 무료이며, 이후 요청에는 이미지 생성 비용 외에 $0.014가 추가로 부과됩니다.