"RAG 핵심 학습 (25/26) — 권한·보안·재색인 운영"

RAG 운영의 실패는 종종 성능 문제가 아니라 권한 문제다. 잘 찾는 것보다 먼저, 보여도 되는 것만 찾아야 한다.

지금까지 시리즈는 retrieval 품질을 중심으로 왔다. 그러나 실제 운영에서는 정확도 못지않게 권한, 출처, 버전, 재색인, 감사 로그가 중요하다. RAG는 문서를 외부로 드러내는 시스템이므로, 보안과 운영을 부가 기능으로 미루면 안 된다.


0. Prerequisites

  • 7편 메타데이터 설계
  • 19편 query routing
  • 23편 graph / 24편 agentic RAG의 운영 복잡도

1. 학습 목표

  1. RAG 운영에서 왜 권한이 검색 전에 적용돼야 하는지 설명한다.
  2. RBAC, ABAC, row-level filtering의 차이를 안다.
  3. 재색인과 버전 관리가 왜 중요한지 이해한다.
  4. 감사 로그와 출처 관리의 역할을 안다.

2. 핵심 요약

RAG 운영의 핵심은 filter-first security다. 즉 검색 후 잘라내는 것이 아니라, 검색 전에 권한으로 검색 공간을 줄여야 한다. RBAC는 역할 기반, ABAC는 속성 기반 권한 모델이고, 실무에서는 metadata filter로 이 규칙을 retrieval 단계에 적용한다. 또한 문서가 바뀌면 재색인과 버전 관리를 해야 stale context 문제를 줄일 수 있다. 정확한 답변과 안전한 답변은 별개의 목표가 아니라 같은 파이프라인 안에 있어야 한다.


3. 직관 — 검색 후 필터링이 위험한 이유

사용자가 권한 없는 문서를 검색 후보 top-5에 이미 올려놨다면, 그 순간 로그와 중간 trace, reranker 입력에 민감 정보가 남을 수 있다. 그래서 권한은 생성 직전이 아니라 retrieval 직전에 적용해야 한다.


4. 정의 — 운영과 보안의 핵심 용어

용어 정의
RBAC 역할 기반 접근 제어
ABAC 속성 기반 접근 제어
Row-level Security 문서/청크 단위까지 세밀하게 권한 적용
Re-indexing 문서 변경 후 임베딩/인덱스 갱신
Versioning 어느 버전 문서가 사용됐는지 추적
Audit Log 누가 무엇을 검색하고 어떤 근거를 봤는지 기록

5. 구조 — 보안은 retrieval 파이프라인 안에 들어와야 한다

기본 순서:

  1. 사용자/세션 권한 확인
  2. 허용 collection과 namespace 결정
  3. metadata filter 적용
  4. retrieval / rerank / generation
  5. audit log 저장

즉 security는 후처리가 아니라 검색 공간 설계 그 자체다.


6. 원리 워크스루 — security filter와 version control

6.1 권한 필터

filters = {
    "security_level": {"$in": user.allowed_levels},
    "department": {"$in": user.allowed_departments},
    "version_status": "active",
}
hits = vector_store.search(query, filter=filters, k=10)

6.2 재색인 전략

if document.updated_at > index.last_built_at:
    enqueue_reindex(document.id)

6.3 audit log

log_event({
    "user_id": user.id,
    "query": query,
    "retrieved_doc_ids": [doc.id for doc in hits],
    "version": current_index_version,
})

자기 설명: 검색 후 필터링보다 검색 전 필터링이 안전한 이유를 한 문장으로 써 보라.


7. 변형과 사례

7.1 RBAC 기반 운영

부서장, 일반 직원, 외부 파트너처럼 역할이 명확할 때 단순하고 관리가 쉽다.

7.2 ABAC 기반 운영

문서 등급, 프로젝트 코드, 국가, 계약 상태 같은 속성이 복합적으로 얽힌 조직에서 유용하다.

7.3 Version-aware Retrieval

최신 문서만 기본으로 보되, 사용자가 과거 버전을 요청할 때만 version filter를 바꾸는 방식이 흔하다.


8. 한계와 실패 양상

8.1 권한 모델이 문서 메타데이터와 불일치할 수 있다

문서에 security tag가 빠져 있거나 틀리면 권한 필터도 무력해진다.

8.2 재색인 지연이 stale context를 만든다

문서가 갱신됐는데 인덱스가 늦게 따라오면 오래된 근거를 답할 수 있다.

8.3 감사 로그 없이 사고 분석이 어렵다

누가 어떤 문서를 근거로 보았는지 남지 않으면 보안 사고 대응이 어렵다.

8.4 다음 단계 — 이제 전체 학습 흐름을 묶는 캡스톤으로 간다

마지막 26편에서는 지금까지의 요소를 묶어 개인 문서 기반 RAG 캡스톤과 학습 로드맵으로 정리한다.


8.5 입문자가 자주 빠지는 함정 5선

# 함정 증상 빠른 점검
1 post-filter 보안 민감 문서 노출 위험 filter-first 구조 확인
2 stale index 방치 옛 문서 답변 re-index queue 모니터링
3 metadata 태그 품질 무시 권한 필터 오작동 태그 검수 프로세스
4 audit log 없음 사고 원인 추적 불가 검색/답변 이벤트 기록
5 active/archived 구분 없음 폐기 문서 회수 version status 필드 강제

9. 정리된 결론 — 보지 않고 답해 보라

Q1. RAG 보안에서 가장 중요한 원칙은?

정답 검색 전에 권한 필터를 적용하는 것이다.
검색 후 필터링은 이미 민감 문서가 파이프라인에 들어온 뒤일 수 있기 때문이다.

Q2. 재색인이 중요한 이유는?

정답 문서 변경 후 오래된 임베딩과 인덱스를 방치하면 stale context가 생기기 때문이다.
답변은 최신 문서가 아니라 오래된 문서를 근거로 할 수 있기 때문이다.

Q3. audit log가 필요한 이유는?

정답 누가 어떤 질문으로 어떤 문서를 근거로 봤는지 추적하기 위해서다.
보안 사고와 품질 이슈 모두 사후 분석이 필요하기 때문이다.


Cheat Sheet — 이 편의 식·정의 1페이지

정의 - RBAC: 역할 기반 권한 - ABAC: 속성 기반 권한 - Re-indexing: 문서 변경 후 인덱스 갱신

최소 코드

hits = vector_store.search(query, filter=security_filters, k=10)

언제 무엇을 | 상황 | 선택 | |---|---| | 단순 조직 구조 | RBAC | | 복합 조건 권한 | ABAC | | 최신성 중요 | active version filter |


참고 자료

보조 자료

  • 사용자 노트 22장 보안 / 운영

다음 편으로 이어지는 흐름

보안과 운영까지 갖췄다면 이제 시리즈를 하나의 작업으로 묶을 차례다. 마지막 26편에서는 개인 문서 기반 RAG 캡스톤과 이후 학습 로드맵을 정리한다.

댓글

이 블로그의 인기 게시물

"LLM 핵심 학습 (1/6) — 기본: 토큰화·임베딩·어텐션·위치 인코딩"

"LLM 핵심 학습 (2/6) — 파인튜닝: LoRA·QLoRA·증류·Adapter"

"ML 기초 학습 (1/9) — 머신러닝과 sklearn: 학습의 좌표계"