15.9.1. 사례 1: RAG 데이터 소스 변경 후 방치된 오라클로 인한 대규모 오탐지 발생

15.9.1. 사례 1: RAG 데이터 소스 변경 후 방치된 오라클로 인한 대규모 오탐지 발생

검색 증강 생성(Retrieval-Augmented Generation, RAG) 시스템에서 지식의 원천(Data Source)은 실시간으로 요동친다. 반면, 과거의 지식에 머물러 있는 고정된 정답지(Golden Dataset)는 그 자체로 가장 위험한 오라클 부채(Oracle Debt)가 된다. 외부 세계의 진실이 바뀌었음에도, 채점표가 업데이트되지 않아 올바르게 대답한 AI를 오히려 ’오답’으로 처벌하는 이 기괴한 현상은 RAG 기반의 엔터프라이즈 환경에서 가장 빈번하게 발생하는 참사다.

본 사례는 지식의 생명주기(Knowledge Lifecycle)와 오라클의 생명주기가 결합하지 않았을 때 발생하는 전형적인 동기화 실패(Synchronization Failure)에 대해 다룬다.

1. 상황 (Situation)

한 대형 금융사는 고객 배당금 안내를 위한 사내 RAG 챗봇을 운용하고 있었다. 기존 배당률은 3.5%였으므로, 회귀 테스트 스위트의 골든 데이터셋에는 Question: 올해 기본 배당률은 얼마인가요?, Expected_Answer: 3.5% 라는 1,000여 개의 Q&A 쌍이 하드코딩되어 평가 오라클로 작동 중이었다.

그러던 중, 이사회의 결의에 따라 배당률이 4.0%로 전격 인상되었고, 인프라 팀은 발 빠르게 벡터 데이터베이스(Vector DB)의 기존 PDF 문서를 새로운 규정집 문서로 파싱하여 덮어썼다(Embed & Upsert).

2. 오라클 부채의 폭발 (Cause)

파이프라인이 구동되자, LLM은 새롭게 주입된 문서를 충실히 검색(Retrieve)하여 “올해 기본 배당률은 4.0%로 인상되었습니다“라고 완벽하게 대답했다. 그러나 CI(Continuous Integration) 서버는 빌드를 즉각 중단시키고 경보(Alert)를 울렸다.

  • 원인: 벡터 DB의 지식은 갱신되었으나, 텍스트 일치 기반(Exact Match)으로 작성된 오라클 코드 assert response.contains("3.5%")가 방치되어 있었기 때문이다. 오라클의 ’정답’은 여전히 과거의 세계관인 3.5%에 머물러 있었고, 진실을 말한 AI를 100% 확률로 징벌(Fail)하는 가짜 실패(False Negative) 폭풍을 일으켰다.

3. 파괴적 결과 (Impact)

수천 개의 테스트가 일제히 깨지는 ‘바다 끓이기(Boiling the Ocean)’ 현상이 발생했다.
QA 팀은 신규 피처 테스트를 전면 중단하고, 1,000개가 넘는 하드코딩된 정답지(JSON 파일) 안에서 “3.5%“라는 문자열을 찾아 일일이 “4.0%“로 수정하는 단순 반복 수작업(Toil)에 2주를 매달렸으며, 이 기간 동안 새로운 배당률을 탑재한 앱의 배포(Deployment)는 치명적으로 지연되었다. RAG 시스템에서 지식 베이스와 오라클의 ’단절’이 마이크로서비스 파이프라인 전체의 목을 조른 전형적인 사례다.

4. 극복 과정: 지식 소스 기반 오라클 연동 (Resolution)

이 치명적인 병목을 뚫기 위해, 조직은 정적인 정답지를 버리고 동적 지식 연동 오라클(Dynamic Knowledge-Linked Oracle) 아키텍처로 테스트 파이프라인을 재설계했다.

graph TD
    subgraph RAG Pipeline
        A[User Query: 배당률은?] --> B[(Vector DB <br/> 4.0% 최신 문서)]
        B -->|Retrieve Chunk| C{LLM}
        C --> D[Answer: 4.0% 입니다]
    end

    subgraph Dynamic Oracle System
        E[Test Config] -.->|문서 ID 바인딩| B
        B -->|오라클 평가 시 함께 주입| F{LLM-as-a-Judge <br/> 평가 전용 LLM}
        D --> F
        
        F -->|Rule: 원본 문서의 숫자를 대조해라| G[Pass 판정]
    end
    
    style B fill:#e6ffe6,stroke:#2ca02c
    style F fill:#f3e5f5,stroke:#9c27b0
  1. 하드코딩 폐기: 골든 데이터셋에서 하드코딩된 “3.5%“라는 Expected_Answer 컬럼을 완전히 삭제했다.
  2. 참조 문서 기반 평가 (Context-based Evaluation): LLM-as-a-Judge에게 정답을 주입하는 대신, 원본이 되는 ‘최신 문서 청크(Chunk)’ 자체를 오라클에게 쥐여주었다. 프롬프트를 “주어진 문맥(Context) 문서를 읽어보고, 봇의 응답(Answer)이 문서의 수치 지표와 모순되지 않는지 채점하라“로 변경했다.

이제 이사회가 배당률을 5.0% 혹은 10.0%로 아무리 수정하여 벡터 DB를 엎더라도, 오라클의 코드를 단 한 줄도 수정할 필요가 없다. 오라클은 항상 최신 벡터 DB의 지식을 실시간으로 참조하여 채점하기 때문이다. 지식의 원천과 오라클의 기준선을 단일 진실 공급원(Single Source of Truth)으로 일치시킨 우아한 통합 사례다.