728x90
- Google AI Studio Build + “나노 바나나(Nano Banana)”로 아이디어→서비스 올인원 가이드
- 나노바다에서 시작해 구글 생태계로: 나노 바나나 코딩 & 배포 풀코스
- 이미지 AI ‘나노 바나나’, 구글 AI Studio Build로 서비스까지 한번에!
Google AI Studio의 Build 기능을 활용해 나노 바나나(= Gemini 2.5 Flash Image Preview) 이미지 생성/편집을 중심으로, 기획–개발–테스트–배포–운영까지 한 번에 끝내는 실무형 가이드를 정리했습니다.
최근 Google이 Gemini 앱에 ‘나노 바나나’ 기반 이미지 편집/생성 기능을 통합해 공개했고(일관성 높은 인물·사물 편집), “Gemini 2.5 Flash Image” 업그레이드의 일부로 보도되었습니다. (Ars Technica, Axios, The Economic Times)
AI Studio → Cloud Run 원클릭 배포(“Build → Deploy”) 경로가 공식 가이드/블로그로 확인됩니다. (Google AI for Developers, Google Cloud)
무엇을 만들까요? (예시 주제)
“보안 캠페인 포스터 자동 생성기”
- 입력: 주제(피싱, 랜섬웨어, 패스워드 보안), 톤/스타일(플랫 벡터, 모던 코퍼렛), 슬로건, 색상 키워드.
- 출력: 일관성 있는 포스터 이미지(사내 인트라넷/교육자료용).
- 장점: 반복 편집에도 인물·오브젝트의 일관성 유지(나노 바나나 강점), 다국어 슬로건/브랜드 색상 반영.
아키텍처 한눈에
- 로컬 “나노바다(nanobada)”: 개발용 venv/conda 환경, 테스트 스크립트.
- AI Studio (Build): 프롬프트·UI를 브라우저에서 구성하고 Cloud Run에 원클릭 배포.
- Cloud Run: HTTPS 엔드포인트, 자동 스케일/제로스케일. 운영은 Cloud Logging/Monitoring으로 관측.
- (선택) GCS에 이미지 저장, Secret Manager에 API 키 저장, Cloud Armor로 WAF.
로컬 “나노바다” 환경 준비
아래 둘 중 편한 방법 선택
300x250
A. venv
# 프로젝트 폴더
mkdir nanobada && cd nanobada
python3 -m venv .venv
source .venv/bin/activate
pip install -U google-generativeai fastapi uvicorn python-multipart
B. Conda
conda create -n nanobada python=3.11 -y
conda activate nanobada
pip install -U google-generativeai fastapi uvicorn python-multipart
환경 변수
export GEMINI_API_KEY="<AI_Studio에서 발급한 제한 키>"
- 키는 저장소에 커밋 금지, .env/Secret Manager 사용 권장. (운영 단계에서 Secret Manager로 이관)
AI Studio Build로 앱 만들기 → 원클릭 배포
- AI Studio 접속 → Build 선택 → “Image Generator/Editor” 유형으로 새 앱 생성.
- Model:
Gemini 2.5 Flash Image (Preview)
선택(= 나노 바나나). 프롬프트에 주제/스타일/문구를 파라미터화. - 미리보기로 이미지 품질·일관성 확인.
- Deploy to Cloud Run 클릭 → 프로젝트/리전/서비스명 지정 → 배포 완료 후 URL 확보.
참고: AI Studio의 Build→Deploy 경로는 공식 블로그/가이드에 소개된 표준 플로우입니다. 배포 후 Cloud Run이 자동 확장/HTTPS 엔드포인트를 제공합니다.
API 레벨 테스트 (Apidog / cURL)
REST 엔드포인트 예시(Apidog 가이드 기준)
curl -s -X POST \
"https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash-image-preview:generateContent?key=$GEMINI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"contents":[{"parts":[{"text":"Create a flat-vector security awareness poster about phishing, with blue accent."}]}]
}' > resp.json
- 응답의
inlineData
(base64 이미지)를 디코딩해 파일로 저장. - Apidog 블로그에서 모델/엔드포인트/코드 흐름이 정리되어 있어, 컬렉션 만들어 재현/문서화하기 좋습니다.
로컬 예제 코드 (Python) — 생성 & 편집
# generate_or_edit.py
import os, base64
import google.generativeai as genai
API_KEY = os.environ["GEMINI_API_KEY"]
genai.configure(api_key=API_KEY)
model = genai.GenerativeModel("gemini-2.5-flash-image-preview") # = 나노 바나나
def save_img(b64, path):
with open(path, "wb") as f: f.write(base64.b64decode(b64))
def generate_poster(topic, slogan, style="flat vector, corporate"):
prompt = f"Design a security awareness poster about {topic}. " \
f"Use style: {style}. Slogan: {slogan}. " \
f"High contrast, centered layout, include small lock icon."
resp = model.generate_content([prompt])
return resp.parts[0].inline_data.data
def edit_with_background(input_path, bg="gradient blue"):
with open(input_path, "rb") as f:
img_b64 = base64.b64encode(f.read()).decode()
prompt = f"Refine composition. Replace background with {bg}. Keep text readable."
resp = model.generate_content([
{"inline_data":{"mime_type":"image/png","data":img_b64}},
prompt
])
return resp.parts[0].inline_data.data
if __name__ == "__main__":
out = generate_poster("phishing", "Think before you click")
save_img(out, "poster.png")
out2 = edit_with_background("poster.png", "corporate blue gradient")
save_img(out2, "poster_edited.png")
간단한 FastAPI 래퍼 → Cloud Run 수동 배포(선택)
AI Studio Build로 이미 배포 가능하지만, 커스텀 API가 필요하면 아래처럼 만드세요.
# app.py
import os, base64
from fastapi import FastAPI, UploadFile, Form
from fastapi.responses import StreamingResponse, JSONResponse
import google.generativeai as genai
genai.configure(api_key=os.environ["GEMINI_API_KEY"])
model = genai.GenerativeModel("gemini-2.5-flash-image-preview")
app = FastAPI()
@app.post("/generate")
async def generate(topic: str = Form(...), slogan: str = Form(...), style: str = Form("flat vector")):
prompt = f"Security poster about {topic}. Style: {style}. Slogan: {slogan}."
resp = model.generate_content([prompt])
img_b64 = resp.parts[0].inline_data.data
return JSONResponse({"image_base64": img_b64})
@app.post("/edit")
async def edit(file: UploadFile, instruction: str = Form("Improve contrast")):
img_b64 = base64.b64encode(await file.read()).decode()
resp = model.generate_content([{"inline_data":{"mime_type":file.content_type,"data":img_b64}}, instruction])
out_b64 = resp.parts[0].inline_data.data
return JSONResponse({"image_base64": out_b64})
컨테이너 & 배포
# Dockerfile (요약)
# FROM python:3.11-slim
# RUN pip install fastapi uvicorn google-generativeai python-multipart
# CMD ["uvicorn","app:app","--host","0.0.0.0","--port","8080"]
gcloud services enable run.googleapis.com artifactregistry.googleapis.com secretmanager.googleapis.com
gcloud artifacts repositories create genai --repository-format=docker --location=asia-northeast3
docker build -t asia-northeast3-docker.pkg.dev/$(gcloud config get-value project)/genai/nanobada:1 .
docker push asia-northeast3-docker.pkg.dev/$(gcloud config get-value project)/genai/nanobada:1
# Secret Manager에 GEMINI_API_KEY 저장 후 Cloud Run에 주입 권장
gcloud run deploy nanobada --image=asia-northeast3-docker.pkg.dev/$(gcloud config get-value project)/genai/nanobada:1 \
--region=asia-northeast3 --allow-unauthenticated \
--set-secrets=GEMINI_API_KEY=gemini-api-key:latest
프롬프트 설계 팁 (보안 포스터용)
- 콘텐츠 지침: “실제 인물 사진은 생성/편집하지 말 것”, “로고는 벡터 형태·단순형”, “텍스트 가독성 우선”
- 일관성 토큰: “동일한 캐릭터/아이콘을 유지”, “반복 편집에도 표정/비율 유지” → 나노 바나나 강점.
- 스타일 프리셋
flat vector, corporate, blue accent, clean grid, center headline
poster, bold typography, high contrast, minimal illustration
보안 점검포인트
- 키/권한
- AI Studio 발급 키는 개발용만. 운영은 Secret Manager + 서비스 계정으로 전환.
- Cloud Run는 인증 호출(OIDC) 기본, 외부 공개 시 Cloud Armor WAF 적용.
- 콘텐츠 안전/워터마크
- 인물·로고·브랜드 사용 정책 준수, 딥페이크 금지.
- Google의 SynthID(가시/비가시 워터마크) 활용 가능성·표시 고지.
- 데이터 거버넌스
- 프롬프트/응답 로그는 Cloud Logging에 저장. 민감정보 입력 금지 배너/마스킹.
- 예산/쿼터 알림(Cloud Monitoring, Budget alerts) 설정.
- 감사/추적
- Cloud Audit Logs로 배포/구성 변경 추적.
- 이미지 원본/산출물 해시 기록(무결성 확인) 권장.
- 법·윤리 준수
- 외부 공개 전, 저작권/초상권 검토. 모델 출력의 사실성 오인 방지 안내문 포함.
운영 팁 (문제 해결)
- 429/Quota: 배치 생성 시 큐·슬롯 제한 적용, 재시도 간격(backoff) 설정.
- 모델 미리보기(Preview) 변경: 모델명/파라미터 변경 가능성 주시(릴리스 노트 모니터링).
- 느린 응답: Cloud Run 동시성/CPU 항상 할당(minimum instances) 조정.
QA 체크리스트 (사내 가이드로 배포 권장)
- 생성 이미지에 민감정보·실명·사실 왜곡 없음
- 워터마크/출처 표기 정책 적용
- 로그/키/권한 점검(비밀 설정 누락 없음)
- 프롬프트/파라미터가 재현 가능하게 템플릿화
- 예산/쿼터 알림 설정
참고정보
- 나노 바나나 = Gemini 2.5 Flash Image(프리뷰) API 사용법/코드 흐름(모델명·엔드포인트, SynthID 언급 포함).
- 나노 바나나 최신 동향(통합·특징·일관성 편집): Ars Technica, Axios, Times of India 등.
- AI Studio → Cloud Run 원클릭 배포(“Build”) 공식 가이드/블로그.
- Cloud Run에서 AI 앱/에이전트 호스팅 개요.
바로 써먹는 초간단 프롬프트 템플릿
Create a security awareness poster about {topic}.
Style: {style} (flat vector, minimal).
Slogan: "{slogan}" (Korean).
Keep iconography consistent across edits. High readability.
728x90
그리드형(광고전용)
댓글