인프런이 강의 학습 에이전트를 구축하며 겪은 기술 스택 선정, 컨텍스트·도구 설계, LLM-as-a-Judge 품질 개선, 비용 최적화 전략을 다룬다. LLM SSE 스트리밍 처리를 위해 Spring MVC + Virtual Thread + Spring AI를 선택하고, 명시적 프롬프트 캐싱으로 입력 토큰을 90% 절감하는 과정까지 실전 경험이 담겨 있다.
핵심 포인트- LLM SSE 스트리밍(수십 초 연결 유지)을 위한 기술 스택으로 Spring MVC + Virtual Thread + Spring AI를 최종 채택했다. Webflux의 리액티브 전염 문제와 Nest.js의 CPU 바운드 블로킹 위험을 고려한 결정이다.
- 에이전트에 8종 컨텍스트(커리큘럼, 진도, 자막, 비디오 프레임, 유저 메모리 등)를 제공하되, Lost in the Middle 방지를 위해 필요 시 Tool로 동적 로드하는 구조를 설계했다.
- 이미지 분석은 별도 서브에이전트에 위임해 환각을 줄이고 전체 입력 토큰도 절감했다.
- LLM-as-a-Judge 워크플로우(학습 에이전트 → 평가관 에이전트 → 조교 에이전트)와 약 40개의 Golden Dataset으로 답변 품질을 측정하고 프롬프트를 개선한다.
- 명시적 캐싱으로 입력 토큰 90% 할인을 받으며, gemini-3.1-flash-lite 기준 30,000 토큰 캐시 시 손익분기점은 시간당 4.44 요청이다.
상세 정리- 기술 스택 선정 배경: LLM SSE 스트리밍은 수십 초간 연결을 유지해야 해서 전통적 스레드 풀은 스레드 고갈이 발생한다. Spring MVC+Virtual Thread, Webflux, Nest.js 세 가지를 비교했다.
- Virtual Thread 채택: 블로킹 I/O 시 캐리어 스레드에서 자동 분리(unmount)돼 스레드 고갈 없이 동기적 코드 스타일을 유지한다. Java 25부터 synchronized 메서드 pinning 이슈도 대폭 개선됐다.
- Webflux 탈락: Reactor Mono/Flux는 SSE에 최적화돼 있으나, 리액티브 전염 문제(한 지점 블로킹 시 전체 블로킹)가 외부 I/O가 복잡한 AI 파이프라인에서 위험하다.
- 컨텍스트 설계: 8종 컨텍스트(커리큘럼, 수강생 진도, 사용 언어, 유저 메모리, 자막, 비디오 프레임, 수업 요약, 페르소나) 중 과도한 컨텍스트는 LLM 품질 저하와 토큰 비용 증가를 유발하므로 필요 시 Tool로 동적 로드한다.
- 유저 메모리: Spring AI의 Advisor로 AOP 개념을 구현해 "더 간단하게 설명해줘" 같은 요청을 기억하고 이후 모든 답변에 자동 반영한다.
- 비디오 화면 캡처: 이미지 분석 전용 서브에이전트에 위임한다. 이미지 토큰화는 입력 토큰을 크게 늘리므로 서브에이전트로 책임을 한정해 비용과 환각을 동시에 줄인다.
- LLM-as-a-Judge 구성: 평가관 에이전트가 학습 에이전트 답변과 Golden Dataset(약 40개 정답지)을 비교해 점수와 피드백을 생성한다. 조교 에이전트가 피드백을 검토하고 프롬프트를 수정한다.
- 과적합 방지: 단일 피드백으로 즉시 프롬프트를 수정하지 않고, 여러 피드백에서 동일 문제가 반복될 때만 수정한다. 사람 검수 단계 포함 시 전자동보다 품질이 더 높았다.
- 암시적 캐싱의 한계: LLM API가 자동으로 동일한 시스템 프롬프트를 캐시하지만, 동적 컨텍스트가 포함되면 호출 간 프롬프트가 달라져 실제 캐싱 효과가 미미하다.
- 명시적 캐싱 도입: 개발자가 캐시를 직접 생성·관리해 TTL을 제어한다. gemini-3.1-flash-lite 기준 캐시 저장 비용 1달러/1M Token/시간, 입력 토큰 절감 90%. 30,000 토큰 캐시 시 손익분기점은 시간당 4.44 요청이다.
- 명시적 캐싱 제약: 캐시 포함 요청에서 시스템 프롬프트와 Tool Definition이 페이로드에 중복 포함되면 에러가 발생한다. 세션 간 공유 불가한 동적 데이터는 캐시에서 제외해야 한다.
- ADR 활용: 기술 의사결정을 ADR 문서로 기록하고 CLAUDE.md, AGENTS.md에 링크해 AI 코딩 에이전트가 컨텍스트를 파악하며 협업하도록 설계했다.
왜 읽나LLM SSE 스트리밍 서버 선택, 멀티 에이전트 비용 최적화(명시적 캐싱·서브에이전트 분리), LLM-as-a-Judge 품질 관리를 실제 서비스에 적용한 경험이 필요한 백엔드·AI 엔지니어에게 실전 레퍼런스다.