본문 바로가기

구글 AI 스튜디오와 ‘나노 바나나’로 만드는 올인원 AI 서비스 가이드

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)

무엇을 만들까요? (예시 주제)

“보안 캠페인 포스터 자동 생성기”

  • 입력: 주제(피싱, 랜섬웨어, 패스워드 보안), 톤/스타일(플랫 벡터, 모던 코퍼렛), 슬로건, 색상 키워드.
  • 출력: 일관성 있는 포스터 이미지(사내 인트라넷/교육자료용).
  • 장점: 반복 편집에도 인물·오브젝트의 일관성 유지(나노 바나나 강점), 다국어 슬로건/브랜드 색상 반영.

아키텍처 한눈에

  1. 로컬 “나노바다(nanobada)”: 개발용 venv/conda 환경, 테스트 스크립트.
  2. AI Studio (Build): 프롬프트·UI를 브라우저에서 구성하고 Cloud Run에 원클릭 배포.
  3. Cloud Run: HTTPS 엔드포인트, 자동 스케일/제로스케일. 운영은 Cloud Logging/Monitoring으로 관측.
  4. (선택) 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로 앱 만들기 → 원클릭 배포

  1. AI Studio 접속 → Build 선택 → “Image Generator/Editor” 유형으로 새 앱 생성.
  2. Model: Gemini 2.5 Flash Image (Preview) 선택(= 나노 바나나). 프롬프트에 주제/스타일/문구를 파라미터화.
  3. 미리보기로 이미지 품질·일관성 확인.
  4. 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

보안 점검포인트

  1. 키/권한
    • AI Studio 발급 키는 개발용만. 운영은 Secret Manager + 서비스 계정으로 전환.
    • Cloud Run는 인증 호출(OIDC) 기본, 외부 공개 시 Cloud Armor WAF 적용.
  2. 콘텐츠 안전/워터마크
    • 인물·로고·브랜드 사용 정책 준수, 딥페이크 금지.
    • Google의 SynthID(가시/비가시 워터마크) 활용 가능성·표시 고지.
  3. 데이터 거버넌스
    • 프롬프트/응답 로그는 Cloud Logging에 저장. 민감정보 입력 금지 배너/마스킹.
    • 예산/쿼터 알림(Cloud Monitoring, Budget alerts) 설정.
  4. 감사/추적
    • Cloud Audit Logs로 배포/구성 변경 추적.
    • 이미지 원본/산출물 해시 기록(무결성 확인) 권장.
  5. 법·윤리 준수
    • 외부 공개 전, 저작권/초상권 검토. 모델 출력의 사실성 오인 방지 안내문 포함.

운영 팁 (문제 해결)

  • 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
그리드형(광고전용)

댓글