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

AI 챗봇은 이제 별로 인상적이지 않습니다. 유용한 챗봇이 인상적입니다.
오늘 챗봇을 만든다면 목표는 “LLM을 연결하고 텍스트를 반환한다”가 아니라 다음과 같아야 합니다:
“사용자를 이해하고, 컨텍스트를 기억하며, 깔끔하게 확장할 수 있는 챗봇을 어떻게 만들까?”
이 가이드에서는 Google Gemini와 Node.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 언제 쓰나요?

마무리 생각
훌륭한 AI 챗봇은 영리한 프롬프트가 아니라 다음에 달려 있습니다:
- 컨텍스트
- 메모리
- 의도
- 깔끔한 아키텍처
Gemini + Node.js 조합은 실시간 대화부터 프로덕션 급 AI 어시스턴트까지, 확장 가능하고 지능적인 챗봇을 만들기 위한 모든 빌딩 블록을 제공합니다.