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일 지난 로그 자동 만료