최근 기업들은 사내 문서와 최신 정보를 LLM 서비스에 안전하게 연결하기 위해 RAG(Retrieval-Augmented Generation) 도입을 적극 추진하고 있습니다. 그러나 검색 없이 생성만 하는 LLM은 학습 시점 이후 바뀐 사내 정책이나 문서를 알지 못하고, 모른다는 사실조차 스스로 알리지 않아 그럴듯하지만 틀린 답을 내놓기 쉽습니다. 또한 챗봇, IDE 에이전트, 사내 도구마다 검색 로직을 각자 구현하면 같은 문서를 여러 번 인덱싱하고 품질도 제각각이 되는 문제가 반복됩니다.
이러한 문제를 해결하기 위해 사내 문서를 자동으로 수집·인덱싱하고, 하이브리드 검색 결과를 REST API와 MCP(Model Context Protocol)로 어떤 LLM 애플리케이션에든 동일하게 공급하는 셀프호스팅 검색 플랫폼, RAG Platform을 소개합니다.
- 문서 자동 수집: 파일 업로드(PDF·Word·HWP 등)와 웹·Confluence·GitHub 커넥터로 문서를 수집하고, 변경분만 자동 재인덱싱
- 하이브리드 검색: Dense(의미)+Sparse(키워드) 검색을 RRF로 결합하고 리랭킹까지 거쳐 문맥 기반 정확도 확보
- REST API + MCP 동시 제공: 하나의 검색 로직을 Claude·IDE 에이전트 등 어떤 MCP 클라이언트와 기존 앱에도 동일하게 재사용
- 완전 셀프호스팅: Ollama 기반 로컬 임베딩으로 구성하면 외부 API 호출 없는 폐쇄망 운영이 가능
RAG Platform의 설치 방법과 전체 API·설정 레퍼런스는 📖기술 문서에서 확인할 수 있습니다.

아키텍처 구성
RAG Platform은 서비스 요청을 처리하는 Application Layer, 데이터를 저장하는 Data Layer, 그리고 이 둘을 연결해 인덱싱을 실행하는 Pipeline Layer, 세 개의 레이어로 구성됩니다.

- 레이어 간 느슨한 결합: Application Layer는 Data Layer를 직접 조작하지 않고 Pipeline Layer(Dagster)를 거쳐 인덱싱을 수행합니다. 대량 문서가 몰려도 인제스트 부하가 검색 API의 응답성에 영향을 주지 않습니다.
- 큐 기반 비동기 처리로 장애 격리: 문서 하나하나가 Redis 큐 이벤트 단위로 독립 처리되기 때문에, 특정 문서의 파싱·임베딩 실패가 다른 문서로 번지지 않고 개별 재시도·재인덱싱으로 복구됩니다.
- 조회 패턴별 저장소 분리: 벡터 검색(Qdrant), 정확 일치 조회(PostgreSQL), 큐(Redis), 원본 보관(MinIO)을 하나로 합치지 않고 나눠서, 각 컴포넌트를 독립적으로 스케일링하거나 교체할 수 있습니다.
- Core/Enterprise 동일 아키텍처 공유: rag-api와 rag-ent-api는 이 구조를 그대로 쓰며 인증·권한 레이어 유무만 다릅니다 — 배포 모드를 바꿔도 아키텍처를 다시 설계할 필요가 없습니다.
- 임베딩 공급자 선택 가능: Embedding Server는 Ollama(로컬)와 OpenAI 중 선택할 수 있습니다. Ollama로 구성하면 Data Layer 전체가 외부 API 호출 없이 폐쇄망에서 동작하고, OpenAI를 선택하면 별도 GPU 없이 바로 운영할 수 있습니다.
제품 구성 — Core와 Enterprise
RAG Platform은 상시 실행되는 관리 콘솔(rag-admin)과, 배포 모드에 따라 둘 중 하나만 실행되는 API 서버(rag-api 또는 rag-ent-api)로 구성됩니다. 같은 아키텍처에서 이미지와 설정만 다르기 때문에, Core로 시작해 인증과 권한이 필요해지면 Enterprise로 전환할 수 있습니다.
| 항목 | Core (rag-api) | Enterprise (rag-ent-api) |
|---|---|---|
| API 구성 | 인제스트 파이프라인, 하이브리드 검색, 커넥터, MCP 서버 | Core 위에 인증·권한 레이어 추가 |
| 인증 | 없음 | OIDC(Keycloak) Bearer JWT |
| KB 접근 제어 | 없음 | KB 단위 RBAC(viewer/editor/admin/owner) |
| 인제스트 확장 | — | 이미지 캡셔닝·OCR 폴백·표 구조 보존 파싱(opt-in) |
| 소스 공개 | 오픈소스(MIT), 이미지·소스 공개 | 이미지·소스 모두 비공개 |
관리 콘솔(rag-admin)은 컨테이너 이미지만 공개되며, 두 배포 모드 모두 같은 빌드를 그대로 사용합니다 — OIDC 설정값이 있으면 SSO 로그인이 자동으로 활성화됩니다.
문서 수집과 인덱싱
문서를 검색 가능한 상태로 만드는 첫 단계는 수집입니다. 파일을 직접 업로드하거나, 웹·Confluence·GitHub 커넥터로 사내 문서를 자동 수집할 수 있습니다. 커넥터는 버전 지표(ETag, git blob SHA 등)가 같으면 재처리를 생략해 변경분만 재인덱싱합니다.
- 파일 업로드: PDF·Word·한글(HWP)·마크다운 등 지원, 단일/배치 업로드
- 커넥터: 웹 크롤러(탐색 깊이·URL 패턴 설정), Confluence(스페이스·레이블 기반), GitHub(브랜치·경로 접두사)
- 자동 재인덱싱: 스케줄(cron) 동기화, 수동 트리거, 실패 시 원인 메시지 보존
- 중복 문서 자동 감지: 해시(SHA-256/SimHash) 완전·근사 중복 + MinHash Jaccard 유사 중복 판정


하이브리드 검색
검색은 사용자의 질의를 Dense(의미)와 Sparse(키워드) 임베딩으로 변환한 뒤 RRF(Reciprocal Rank Fusion)로 결합하고, 리랭킹을 거쳐 문맥 기반 정확도를 높입니다. 여러 KB를 한 번에 검색해 단일 순위로 병합할 수 있고, 특정 KB에 장애가 발생해도 전체 검색에는 영향을 주지 않습니다.
- Dense+Sparse 하이브리드 검색, alpha 파라미터로 의미/키워드 가중치 조절
- 리랭킹 연동(API 장애 시 자동 폴백, 검색 자체는 항상 성공)
- 요청 단위로 top_k, min_score, rerank 여부 오버라이드
- 응답에 출처, 점수, 지연시간 등 메타데이터 포함

통합 인터페이스 — REST API와 MCP
RAG Platform은 챗봇이나 워크플로 빌더를 만들지 않습니다. 대신 검색 능력을 REST API와 MCP(streamable HTTP)로 동시에 노출해, 기존/신규 LLM 애플리케이션과 에이전트가 동일한 검색을 재사용할 수 있게 합니다.
- REST API: 전체 기능을 다루는 API, Swagger UI 대화형 문서 내장
- MCP 서버: Claude, IDE 에이전트 등 MCP 클라이언트가 검색/KB 목록 툴을 바로 호출(Enterprise는 인증 MCP로 KB 권한 필터까지 적용)
- CLI: 서버 기동, 문서 인제스트, 검색을 명령줄에서 직접 실행
MCP 서버를 통해 기존 LLM 애플리케이션과 별도의 연동 개발 없이 바로 연결됩니다. LibreChat이 MCP로 rag-api의 검색 툴을 직접 호출해 KB 문서에 근거한 답변을 생성하고, 그 호출이 Langfuse·Grafana로 실시간 관측되는 End-to-End 환경을 그대로 구성할 수 있습니다.

접근 제어
여러 부서·목적으로 KB를 나눠 운영할 때는 접근 범위를 KB 단위로 통제해야 합니다. Enterprise 배포는 Keycloak 기반 SSO와 KB 단위 RBAC로 이를 지원합니다.
- KB 단위 역할: viewer(조회)/editor(문서 작업)/admin(설정·멤버)/owner(삭제·이전) 4단계
- 공개 KB: 전사 공지·규정 문서처럼 모든 인증 사용자에게 개방 가능
- 멤버십 관리: 이메일 초대, 미가입 사용자는 첫 로그인 시 자동 활성화
- 소유권 자동 승계: owner 이탈 시 최고참 admin이 자동 승격, 승계 불가 시 KB 동결 후 관리자 복구

운영 지원
설치 이후 실제로 서비스를 운영하는 데 필요한 지원 기능도 함께 제공됩니다.
| 서비스 | 용도 |
|---|---|
헬스체크(/health, /ready) | k8s liveness/readiness 프로브 대응 |
| Dagster UI | 문서별 인덱싱 실행 이력, 실패 로그 확인 |
| Langfuse | 검색·MCP 호출 분산 트레이싱 |
| Docker Compose / Kubernetes | 두 환경 모두 배포 지원 |
Quick Start 기준 단일 호스트 docker compose로는 약 30분 안에 Core 모드를 띄워볼 수 있고, RAG API·관리 콘솔·Dagster UI·MinIO 콘솔이 각각 별도 포트로 열립니다. 설치 절차와 다음 단계는 문서에서 이어집니다.
핵심 차별점
오픈소스 기반 핵심 검색 인프라
검색·임베딩·인제스트의 핵심 기능이 오픈소스(rag-api, MIT)로 제공됩니다. 챗 UI나 워크플로 빌더를 내장하지 않는 대신, REST API와 MCP로 기존/신규 LLM 애플리케이션과 에이전트에 검색만 자연스럽게 붙여 쉽게 확장할 수 있습니다.
CPU 기반 안정 운영, GPU는 임베딩만 분리
API 서버와 인제스트 파이프라인은 CPU 환경에서도 안정적으로 운영되고, GPU가 필요한 Embedding Server만 별도 환경(Ollama)에 구성해 연결할 수 있습니다. 인프라를 무겁게 묶지 않고 필요한 부분만 확장할 수 있으며, 완전 폐쇄망 운영도 가능합니다.
대규모 데이터도 흔들림 없는 처리
Dagster 기반 큐·파이프라인이 문서 단위로 격리 처리되기 때문에, 대량 인제스트가 몰려도 특정 문서의 실패가 다른 처리에 전파되지 않고 안정적으로 처리됩니다.
Core/Enterprise 분리로 확장성 확보
인증·권한(SSO, KB 단위 RBAC)과 이미지 캡셔닝·OCR 같은 멀티모달 문서 처리는 Enterprise로 분리되어 있습니다. Core API는 가볍고 확장하기 쉬운 상태를 유지하면서, 필요한 조직만 Enterprise로 전환해 기능을 더할 수 있습니다.