이 문서를 통해 아래 질문들에 답할 수 있게 됩니다.
- RAG에서 권한 필터는 왜 모델이 아니라 서버 책임인가?
- 문서 삭제와 권한 변경은 index에 어떻게 반영해야 하는가?
- source id와 document version은 왜 중요한가?
개요
RAG에서 가장 위험한 실수는 권한 없는 문서나 삭제된 문서가 모델 context에 들어가는 것이다. 이 경우 모델이 답변하지 않더라도 이미 데이터가 외부 provider나 로그에 노출될 수 있다.
권한과 최신성은 RAG의 부가 기능이 아니라 핵심 설계다.
권한 필터
권한 필터는 retrieval 전에 적용한다.
- tenant id
- role
- document ACL
- project membership
- deleted flag
검색 후에도 source id를 기준으로 서버 DB에서 읽기 권한을 다시 확인할 수 있다. 특히 vector metadata와 실제 DB 권한이 동기화되지 않을 수 있는 환경에서는 이중 확인이 안전하다.
최신성
vector similarity는 최신성을 모른다. 오래된 문서가 질문과 더 비슷하면 상위에 올 수 있다.
최신성 관리:
- document version
- updated_at
- deprecated flag
- effective date
- source priority
답변에 source version을 남기면 CS와 개발자가 원인을 추적하기 쉽다.
코드로 이해하기
검색 결과를 source metadata와 함께 조립한다.
def format_sources(chunks):
lines = []
for chunk in chunks:
lines.append(
f"[source_id={chunk.source_id}, version={chunk.version}, updated_at={chunk.updated_at}]\n"
f"{chunk.text}"
)
return "\n\n".join(lines)source metadata는 모델용이면서 동시에 디버깅용이다.
문서 삭제와 권한 변경
문서 삭제:
- 원본 삭제 이벤트 발행
- vector delete job 생성
- source id 기준 chunk 삭제
- reconcile job으로 잔존 확인
권한 변경:
- metadata update 또는 재색인
- 검색 후 권한 재검증
- 권한 경계 eval 추가
장애 상황과 대응
증상:
- 퇴사자 문서가 검색된다.
- 삭제된 문서가 답변 source로 나온다.
- A팀 문서가 B팀 사용자에게 노출된다.
- 오래된 정책이 최신 정책보다 우선된다.
대응:
- source id로 index 상태를 확인한다.
- metadata와 DB 권한을 비교한다.
- 삭제 이벤트 처리 실패를 재처리한다.
- freshness ranking을 조정한다.
인프라 협업 포인트
권한과 최신성은 데이터 파이프라인과 연결된다. 인프라팀과 event delivery, retry, dead letter queue, index update lag, reconcile job을 논의한다.
실전 팁
- 권한 없는 chunk는 prompt에 넣지 않는다.
- source id와 version을 답변과 trace에 남긴다.
- 삭제 이벤트는 idempotent하게 처리한다.
- document version이 다른 chunk가 섞이지 않게 한다.
위험 신호!
- vector index가 원본 DB 권한 변경을 모른다.
- source id가 없어 삭제 추적이 어렵다.
- 오래된 문서를 deprecated 처리하지 않는다.
- 권한 필터 테스트가 없다.
확인 질문
확인 질문
- RAG 권한 필터를 모델에게 맡기면 안 되는 이유는 무엇인가?
- 권한 없는 데이터가 이미 모델 입력에 들어가 유출 위험이 생기기 때문이다.
- source id와 document version이 중요한 이유는 무엇인가?
- 답변 근거, 장애 분석, 삭제, 재색인, 최신성 관리를 연결하기 위해서다.
Spring AI 적용 연결
- Spring AI RAG에서도 권한 필터와 source metadata는 prompt가 아니라 retrieval 이전의 서버 경계에서 먼저 적용해야 한다. 구현 기준은 09. Embedding VectorStore RAG ETL 설계와 연결된다.
- source 품질과 답변 회귀를 함께 점검하는 방법은 10. Evaluation Testing Regression에서 이어진다.