Node.js를 사용해 Google Gemini로 AI 챗봇 만드는 방법

발행: (2026년 1월 13일 오후 06:36 GMT+9)
5 분 소요
원문: Dev.to

Source: Dev.to

Google Gemini을 사용한 Node.js AI 챗봇 만들기 커버 이미지

AI 챗봇은 이제 별로 인상적이지 않습니다. 유용한 챗봇이 인상적입니다.

오늘 챗봇을 만든다면 목표는 “LLM을 연결하고 텍스트를 반환한다”가 아니라 다음과 같아야 합니다:

“사용자를 이해하고, 컨텍스트를 기억하며, 깔끔하게 확장할 수 있는 챗봇을 어떻게 만들까?”

이 가이드에서는 Google GeminiNode.js를 사용해 프로덕션 수준 AI 챗봇을 구축하면서, 각 단계가 왜 중요한지도 배웁니다.

왜 Google Gemini인가?

Gemini는 실제 챗봇 활용에 적합합니다. 이유는 다음과 같습니다:

  • 긴 컨텍스트 윈도우
  • 빠른 응답 (Gemini Flash)
  • 강력한 추론 능력
  • 멀티모달 입력 지원 (텍스트, 이미지, 도구)

특히 적합한 경우

  • SaaS 코파일럿
  • 지원 봇
  • 내부 AI 어시스턴트

아키텍처

클라이언트 → Node.js API → Gemini → 응답

핵심 원칙

  • 프롬프트를 깔끔하게 유지
  • 컨텍스트를 의도적으로 주입
  • 대화 히스토리를 저장
  • 시스템 지시문과 사용자 입력을 분리

단계 1: 프로젝트 설정

npm init -y
npm install express dotenv @google/generative-ai

.env 파일을 생성합니다:

GEMINI_API_KEY=your_api_key_here

단계 2: Node.js에서 Gemini 초기화

import express from "express";
import dotenv from "dotenv";
import { GoogleGenerativeAI } from "@google/generative-ai";

dotenv.config();

const app = express();
app.use(express.json());

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

단계 3: 시스템 지시문 정의 (핵심 단계)

대부분의 챗봇은 이 과정을 건너뛰어 실패합니다.

const model = genAI.getGenerativeModel({
  model: "gemini-1.5-flash",
  systemInstruction: `
You are a helpful AI assistant.
Respond clearly, accurately, and concisely.
Ask follow‑up questions when needed.
`,
});

시스템 지시문 = 성격 + 제한 + 명확성.

단계 4: 대화 메모리 추가

메모리가 없으면 챗봇은 매 메시지마다 초기화됩니다.

let chatHistory = [];

app.post("/chat", async (req, res) => {
  const userMessage = req.body.message;

  chatHistory.push({
    role: "user",
    parts: [{ text: userMessage }],
  });

  const chat = model.startChat({ history: chatHistory });
  const result = await chat.sendMessage(userMessage);
  const reply = result.response.text();

  chatHistory.push({
    role: "model",
    parts: [{ text: reply }],
  });

  res.json({ reply });
});

이제 챗봇은:

  • 컨텍스트를 기억하고
  • 일관된 답변을 제공하며
  • 대화형 느낌을 줍니다

단계 5: 동적 컨텍스트 주입 (전문가가 하는 방법)

런타임 컨텍스트를 주입하면 출력이 크게 개선됩니다.

const dynamicContext = `
User role: SaaS Founder
Product stage: MVP
Goal: Reduce support tickets
`;

const chat = model.startChat({
  history: [
    { role: "user", parts: [{ text: dynamicContext }] },
    ...chatHistory,
  ],
});

이렇게 하면 응답이 구체적이 되고, 일반적이지 않게 됩니다.

피해야 할 흔한 실수

  • ❌ 프롬프트 과다 사용
  • ❌ 메모리 처리 누락
  • ❌ 시스템 지시문과 사용자 입력 혼합
  • ❌ 챗봇을 무상태(state‑less)로 취급

Gemini Flash와 Pro 언제 쓰나요?

Gemini 모델 비교

마무리 생각

훌륭한 AI 챗봇은 영리한 프롬프트가 아니라 다음에 달려 있습니다:

  • 컨텍스트
  • 메모리
  • 의도
  • 깔끔한 아키텍처

Gemini + Node.js 조합은 실시간 대화부터 프로덕션 급 AI 어시스턴트까지, 확장 가능하고 지능적인 챗봇을 만들기 위한 모든 빌딩 블록을 제공합니다.

Back to Blog

관련 글

더 보기 »