핵심 요약
FastAPI와 LangGraph를 결합하여 상태 기반 순환 실행, 부모-자식 청킹, PII 마스킹을 포함한 실무형 RAG 시스템을 구축하고 주요 기술적 도전 과제를 공유했다.
배경
LangGraph와 FastAPI를 사용하여 실제 서비스 수준의 RAG 시스템을 구축한 경험을 공유하고, 순환 그래프 구조에서의 컨텍스트 관리 및 검색 품질 평가에 대한 커뮤니티의 의견을 구하기 위해 작성되었다.
의미 / 영향
LangGraph를 활용한 순환형 RAG 설계가 프로덕션 환경에서 실질적인 대안이 될 수 있음을 보여준다. 특히 부모-자식 청킹과 보안 레이어의 결합은 성능과 안전성을 동시에 고려한 모범 사례로 평가될 수 있다.
커뮤니티 반응
작성자의 구체적인 아키텍처 공유에 대해 긍정적인 반응이며, 특히 LangGraph 루프 내에서의 컨텍스트 압축 방법과 하이브리드 검색 결합 방식에 대한 기술적 논의가 이어졌다.
실용적 조언
- 재귀적 검색 시 무한 루프를 방지하기 위해 LangGraph의 서킷 브레이킹 기능을 반드시 활용해야 한다.
- 중복 임베딩으로 인한 비용 및 성능 저하를 막기 위해 멱등성(Idempotent) 수집 로직을 구현해야 한다.
- 민감한 데이터를 다루는 경우 LLM 전송 전 Presidio와 같은 도구로 PII를 마스킹하는 레이어를 추가한다.
언급된 도구
LangGraph추천
상태 기반 에이전트 및 순환 워크플로우 오케스트레이션
FastAPI추천
RAG 시스템의 API 서버 프레임워크
Qdrant추천
768차원 벡터 임베딩 저장 및 검색
Presidio추천
개인식별정보(PII) 마스킹 및 데이터 보호
섹션별 상세
LangGraph를 활용한 상태 기반 순환 실행 및 도구 라우팅 구현: LangGraph의 핵심 기능인 상태 유지 순환 실행을 통해 복잡한 검색 워크플로우를 관리한다. 특히 재귀적 검색 과정에서 발생할 수 있는 무한 루프를 방지하기 위해 서킷 브레이킹(Circuit Breaking) 메커니즘을 도입하여 시스템의 안정성을 확보했다.
효율적인 검색을 위한 부모-자식 청킹 및 하이브리드 저장소 구조: 검색 정확도를 높이기 위해 문서를 부모-자식 구조로 나누어 관리한다. 768차원 임베딩을 가진 자식 청크는 Qdrant 벡터 데이터베이스에 저장하고, 실제 원문인 부모 문서는 Postgres(Supabase)에 저장하여 검색 효율성과 데이터 무결성을 동시에 달성했다.
보안 및 데이터 보호를 위한 다층 레이어 설계: LLM 호출 전 단계에서 의도 분류기(Intent Classifier)와 Presidio를 활용한 PII(개인식별정보) 마스킹 레이어를 구축했다. 이를 통해 민감한 정보가 외부 모델로 유출되는 것을 방지하고, 사용자 입력의 의도를 미리 파악하여 적절한 도구로 라우팅하는 보안 체계를 마련했다.
순환 그래프 구조에서의 컨텍스트 관리 및 멱등성 보장: 시스템 운영 중 직면한 주요 과제로 재귀적 검색 시 급격히 증가하는 컨텍스트 크기 관리 문제를 제시했다. 또한 재색인 시 중복 임베딩 생성을 방지하기 위한 멱등성(Idempotent) 기반의 데이터 수집 프로세스 구축과 순환 구조 내에서의 안전한 재시도 처리 방안을 논의했다.
실무 Takeaway
- LangGraph는 복잡한 RAG 워크플로우에서 상태 관리와 순환 로직을 구현하는 데 매우 유용하다.
- 부모-자식 청킹 전략을 통해 검색 성능을 최적화하고 벡터 DB와 관계형 DB를 혼합 사용하는 것이 효과적이다.
- 프로덕션 환경에서는 PII 마스킹과 의도 분류 같은 보안 레이어 배치가 필수적이다.
- 순환 구조의 그래프에서는 컨텍스트 윈도우 초과를 방지하기 위한 압축 및 요약 전략이 중요하다.
AI 분석 전체 내용 보기
AI 요약 · 북마크 · 개인 피드 설정 — 무료