LangChain.js와 NestJS를 사용하여 AI 에이전트 구축하기: 전체 튜토리얼
요약
NestJS와 LangChain.js를 결합하여 프로덕션 환경에서 안정적으로 동작하는 AI 에이전트 아키텍처를 구축하는 방법을 설명합니다. BullMQ를 활용한 비동기 작업 처리와 PostgreSQL을 이용한 대화 이력 관리 등 실무적인 구현 방식을 다룹니다.
핵심 포인트
- NestJS와 BullMQ를 활용한 비동기 AI 에이전트 워크플로우 구축
- Zod를 이용한 타입 안전한 도구(Tools) 정의 및 사용
- Rate limiting, Context window 관리, 비용 모니터링 등 실무 고려사항
- 프로덕션 환경을 위한 의존성 주입 및 로깅 아키텍처 설계
NestJS를 사용하면서 도구(tools)를 사용하고, 문맥(context)을 유지하며, 비동기 작업(asynchronous jobs)을 처리하는 AI 에이전트를 통합하고 싶다면 이 튜토리얼이 당신을 위한 것입니다. 이것은 이론이 아닙니다 — 우리가 SOM-OS에서 프로덕션 시스템을 위해 사용하는 아키텍처입니다.
아키텍처
Client → NestJS Controller → BullMQ Queue → Worker
↓
LangChain Agent
...
흐름은 간단합니다: 사용자가 요청을 보내면 BullMQ에 큐(enqueue)에 쌓이고, 워커(worker)가 Zod로 타입이 지정된 도구(tools)에 접근할 수 있는 LangChain 에이전트를 사용하여 작업을 처리하며, 히스토리(history)는 PostgreSQL에 저장됩니다.
1. 설치
npm install @nestjs/bullmq bullmq ioredis
npm install @langchain/core @langchain/openai @langchain/community
npm install zod
2. NestJS 모듈
// ia-agent.module.ts
import { Module } from '@nestjs/common';
import { BullModule } from '@nestjs/bullmq';
...
3. 컨트롤러 (Controller)
// ia-agent.controller.ts
import { Controller, Post, Body } from '@nestjs/common';
import { IaAgentService } from './ia-agent.service';
...
4. 서비스 + 큐 (Service + Queue)
// ia-agent.service.ts
import { Injectable } from '@nestjs/common';
import { Queue } from 'bullmq';
...
5. LangChain 에이전트를 포함한 워커 (Worker)
// ia-agent.processor.ts
import { Processor, WorkerHost } from '@nestjs/bullmq';
import { Job } from 'bullmq';
...
6. Docker를 이용한 배포 (Deploy)
FROM node:22-alpine AS builder
WORKDIR /app
COPY package*.json ./
...
빠른 튜토리얼이 알려주지 않는 것들
- 속도 제한 (Rate limits): OpenAI에는 제한이 있습니다. 이를 초 exceed하지 않도록
rateLimit과 함께 BullMQ를 사용하세요. - 컨텍스트 윈도우 (Context window): 히스토리가 커지면 잘라내야(truncate) 합니다. 보통 마지막 10개의 메시지로 충분합니다.
- 비용 (Cost): GPT-4o는 1M 토큰당 $5입니다. 3개의 도구(tools)를 사용하는 에이전트는 호출당 약 2k 토큰을 소비합니다. 모니터링하세요.
- 에러 (Errors): LangChain이 항상 깔끔하게 실패하는 것은 아닙니다. 모든 것을 try/catch로 감싸고 전체 트레이스(trace)를 로그로 남기세요.
왜 Express가 아니라 NestJS인가
프로덕션 환경의 에이전트를 위해서는 다음과 같은 요소들이 필요합니다: 교체 가능한 도구 (Swappable tools)를 위한 의존성 주입 (DI), 속도 제한 (rate limiting)을 위한 가드 (guards), 로깅 (logging)을 위한 인터셉터 (interceptors), 그리고 조직화를 위한 모듈 (modules)이 필요합니다. Express는 함수를 제공하지만, NestJS는 아키텍처 (architecture)를 제공합니다.
저는 NestJS vs Express: 2026년에 각각을 선택해야 하는 시점에 대해 더 자세한 비교 글을 작성했습니다.
우리가 이를 실제 비즈니스 시스템에 어떻게 적용하는지 알고 싶다면 SOM-OS를 살펴보세요. 우리는 마요르카(Mallorca)에서 AI를 활용한 비즈니스 운영 체제를 구축합니다.
질문이 있으신가요? 댓글로 남겨주세요.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기