Project2026.02 - 현재

Knowledge Garden

포트폴리오 겸 챗봇 백엔드를 NestJS로, 프론트엔드를 Next.js로 구현한 개인 프로젝트입니다.

Role

개인 프로젝트

Period

2026.02 - 현재

Team

1인

GitHub
NestJS의 모듈·DI·인터셉터·가드 등 프레임워크 기능을 활용해 챗봇 백엔드를 구성하고, Next.js App Router로 프론트엔드를 개발했습니다. 챗봇은 MongoDB 텍스트 검색으로 이력서 데이터를 찾아 LLM 컨텍스트에 주입하는 구조이며, 가드레일로 무관 질문을 필터링하고 인터셉터로 응답 분석 로그를 수집합니다.
Backend
NestJSMongoDBMongooseOpenAI API
Frontend
Next.jsTypeScriptTailwind CSSFramer Motion
Infra
DockerVercel

MongoDB 텍스트 검색 + 가드레일 + 세션 관리

LLM 챗봇 API 설계

텍스트 검색 기반 컨텍스트 주입 + 가드레일 필터링

Problem

포트폴리오 방문자가 프로젝트에 대해 자유롭게 질문할 수 있는 챗봇이 필요했습니다.단순히 LLM에 전체 이력서를 넣으면 토큰 낭비가 심하고, 무관한 질문(날씨, 코딩 문제 등)에도 응답하게 됩니다.

Approach

질문과 관련된 이력서 데이터만 검색해서 LLM 컨텍스트에 주입하는 구조로 설계했습니다.
  • MongoDB 텍스트 인덱스에 필드별 가중치(title 10x, summary 5x, content 1x)를 설정하고, 상위 5개 문서를 시스템 프롬프트에 마크다운으로 주입
  • LLM 가드레일 분류기(max_tokens: 5, temp: 0)로 포트폴리오 무관 질문을 사전 필터링
  • 인메모리 슬라이딩 윈도우로 최근 10턴 대화 맥락 유지
  • 입력 검증(500자 제한), 글로벌 쓰로틀링(200req/min)

Result

질문에 맞는 프로젝트·경험 데이터만 컨텍스트로 들어가 토큰 효율을 높이고, 무관한 질문은 가드레일에서 걸러냅니다. 대화 맥락이 유지되어 후속 질문도 자연스럽게 이어집니다.
모듈 구성: Chat(오케스트레이션) · AI(LLM 호출·가드레일) · Analytics(로깅) · Resume(데이터 검색) 4개 모듈을 NestJS DI로 연결
분석 로깅: 인터셉터에서 토큰 사용량·응답 시간을 비동기로 MongoDB에 저장하고, 클라이언트 응답에서는 내부 메타데이터를 제거
TTL 자동 정리: MongoDB TTL 인덱스로 90일 지난 로그 자동 만료

k6 부하 테스트 중 발견, heapUsed 52MB 회수

세션 메모리 누수 → TTL 기반 자동 정리 스케줄러

heapUsed 52MB 회수 (56.5%)

Problem

챗봇 API 부하 테스트 중 힙 메모리가 테스트 종료 후에도 baseline으로 복귀하지 않는 현상을 발견했습니다.원인 추적 결과, ChatService의 Map 세션 저장소에 TTL이 없어 사용자가 떠나도 삭제 로직 없이 세션이 영구 잔류하는 구조. 운영 시간이 길어질수록 메모리가 계속 쌓이는 누수였습니다.

Approach

SessionData에 lastAccessedAt를 추가하고, @nestjs/schedule 기반 TTL 정리 스케줄러를 도입했습니다.
  • @Interval로 주기적 정리(기본 10분), TTL(기본 30분) 초과 세션 자동 삭제

Result

1,000세션(20,000엔트리) 누적 시 heapUsed 92.85MB → TTL 정리 후 40.35MB로 baseline 복귀.52.50MB(56.5%) 회수 확인.

Key Results

NestJS 모듈 아키텍처

Chat · AI · Analytics · Resume 4개 도메인 모듈 분리, DI 기반 의존성 관리

LLM 챗봇

가중치 텍스트 검색 컨텍스트 주입, 가드레일 필터링, 슬라이딩 윈도우 대화 관리

92.85 → 40.35MB

세션 메모리 누수 해소

TTL 스케줄러 도입, k6 실측 heapUsed 56.5% 회수

Next.js 프론트엔드

App Router, 동적 라우트, Framer Motion 챗봇 위젯, PDF 내보내기

Next Project

StoLink

N+1 쿼리 최적화 · 결제 동시성 제어