Home
Sangki Han
Cancel

LangChain 도입기 - LLM 에이전트 루프를 직접 짜다가 생긴 일

서버 에러 로그를 LLM이 분석해서 Slack으로 원인과 수정 코드를 보내주는 시스템을 만들고 있었다. LLM이 단순히 로그를 받아서 답을 내는 게 아니라, 필요하면 직접 소스 파일을 검색해가며 분석하는 에이전트 구조였다. 처음엔 이 루프를 직접 구현했는데, 문제가 생겼다. 직접 구현한 에이전트 루프 LLM 에이전트의 동작 방식은 단순하다. 1....

AI 오류 자동 분석 에이전트 구축기 (4) — Reranker 모델 도입

벡터 검색(코사인 유사도)만으로는 의미적으로 가장 관련된 파일을 정확히 골라내기 어렵다. Reranker가 그 한계를 보완한다. 벡터 검색의 한계 ChromaDB의 코사인 유사도 검색은 임베딩 벡터 방향의 유사도를 측정한다. 단어 빈도나 표면적 유사도에 강하고 빠르다. 하지만 문제가 있다. 예시: 에러가 UserService에서 발생했는데 벡터...

AI 오류 자동 분석 에이전트 구축기 (3) — Embedding 모델과 ChromaDB RAG 구축

에러 로그만 보고 정확한 수정 코드를 제안하려면 LLM이 소스 파일을 알고 있어야 한다. 소스 파일 전체를 매번 프롬프트에 넣을 수는 없다. RAG(Retrieval-Augmented Generation)가 필요한 이유다. 왜 RAG를 도입했나 puppynote-server는 수백 개의 Java 파일로 구성되어 있다. 이걸 전부 LLM 프롬프트에 ...

AI 오류 자동 분석 에이전트 구축기 (2) — FastAPI와 파이프라인 설계

에이전트의 뼈대가 되는 FastAPI 서버를 어떻게 설계했는지, 그리고 puppynote-server(Spring Boot)에서 어떻게 에러를 보내는지 정리한다. 왜 FastAPI인가 에이전트 백엔드로 Python을 선택한 이유는 LLM 생태계 때문이다. Ollama Python SDK, LangChain, ChromaDB 등 LLM 관련 라이브러...

Spring AI + Ollama로 반려동물 음식 검색 기능 구현하기

개요 PuppyNote 프로젝트에 반려동물 음식 안전 정보를 제공하는 AI 검색 기능을 추가했다. “당근은 강아지에게 먹여도 되나요?” 같은 질문을 입력하면 AI가 안전 여부와 영양 정보를 답변해주는 기능이다. AI 호출은 비용(응답 시간)이 크기 때문에 Elasticsearch를 1차 캐시로 사용해 동일한 질문이 반복될 경우 AI를 거치지 않고...

AI 오류 자동 분석 에이전트 구축기 (1) — 도입 배경과 초기 세팅

개인 프로젝트 puppynote-server를 운영하면서 반복적으로 겪는 불편함이 있었다. 에러가 발생해도 즉시 확인하기 어렵다는 것이다. 왜 만들었나 개인 스터디 프로젝트는 24시간 모니터링하는 팀이 없다. 배포하고 자리를 뜨면 에러가 났는지조차 모른다. Slack에 에러 알림이 와도 “나중에 봐야지”가 반복된다. 원인 파악에 시간이 걸리고, 이...

Eureka 없이 Spring Cloud Gateway에서 로드밸런싱하기

Spring Cloud Eureka를 도입했다가 제거하고 Gateway에서 직접 VM을 관리하는 방식으로 변경했다. 이유와 설정 방법을 정리한다. Eureka를 제거한 이유 Eureka는 서비스가 많고 인스턴스가 동적으로 늘어나는 환경에서 진가를 발휘한다. 새 VM이 뜨면 Eureka에 자동 등록되고, Gateway는 그걸 감지해서 자동으로 라...

Spring Cloud Eureka 서비스 등록/해제 이벤트 감지

Eureka 서버에 서비스가 올라오거나 내려갈 때 알람을 보내고 싶었다. Spring Cloud Eureka Server는 서비스 등록/해제 시 ApplicationEvent를 발행하기 때문에 @EventListener로 간단하게 감지할 수 있다. 사용 이벤트 이벤트 발생 시점 ...

Spring Cloud Gateway 구축 및 Eureka 연동

기존에는 각 서비스를 직접 호출하거나 Nginx로 라우팅했는데, 서비스가 늘어날수록 관리가 어려워져서 Spring Cloud Gateway를 도입했다. Eureka와 연동해서 서비스가 자동으로 라우팅되고 로드밸런싱까지 되게 구성했다. 전체 구조 클라이언트 │ ▼ [Gateway :8080] ──Eureka 조회──▶ [Eure...

Spring Cloud Eureka 서버 구축 및 서비스 등록

마이크로서비스 구조에서 서비스 디스커버리를 위해 Spring Cloud Netflix Eureka를 도입했다. Gateway가 각 서비스의 IP를 직접 하드코딩하는 게 아니라, Eureka를 통해 동적으로 서비스를 발견하고 로드밸런싱까지 가능하게 하는 게 목표였다. 전체 구조 [platform-data-api] ──등록──▶ [Eureka Se...