Apidog

올인원 협업 API 개발 플랫폼

API 설계

API 문서

API 디버깅

API 모킹

자동화 테스트

구글 Gen AI TypeScript/JavaScript SDK로 강력한 생성형 AI 앱 구축하는 방법

Mark Ponomarev

Mark Ponomarev

Updated on May 27, 2025

인공지능(AI)의 세계는 빠르게 진화하고 있으며, Google은 강력한 Gemini 모델을 통해 선두에 서 있습니다. 이러한 역량을 활용하고자 하는 TypeScript 및 JavaScript 개발자를 위해 Google Gen AI SDK는 포괄적이고 유연한 솔루션을 제공합니다. 이 SDK를 사용하면 Gemini 2.5 및 기타 최첨단 모델을 기반으로 하는 애플리케이션을 쉽게 구축할 수 있으며, Gemini 개발자 API와 Vertex AI 모두에 대한 강력한 지원을 제공합니다. 이 글은 이 SDK를 이해하고 활용하는 데 필요한 가이드가 될 것이며, 실시간 상호 작용 및 멀티모달 콘텐츠 처리부터 TTS(Text-to-Speech), 이미지 생성 등 주요 기능까지 다룰 것입니다.

💡
아름다운 API 문서를 생성하는 훌륭한 API 테스트 도구를 원하십니까?

개발팀이 최대한의 생산성으로 함께 작업할 수 있는 통합된 올인원 플랫폼을 원하십니까?

Apidog는 귀하의 모든 요구 사항을 충족하며, 훨씬 더 저렴한 가격으로 Postman을 대체합니다!
button

소개: JavaScript와 Gemini의 역량 연결

Google Gen AI JavaScript SDK는 개발자가 Google의 고급 생성 AI 기능을 웹 및 Node.js 애플리케이션에 통합할 수 있도록 세심하게 설계되었습니다. 정교한 챗봇, 지능형 콘텐츠 제작 도구 또는 다양한 미디어 유형을 이해하고 생성하는 애플리케이션을 구축하든 이 SDK는 필요한 구성 요소를 제공합니다.

SDK의 핵심 강점은 Gemini 개발자 플랫폼(Google AI Studio의 API 키 사용) 또는 Google Cloud의 Vertex AI 플랫폼에서 호스팅되는지에 관계없이 Gemini 모델에 액세스하는 통합된 접근 방식입니다. 이러한 유연성을 통해 개발자는 API 키를 사용한 빠른 프로토타이핑부터 MLOps 기능을 갖춘 Vertex AI의 프로덕션급 배포까지 프로젝트 요구 사항에 가장 적합한 환경을 선택할 수 있습니다.

SDK는 매우 기대되는 Gemini 2.5 모델을 포함하여 최신 Gemini 기능과 원활하게 작동하도록 설계되어 개발자가 최첨단 AI를 출시되는 즉시 사용할 수 있도록 보장합니다.

시작하기: 설치 및 초기화

고급 기능에 대해 알아보기 전에 SDK 설정의 기본 사항을 살펴보겠습니다.

사전 요구 사항:
개발 환경에 Node.js 버전 18 이상이 설치되어 있는지 확인하세요.

설치:
npm을 사용하여 SDK를 쉽게 설치할 수 있습니다.

npm install @google/genai

초기화 - Gemini로 가는 관문:
Google AI Studio 또는 Vertex AI를 통한 Gemini API와의 모든 상호 작용은 GoogleGenAI 클래스를 인스턴스화하는 것으로 시작됩니다.

1. Gemini 개발자 API 사용 (API 키 포함):
특히 서버 측 애플리케이션이나 개인 프로젝트의 경우 시작하는 가장 빠른 방법입니다. Google AI Studio에서 API 키가 필요합니다.

import { GoogleGenAI } from '@google/genai';

const GEMINI_API_KEY = process.env.GEMINI_API_KEY; // 또는 실제 API 키
const ai = new GoogleGenAI({ apiKey: GEMINI_API_KEY });

async function run() {
  // 예시: 텍스트 콘텐츠 생성
  const model = ai.models.generateContent({
    model: "gemini-pro", // 또는 "gemini-2.5-flash-001"과 같은 특정 Gemini 2.5 모델
    contents: [{ role: "user", parts: [{ text: "Google Gen AI SDK의 중요성을 설명해 주세요." }] }]
  });
  const response = await model;
  console.log(response.text);
}

run();
API 키 보안에 대한 주의 사항:

2. Vertex AI 사용:
Google Cloud의 견고성과 확장성이 필요한 애플리케이션의 경우 Vertex AI용 SDK를 초기화하는 것이 좋습니다. 여기에는 Google Cloud 프로젝트 ID와 위치를 지정하는 작업이 포함됩니다.

import { GoogleGenAI } from '@google/genai';

const ai = new GoogleGenAI({
    vertexai: true,
    project: 'your-gcp-project-id',
    location: 'your-gcp-location', // 예: 'us-central1'
});

async function runVertex() {
  // 예시: Vertex AI로 텍스트 콘텐츠 생성
  const model = ai.models.generateContent({
    model: "gemini-1.5-pro-preview-0409", // Vertex AI 모델 예시
    contents: [{ role: "user", parts: [{ text: "Gen AI SDK와 함께 Vertex AI를 사용하면 어떤 이점이 있나요?" }] }]
  });
  const response = await model;
  console.log(response.text);
}

runVertex();

API 버전 선택:
기본적으로 SDK는 베타 API 엔드포인트를 활용하여 미리 보기 기능에 대한 조기 액세스를 제공합니다. 그러나 안정성이 필요한 애플리케이션의 경우 초기화 중에 v1(안정) 또는 기타 특정 API 버전(예: Gemini API의 특정 미리 보기 기능에 대한 v1alpha)을 명시적으로 선택할 수 있습니다.

Vertex AI의 경우 (v1으로 설정):

const ai = new GoogleGenAI({
    vertexai: true,
    project: 'your-gcp-project-id',
    location: 'your-gcp-location',
    apiVersion: 'v1'
});

Gemini 개발자 API의 경우 (ai.live와 같은 기능에 대해 v1alpha로 설정):

const ai = new GoogleGenAI({
    apiKey: 'YOUR_GEMINI_API_KEY',
    apiVersion: 'v1alpha'
});

핵심 SDK 구조: GoogleGenAI 객체

초기화되면 ai 객체(GoogleGenAI의 인스턴스)는 SDK 기능에 대한 기본 인터페이스가 됩니다. 특정 기능에 맞는 다양한 하위 모듈에 대한 액세스를 제공합니다.

  • ai.models: 이것은 가장 자주 사용되는 하위 모듈일 것입니다. 생성 모델 자체와 상호 작용하는 관문입니다. ai.models를 통해 다음을 수행할 수 있습니다.
  • 텍스트 콘텐츠 생성 (generateContent, generateContentStream).
  • 이미지 생성 (generateImages).
  • 텍스트 임베딩 계산 (embedContent).
  • 프롬프트의 토큰 수 계산 (countTokens).
  • (Vertex AI만 해당) 자세한 토큰 정보 계산 (computeTokens).
  • ai.caches: (미리 보기) 큰 프롬프트 접두사를 반복적으로 사용하는 애플리케이션의 경우 캐싱은 비용과 대기 시간을 크게 줄일 수 있습니다. ai.caches 하위 모듈을 사용하면 이러한 캐시를 생성하고 관리할 수 있습니다.
  • ai.chats: 다중 턴 대화 경험 개발을 단순화합니다. ai.chats를 사용하면 대화 기록을 자동으로 관리하는 로컬 상태 저장 채팅 객체를 생성하여 대화형 챗봇을 더 쉽게 구축할 수 있습니다.
  • ai.files: (Gemini API만 해당) 멀티모달 프롬프트용 이미지, 오디오, 비디오 등 파일을 API에 업로드할 수 있습니다. 그런 다음 이 파일은 프롬프트에서 참조할 수 있습니다. 이는 인라인으로 전송할 수 없는 대용량 파일이나 여러 API 호출에서 재사용하려는 파일에 특히 유용하여 대역폭을 줄입니다.
  • ai.live: (미리 보기, Gemini API v1alpha만 해당) 이 흥미로운 하위 모듈은 Gemini 모델과의 실시간 양방향 통신을 가능하게 합니다. 즉각적인 상호 작용이 필요한 애플리케이션을 위해 설계되었으며, 텍스트, 오디오, 비디오 입력을 지원하고 텍스트 또는 오디오 출력을 제공합니다. 이는 진정으로 동적이고 반응적인 AI 경험을 구축하기 위한 기반입니다.

Gemini 2.5 모델로 앱 구축

SDK는 Gemini 2.5 모델(및 Gemini 1.0 Pro, 1.5 Pro, 1.5 Flash와 같은 이전 버전)의 역량에 직접 연결됩니다. 특정 모델을 사용하려면 ai.models.generateContent()와 같은 메서드의 model 매개변수나 ai.chats.create()로 채팅 세션을 생성할 때 해당 이름을 참조하기만 하면 됩니다.

예를 들어, gemini-2.5-flash-001 모델을 사용하려면 (가상 이름이며, 출시 시 실제 모델 식별자로 대체):

const response = await ai.models.generateContent({
  model: 'gemini-2.5-flash-001', // 특정 모델 식별자 사용
  contents: [{ role: "user", parts: [{ text: "Gemini 2.5의 주요 발전 사항에 대해 알려주세요." }] }]
});
console.log(response.text);

SDK는 기본 API 호출을 처리하므로 프롬프트 작성 및 생성된 콘텐츠 처리에 집중할 수 있습니다. Google이 새로운 모델을 출시하고 기존 모델을 업데이트함에 따라 단순히 모델 식별자 문자열을 변경하여 전환할 수 있으므로 애플리케이션을 최신 상태로 유지하기 쉽습니다.

심층 분석: 멀티모달 콘텐츠 처리 (MCP)

Gemini 모델의 가장 강력한 측면 중 하나는 여러 모달리티(텍스트, 이미지, 오디오, 비디오)에 걸쳐 콘텐츠를 이해하고 생성하는 능력입니다. Google Gen AI SDK는 이를 완벽하게 지원하여 풍부한 멀티모달 애플리케이션을 구축할 수 있도록 합니다.

MCP는 주로 generateContentsendMessage(채팅)와 같은 메서드의 contents 매개변수를 통해 이루어집니다. contents 배열은 여러 Part 객체를 포함할 수 있는 일련의 Content 객체를 받습니다. 각 Part는 다른 유형의 데이터를 나타낼 수 있습니다.

멀티모달 콘텐츠 구조:

  • Content 객체: 대화의 단일 턴 또는 단일 입력 블록을 나타냅니다. 일반적으로 role("user" 또는 "model")과 parts 배열을 가집니다.
  • Part 객체: 실제 데이터가 있는 곳입니다. Part는 다음 중 하나일 수 있습니다.
  • 텍스트 입력용 { text: "텍스트 프롬프트" }.
  • 요청에 이미지 데이터를 직접 삽입하기 위한 { inlineData: { mimeType: "image/jpeg", data: "base64_encoded_image_string" } }.
  • ai.files.upload()를 통해 업로드된 파일 또는 공개적으로 액세스 가능한 URI(특히 Vertex AI용)를 참조하기 위한 { fileData: { mimeType: "video/mp4", fileUri: "gs://bucket/object" } }.
  • 비디오 입력에는 비디오 파일의 특정 세그먼트를 지정하기 위한 startOffsetendOffset와 같은 videoMetadata도 포함될 수 있습니다.

예시: 멀티모달 프롬프트 (텍스트 및 이미지):

import { GoogleGenAI } from '@google/genai';
// ... (초기화)

async function describeImage() {
  // 'base64ImageData'가 JPEG 이미지의 Base64 인코딩 문자열이라고 가정
  const base64ImageData = "..."; // Base64 이미지 데이터

  const contents = [
    {
      role: "user",
      parts: [
        { text: "이 이미지에는 무엇이 있나요?" },
        {
          inlineData: {
            mimeType: "image/jpeg",
            data: base64ImageData,
          },
        },
      ],
    },
  ];

  const response = await ai.models.generateContent({
    model: "gemini-pro-vision", // 또는 Gemini 2.5 비전 지원 모델
    contents: contents,
  });
  console.log(response.text);
}

describeImage();

프롬프트에서 다양한 데이터 유형을 원활하게 혼합하는 이 기능은 시각적 Q&A 시스템부터 비디오 콘텐츠를 분석하고 설명하는 도구에 이르기까지 광범위한 애플리케이션 가능성을 열어줍니다. SDK는 이미지 생성을 위한 직접적인 메서드를 제공하지만, 비디오 생성은 직접적인 SDK 메서드로 명시적으로 제공되지 않습니다. 대신 비디오는 주로 입력 모달리티로 처리됩니다. 그러나 generateContent를 통해 액세스되는 고급 멀티모달 모델은 요약 또는 비디오 콘텐츠에 대한 질문 답변과 같이 정교한 방식으로 비디오 입력을 처리하고 응답할 수 있습니다.

Live API를 사용한 실시간 상호 작용 (ai.live)

짧은 대기 시간의 대화형 경험이 필요한 애플리케이션의 경우 ai.live 하위 모듈은 판도를 바꾸는 요소입니다. 현재 미리 보기 상태이며 Gemini API에 대해 v1alpha API 버전이 필요하며, ai.live는 Gemini 모델과의 양방향 스트리밍을 위한 WebSocket 연결을 설정합니다. 이를 통해 텍스트, 오디오 청크, 심지어 비디오 프레임을 입력으로 실시간으로 전송하고 텍스트 또는 오디오를 출력으로 수신할 수 있습니다.

ai.live의 주요 개념:

  1. ai.live.connect(params): 이것이 진입점입니다. 모델 이름(model), 연결 구성(config), 다양한 WebSocket 이벤트(예: onopen, onmessage, onerror, onclose)에 대한 콜백 함수(callbacks)와 같은 매개변수를 제공합니다. 이는 Session 객체로 해결되는 Promise를 반환합니다.
  2. Session 객체: 활성 WebSocket 연결을 나타냅니다. 다음과 같은 메서드를 가집니다.
  • sendClientContent(params): 텍스트 메시지 또는 대화 컨텍스트 미리 채우기에 적합한 구조화된 Content(generateContent와 유사)를 보냅니다.
  • sendRealtimeInput(params): 오디오 청크 또는 비디오 프레임(이미지 형태)의 연속 스트림에 최적화된 Blob 데이터를 보냅니다. 이 메서드는 sendClientContent와 혼합될 경우 엄격한 순서 보장을 희생하더라도 응답성을 위해 설계되었습니다.
  • sendToolResponse(params): 라이브 세션 내에서 함수 호출이 사용되는 경우 모델에 응답을 보냅니다.
  • close(): WebSocket 연결을 종료합니다.

구성 (LiveConnectParametersLiveConnectConfig):

  • model: 연결할 Gemini 모델을 지정합니다(예: 문서 예시에 표시된 'gemini-2.0-flash-exp'와 같은 실험 모델 또는 기타 v1alpha 호환 모델).
  • config.responseModalities: 원하는 출력 유형을 지정하는 배열입니다(예: [Modality.AUDIO, Modality.TEXT]). 지정되지 않으면 기본값은 Modality.AUDIO입니다.
  • config.speechConfig: TTS 출력 구성 (나중에 자세히 설명).
  • config.systemInstruction: 모델을 안내하는 시스템 수준 지침.
  • config.tools: 함수 호출 선언.

콜백 (LiveCallbacks):

  • onopen: WebSocket 연결이 성공적으로 설정되면 호출됩니다.
  • onmessage: 서버에서 메시지(예: 생성된 텍스트, 오디오 데이터, 도구 호출)를 수신하면 호출됩니다.
  • onerror: WebSocket 연결에 오류가 발생하면 호출됩니다.
  • onclose: 연결이 닫히면 호출됩니다.

예시: 기본적인 ai.live 설정 (개념적):

import { GoogleGenAI, Modality } from '@google/genai';

// Gemini API의 경우 apiVersion: 'v1alpha'로 초기화해야 함
const ai = new GoogleGenAI({ apiKey: 'YOUR_GEMINI_API_KEY', apiVersion: 'v1alpha' });

async function startLiveSession() {
  try {
    const session = await ai.live.connect({
      model: 'gemini-pro', // 또는 라이브를 지원하는 특정 모델, 문서를 확인하세요
      config: {
        responseModalities: [Modality.TEXT, Modality.AUDIO], // 텍스트와 오디오 모두 수신
        // speechConfig: { ... } // TTS용, 아래에서 다룸
      },
      callbacks: {
        onopen: () => console.log('라이브 세션 연결됨!'),
        onmessage: (serverMessage) => {
          // 서버에서 메시지 처리
          // 텍스트, 오디오 데이터, 도구 호출 등이 될 수 있습니다.
          console.log('서버로부터 수신:', serverMessage);
          if (serverMessage.speechUpdate?.audio) {
            // 수신 오디오 데이터 처리 (예: 재생)
            const audioBytes = serverMessage.speechUpdate.audio;
            // ... 오디오 재생 로직 ...
          }
          if (serverMessage.textUpdate?.text) {
             console.log("텍스트: ", serverMessage.textUpdate.text);
          }
        },
        onerror: (error) => console.error('라이브 세션 오류:', error),
        onclose: () => console.log('라이브 세션 닫힘.'),
      },
    });

    // 이제 메시지를 보낼 수 있습니다.
    session.sendClientContent({ turns: [{ role: 'user', parts: [{text: '안녕하세요, 라이브 Gemini!'}] }] });

    // 연속 오디오 입력의 경우:
    // navigator.mediaDevices.getUserMedia({ audio: true }).then(stream => {
    //   const mediaRecorder = new MediaRecorder(stream);
    //   mediaRecorder.ondataavailable = event => {
    //     if (event.data.size > 0) {
    //       session.sendRealtimeInput({ media: { mediaChunks: [event.data] } });
    //     }
    //   };
    //   mediaRecorder.start(1000); // 1초마다 오디오 청크 전송
    // });

    // 완료되면 세션을 닫는 것을 잊지 마세요
    // session.close();

  } catch (error) {
    console.error('라이브 세션 연결 실패:', error);
  }
}

startLiveSession();

ai.live 모듈은 진정으로 대화적이고 반응적인 애플리케이션을 구축하는 데 매우 강력하며, 다양한 모달리티에 걸쳐 사용자 입력에 실시간으로 반응합니다.

Text-to-Speech (TTS) 모델 및 기능

SDK는 주로 오디오 출력이 요청될 때 ai.live 인터페이스를 통해 TTS(Text-to-Speech) 생성을 용이하게 합니다. 이를 통해 Gemini 모델은 텍스트뿐만 아니라 음성 오디오로도 응답할 수 있습니다.

TTS 구성 (SpeechConfigVoiceConfig):

ai.live.connect()를 사용하여 라이브 연결을 설정할 때 config 매개변수 내에서 speechConfig를 지정할 수 있습니다.

  • SpeechConfig: 이 객체는 현재 하나의 주요 속성을 가집니다.
  • voiceConfig: TTS 출력에 대해 원하는 음성을 지정하는 객체입니다.
  • VoiceConfig:
  • prebuiltVoice: 미리 빌드된 음성 이름(예: Google에서 제공할 수 있는 'aura-asteria-en', 'aura-luna-en' – 항상 최신 공식 문서를 참조하여 사용 가능한 음성 이름을 확인하세요)을 지정할 수 있습니다.
  • customVoice: (잠재적으로) API에서 지원하는 경우 맞춤 학습된 음성을 사용하기 위한 것입니다.

예시: 라이브 세션에서 오디오 출력 요청:

// ai.live.connect 매개변수 내:
// ...
config: {
  responseModalities: [Modality.AUDIO], // TTS에 필수적
  speechConfig: {
    voiceConfig: {
      // 실제 사용 가능한 미리 빌드된 음성 이름으로 대체
      prebuiltVoice: 'aura-asteria-en',
    }
  }
},
callbacks: {
  onmessage: (serverMessage) => {
    if (serverMessage.speechUpdate?.audio) {
      const audioData = serverMessage.speechUpdate.audio; // ArrayBuffer입니다.
      // 브라우저에서 이 오디오 데이터를 재생하거나 Node.js에 저장하는 로직
      // 예를 들어, 브라우저에서:
      // const audioBlob = new Blob([audioData], { type: 'audio/mpeg' }); // 또는 적절한 MIME 유형
      // const audioUrl = URL.createObjectURL(audioBlob);
      // new Audio(audioUrl).play();
      console.log('TTS용 오디오 데이터 수신.');
    }
    if (serverMessage.textUpdate?.text) {
        console.log("함께 제공되는 텍스트 (있는 경우):", serverMessage.textUpdate.text)
    }
  },
  // ... 기타 콜백
},
// ...

오디오 출력을 위해 구성된 경우 라이브 세션의 onmessage 콜백은 ServerMessage 객체를 수신합니다. 메시지에 음성이 포함되어 있으면 speechUpdate.audio 필드에 오디오 데이터(일반적으로 ArrayBuffer 형태)가 포함됩니다. 그런 다음 이 데이터를 처리하여 사용자에게 재생하거나 오디오 파일로 저장할 수 있습니다. textUpdate.text 필드에는 음성의 텍스트 버전도 채워질 수 있습니다.

TTS를 라이브 대화 흐름에 직접 통합함으로써 SDK는 음성 중심 애플리케이션, 대화형 비서 및 접근성 기능에 이상적입니다.

이미지 생성 모델

SDK는 Imagen과 같은 모델을 사용하여 이미지를 생성하기 위한 전용 메서드인 ai.models.generateImages()를 제공합니다. 이 메서드를 사용하면 텍스트 프롬프트를 제공하고 생성된 이미지 데이터를 받을 수 있습니다.

ai.models.generateImages() 사용:

이 메서드는 다음을 포함하는 GenerateImagesParameters를 받습니다.

  • model: 이미지 생성 모델의 식별자(예: 'imagen-3.0-generate-002' – 항상 문서를 확인하여 현재 모델 이름을 확인하세요).
  • prompt: 생성하려는 이미지에 대한 텍스트 설명.
  • config (선택 사항 GenerateImagesConfig):
  • numberOfImages: 생성할 이미지 후보 수 (기본값은 종종 1).
  • negativePrompt: 이미지에 포함되지 않기를 원하는 것에 대한 설명.
  • seed: 재현 가능한 결과를 위한 무작위성 제어 숫자.
  • aspectRatio: 원하는 가로 세로 비율 (예: "1:1", "16:9").
  • includeRaiReason: 이미지가 책임 있는 AI 검사를 통과하지 못한 경우 이유를 포함할지 여부.
  • 기타 모델별 매개변수.

예시: 이미지 생성:

import { GoogleGenAI } from '@google/genai';
// ... (Vertex AI 초기화, Imagen은 종종 Vertex AI 서비스입니다)
const ai = new GoogleGenAI({ vertexai: true, project: 'your-gcp-project-id', location: 'your-gcp-location' });


async function createImage() {
  try {
    const response = await ai.models.generateImages({
      model: 'imagen-3.0-generate-002', // 최신 모델은 문서를 확인하세요
      prompt: '비행체와 네온사인이 있는 석양의 미래 도시 풍경.',
      config: {
        numberOfImages: 1,
        aspectRatio: '16:9',
        includeRaiReason: true,
      },
    });

    if (response?.generatedImages && response.generatedImages.length > 0) {
      const imageBytesBase64 = response.generatedImages[0]?.image?.imageBytes;
      if (imageBytesBase64) {
        // imageBytesBase64는 이미지의 Base64 인코딩 문자열입니다.
        console.log('이미지 생성됨 (Base64 인코딩)!');
        // 그런 다음 브라우저에 이 이미지를 표시하거나 (예: <img src="data:image/png;base64,..." />)
        // Node.js에 파일로 저장할 수 있습니다.
      }
    } else {
      console.log('이미지 생성되지 않거나 RAI 필터링됨:', response?.raiFilteredReason);
    }
  } catch (error) {
    console.error('이미지 생성 오류:', error);
  }
}

createImage();

응답(GenerateImagesResponse)에는 GeneratedImage 객체 배열이 포함됩니다. 각 객체에는 이미지 데이터(종종 Base64 형식의 imageBytes), 필터링된 경우 raiFilteredReason, 기타 메타데이터가 포함될 수 있습니다.

비디오 처리 (입력으로)

앞서 강조했듯이 SDK는 비디오를 생성된 출력보다는 입력 모달리티로 주로 취급합니다. 멀티모달 Gemini 모델에 대한 프롬프트에 몇 가지 방법으로 비디오 데이터를 포함할 수 있습니다.

비디오 파일 업로드 (ai.files.upload() - Gemini API):
ai.files 하위 모듈을 사용하여 비디오 파일(예: MP4)을 업로드할 수 있습니다. 업로드되면 Content 객체의 fileData 부분에서 참조할 수 있는 파일 URI를 받습니다.

// 파일 업로드 개념 예시 (Gemini API)
// const uploadedFile = await ai.files.upload({
//   file: pathToYourVideoFile, // 또는 브라우저의 Blob
//   mimeType: 'video/mp4',
//   displayName: 'my-cool-video.mp4'
// });
// const videoFileUri = uploadedFile.uri;

const contents = [{
  role: "user",
  parts: [
    { text: "이 비디오를 요약해 주세요." },
    { fileData: { mimeType: "video/mp4", fileUri: "YOUR_UPLOADED_VIDEO_URI_HERE" } },
    // 선택 사항으로 VideoMetadata 추가
    // { videoMetadata: { startOffset: "0s", endOffset: "30s" } } // 처음 30초 처리
  ]
}];

Google Cloud Storage URI 사용 (Vertex AI):
Vertex AI를 사용할 때 fileData 부분에서 gs:// URI를 사용하여 Google Cloud Storage 버킷에 저장된 비디오 파일을 직접 참조할 수 있습니다.

라이브 비디오 프레임 (ai.live):
ai.live 섹션에서 논의했듯이 session.sendRealtimeInput()을 사용하여 개별 비디오 프레임(Blob 객체, 아마도 image/jpeg 또는 image/png와 같은 이미지 MIME 유형)을 보낼 수 있습니다. 이를 통해 라이브 비디오 피드를 기반으로 실시간 분석 또는 상호 작용이 가능합니다.

startOffsetendOffset를 포함하는 VideoMetadata 인터페이스를 사용하면 모델이 집중해야 할 비디오 파일의 세그먼트를 지정할 수 있으며, 이는 긴 비디오를 처리하는 데 유용합니다.

Gemini API vs. Vertex AI 지원: 이중 접근 방식

Google Gen AI SDK의 중요한 장점은 Gemini 개발자 API(Google AI Studio 사용)와 Vertex AI 모두에 대한 원활한 지원입니다. 이 이중 지원은 개발자에게 유연성과 명확한 업그레이드 경로를 제공합니다.

  • Gemini 개발자 API (Google AI Studio):
  • 장점: API 키를 사용한 빠른 설정, 신속한 프로토타이핑, 개인 프로젝트 및 클라우드 인프라 관리가 덜 필요한 서버 측 애플리케이션에 이상적입니다. 종종 최신 실험 기능 및 모델에 대한 조기 액세스를 제공합니다.
  • 단점: API 키는 클라이언트 측에 노출되어서는 안 됩니다. ai.filesai.live와 같은 기능은 이 API(또는 v1alpha 버전)에만 해당됩니다. 속도 제한 및 할당량이 Vertex AI와 다를 수 있습니다.
  • Vertex AI:
  • 장점: 강력한 MLOps 기능, 보안을 위한 IAM, 다른 Google Cloud 서비스와의 통합, 대규모 애플리케이션에 적합한 더 높은 할당량을 갖춘 프로덕션급 플랫폼입니다. 모델 가용성이 더 관리되고 안정적일 수 있습니다.
  • 단점: Google Cloud 프로젝트와 GCP 개념에 대한 익숙함이 필요합니다. 초기화가 약간 더 복잡합니다(프로젝트 ID, 위치). 일부 매우 새로운 실험 기능은 Gemini API에 먼저 출시될 수 있습니다.

SDK는 많은 차이점을 추상화합니다. ai.models.generateContent()와 같은 핵심 메서드는 초기화(apiKey vs. vertexai: true, project, location)의 주요 차이점을 제외하고는 둘 다 비슷하게 작동합니다. 이를 통해 Gemini API로 시작하여 애플리케이션이 성숙하고 확장됨에 따라 AI 로직을 완전히 다시 작성하지 않고도 Vertex AI로 마이그레이션할 수 있습니다. 메서드 문서는 기능 또는 매개변수가 한 플랫폼에만 고유한지 여부를 종종 명시합니다.

결론: 차세대 AI 앱을 위한 도구 키트

Google Gen AI TypeScript/JavaScript SDK는 Gemini 2.5 및 기타 고급 모델의 기능을 JavaScript 개발자에게 직접 제공하는 강력하고 다재다능한 도구 키트입니다. 멀티모달 콘텐츠, Live API를 통한 실시간 상호 작용, 통합 TTS, 이미지 생성, 그리고 Gemini 개발자 API와 Vertex AI 중에서 선택할 수 있는 유연성을 지원하므로 필수적인 리소스입니다.

SDK의 구조, 핵심 모듈(ai.models, ai.live, ai.chats, ai.files, ai.caches), 멀티모달 프롬프트의 미묘한 차이를 이해함으로써 이전보다 더 풍부한 방식으로 세상을 보고, 듣고, 말하고, 이해할 수 있는 혁신적인 애플리케이션을 구축할 준비가 되었습니다. Google이 AI의 경계를 계속 확장함에 따라 이 SDK는 JavaScript 및 TypeScript 프로젝트 내에서 그 잠재력을 발휘하는 열쇠가 될 것입니다. 지금 바로 뛰어들어 실험하고 AI 기반 애플리케이션의 미래를 구축하세요!

README.mddocs 디렉터리에서 수집된 정보를 기반으로 기사를 생성했습니다. 지정된 모든 주제를 다루고 요청된 단어 수를 목표로 합니다.