

왜 Gemini File Search 기반 RAG가 훨씬 쉬운가
1) 일반적인(수동) RAG 파이프라인
일반적인 RAG는 보통 이런 구성입니다.
- 문서 수집 · 정규화 (PDF → 텍스트 추출)
- 청킹 로직 설계 (문단/조문 기준 분할, 길이/오버랩 튜닝)
- 임베딩 모델 선택 및 임베딩 생성
- 벡터 DB 설치/운영 (Postgres+pgvector, Pinecone, Weaviate, ES 등)
- 검색 쿼리 작성 (kNN, 필터, 랭킹 등)
- 검색 결과를 모델 프롬프트에 주입하는 래퍼 코드 작성
- 추후 문서 추가/수정/삭제 시 인덱스 동기화, 재임베딩 등 관리
특히 국가 법령·내부 규정 같이 계속 개정·갱신되는 문서는 “버전 관리 + 인덱스 재생성 + 운영 서버 안전성”까지 고민해야 해서 보안팀 입장에선 운영 리스크가 커집니다.
2) Gemini File Search가 하는 일
Gemini File Search는 이 파이프라인을 한 번에 통으로 관리합니다. (Google AI for Developers)
- 파일 업로드 → 자동 청킹·임베딩·인덱싱
- 검색 로직 → Google 인프라의 시맨틱 검색
- 모델 호출 시 → File Search tool을 통해 자동으로 관련 청크를 프롬프트에 주입
- 과금 구조 → 저장소·쿼리 임베딩은 무료, 초기 인덱싱 토큰당 비용만 부담
결과적으로, 개발자는
“파일 업로드 + File Search tool 설정 + generateContent 호출”
정도만 구현하면, 꽤 제대로 된 RAG 서비스가 바로 돌아갑니다.
전체 아키텍처 (보안 법규 RAG 관점)

텍스트로 다시 그려보면
[법령/가이드 문서 저장소]
└ 국회/법제처 PDF, 사내 보안정책, 컴플라이언스 가이드 등
↓ (정기 수집/다운로드 + 검수 후)
[Gemini File Search Store]
└ 자동 청킹/임베딩/인덱싱
└ '법령명, 조문번호, 개정일, 담당부서' 등의 메타데이터 저장
↓
[Gemini 모델 (예: gemini-2.5-flash)]
└ File Search tool 활성화
└ 사용자의 질문 + 관련 청크를 기반으로 답변 생성
└ 인용/출처(조문) 포함 응답
↓
[사내 포털 · 슬랙 봇 · 내부 FAQ 챗봇]
└ "개인정보 파기 기준?" 같은 질문 입력
└ 법령 근거 + 실무 가이드 형식으로 결과 제공
RAG의 복잡한 부분(벡터DB, 청킹, 검색 로직)은 전부 File Search로 위임하고,
보안팀은 “어떤 문서를 어떤 메타데이터로 넣고, 어떻게 질문하게 할지”만 설계하면 됩니다.
핵심 개념 간단 정리
공식 문서 기준 용어를 정리하면 (Google AI for Developers)
- FileSearchStore
- 여러 문서를 묶는 “스토어”
- 예:
fileSearchStores/security-laws-kr
- Document
- 스토어에 업로드된 개별 파일
- 예:
개인정보보호법_2024_전문.pdf
- Chunk
- 자동으로 쪼개진 검색 단위 텍스트
- File Search가 알아서 관리
단계별 구축 가이드 (Python + 공식 SDK 기준)
1. SDK & 인증 준비
pip install google-genai
환경 변수 또는 설정에 API 키 설정
export GEMINI_API_KEY="YOUR_API_KEY"
Python 기본 클라이언트
from google import genai
from google.genai import types
client = genai.Client(api_key="YOUR_API_KEY")
2. 보안 법규용 File Search Store 생성
공식 예제 구조를 그대로 가져오면 (Google AI for Developers)
# 보안 법규/내부 정책 전용 스토어
file_search_store = client.file_search_stores.create(
config={
"display_name": "kr-security-laws-and-policies"
}
)
STORE_NAME = file_search_store.name # 예: "fileSearchStores/kr-security-laws-001"
print(STORE_NAME)
▶ 권장 설계
- “법규 + 내부 규정”을 한 스토어에 넣고, 메타데이터로 구분
(예:type=LAW,type=INTERNAL_POLICY) - 혹은, “법령 스토어 / 내부 정책 스토어”를 분리해서 2개 생성
(법무팀/보안팀 운영 구조에 따라 선택)
3. 문서 업로드 + 인덱싱 (upload_to_file_search_store)
공식 예시 + 보안 법규 메타데이터를 혼합한 형태입니다.
import time
from pathlib import Path
def upload_security_law(file_path: str, law_name: str, law_type: str,
authority: str, scope: str, effective_date: str):
"""
보안 관련 법규/가이드 문서를 File Search에 업로드
- law_type: '법령', '가이드라인', '고시', '내부정책' 등
- scope: '전업종', '정보통신서비스', '금융업', '클라우드서비스' 등
"""
p = Path(file_path)
operation = client.file_search_stores.upload_to_file_search_store(
file=str(p),
file_search_store_name=STORE_NAME,
config={
"display_name": law_name,
"custom_metadata": [
{"key": "law_name", "string_value": law_name},
{"key": "law_type", "string_value": law_type},
{"key": "authority", "string_value": authority},
{"key": "scope", "string_value": scope},
{"key": "effective_date", "string_value": effective_date},
],
# chunkingConfig는 옵션 – 기본값도 충분히 쓸 만함
"chunking_config": {
"chunk_size": 1000,
"chunk_overlap": 200,
},
},
)
# 인덱싱 완료까지 대기
while not operation.done:
time.sleep(5)
operation = client.operations.get(operation)
print(f"✅ 업로드 완료: {law_name} ({file_path})")
return operation
# 예시: 대표 법령 업로드
upload_security_law(
file_path="laws/개인정보보호법_전문_2024.pdf",
law_name="개인정보보호법",
law_type="법령",
authority="개인정보보호위원회",
scope="전업종",
effective_date="2024-03-15",
)
upload_security_law(
file_path="laws/정보통신망법_전문_2023.pdf",
law_name="정보통신망법",
law_type="법령",
authority="과학기술정보통신부",
scope="정보통신서비스",
effective_date="2023-10-01",
)
upload_security_law(
file_path="laws/신용정보법_전문_2024.pdf",
law_name="신용정보법",
law_type="법령",
authority="금융위원회",
scope="금융업",
effective_date="2024-01-01",
)
보안 관점 포인트
업로드 대상 문서는 법제처/공식 출처에서 받은 원문만 사용
- 내부 정책/가이드는 문서 관리 프로세스(버전/승인 이력)와 연계
- 메타데이터에 “
version,approved_by,valid_from,valid_to” 등을 반드시 포함해,
나중에 “옛날 규정에 근거한 답변”을 걸러낼 수 있게 설계
4. 모델에서 File Search tool 사용하기 (질의응답)
공식 문서의 예시는 아래와 같이, tools 설정에 file_search_store_names만 넣으면 바로 RAG가 됩니다.
def ask_with_file_search(question: str):
response = client.models.generate_content(
model="gemini-2.5-flash",
contents=question,
config=types.GenerateContentConfig(
tools=[
types.Tool(
file_search=types.Tool.FileSearch(
file_search_store_names=[STORE_NAME]
)
)
],
# 필요시 temperature, top_p 등도 조정 가능
),
)
return response
resp = ask_with_file_search("전자상거래 사업자가 고객 개인정보를 수집할 때 필수적으로 고지해야 하는 항목은?")
print(resp.text)
이렇게 호출하면
- Gemini가 질문을 보고 File Search 스토어에서 관련 청크를 찾고
- 조문 내용 + 주변 문맥을 내부 프롬프트에 주입한 후
- 한국어로 정리된 답변을 반환합니다.
“보안 법규 RAG 시스템”을 하나의 클래스로 묶어보기
1. RAG 래퍼 클래스
class SecurityLawRAG:
def __init__(self, client: genai.Client, store_name: str):
self.client = client
self.store_name = store_name
def answer(self, question: str, business_type: str | None = None) -> str:
"""
- question: 사용자의 질문(자연어)
- business_type: '금융업', '정보통신서비스', '클라우드', '전업종' 등
"""
# 업종 정보는 프롬프트에 녹여서 '상황 정보'로 제공
context_prefix = ""
if business_type:
context_prefix = (
f"[업종: {business_type}] 기준으로 답변해 주세요.\n"
"해당 업종에 특화된 법령과 가이드라인을 우선적으로 고려해 주세요.\n\n"
)
prompt = f"""
당신은 한국의 보안/개인정보보호 법규 전문가입니다.
- 근거가 되는 법령명과 조문 번호를 반드시 명시하세요.
- 가능한 경우 '조문 원문 일부'를 인용해 주세요.
- 실무 담당자가 바로 적용할 수 있도록
"조치 체크리스트" 형태로 정리해 주세요.
- 법무 검토가 필요한 부분은 '법무팀 검토 필요'라고 표시하세요.
{context_prefix}
질문: {question}
"""
resp = self.client.models.generate_content(
model="gemini-2.5-flash",
contents=prompt,
config=types.GenerateContentConfig(
tools=[
types.Tool(
file_search=types.Tool.FileSearch(
file_search_store_names=[self.store_name]
)
)
],
),
)
return resp.text
2. 실제 질의 예시
rag = SecurityLawRAG(client, STORE_NAME)
q1 = "쇼핑몰에서 회원 가입 시 개인정보 수집 동의서에 반드시 포함해야 할 항목은 무엇인가요?"
print(rag.answer(q1, business_type="전업종"))
q2 = "클라우드 서비스 제공자가 고객 데이터를 해외 리전에 저장할 때 필요한 법적 요건과 고객 고지사항을 알려주세요."
print(rag.answer(q2, business_type="클라우드"))
q3 = "인터넷 은행에서 신용정보를 제3자에게 제공할 때 필요한 동의 및 보안조치를 정리해 주세요."
print(rag.answer(q3, business_type="금융업"))
이렇게 하면, 답변에는 보통 아래와 같은 내용이 포함되도록 유도할 수 있습니다.
- 근거 법령: 개인정보보호법 ○조, 신용정보법 ○조, 정보통신망법 ○조 등
- 실무 체크리스트
- 동의서 필수 항목 (수집 목적, 항목, 보유 기간, 거부 권리 등)
- 해외 이전 시 추가 고지 사항
- 제3자 제공 시 계약·기술적 보호조치 요구사항
- 내부 가이드
- “웹/앱 화면에 어디까지 표시해야 하는지”
- “DB/로그에 어떻게 남겨야 하는지” 등
고급 기능: 메타데이터 설계 & 필터링 전략 (개념)
현 시점에서 File Search는 문서 업로드 시 customMetadata 저장을 지원하고, 검색 쪽에서는 메타데이터 기반 필터링/랭킹 기능을 제공하는 것으로 소개되고 있습니다. (websearchapi.ai)
법규/정책 RAG에서 특히 유용한 메타데이터 설계는
law_name: “개인정보보호법”, “정보통신망법” 등law_type: “법령/시행령/시행규칙/고시/가이드라인/내부정책”scope: “전업종/정보통신서비스/금융업/클라우드서비스/공공기관”effective_date: 발효일/개정일status: “시행중/폐지/개정예정”owner_team: “법무팀/정보보호팀/준법감시인” 등
이를 활용하면,
- “폐지된 법령은 검색에서 제외”
- “클라우드 관련 질문에는 scope=클라우드서비스인 문서 우선”
- “사내 내부 정책만 보고 싶을 때 type=INTERNAL_POLICY 필터”
같은 고급 검색 정책을 적용할 수 있습니다.
(메타데이터 쿼리 스키마는 추후 공식 문서 업데이트에 맞춰 구현하면 됩니다.)
보안·거버넌스 관점 설계 포인트
File Search 자체는 Google 인프라 위에서 돌아가므로,
인프라 보안은 상당 부분 Google이 담당하지만, 조직 내부 거버넌스는 여전히 보안팀 책임입니다.
1. 데이터 수명주기 관리
- 업로드 절차 표준화
- “법제처 원문 → 파일 무결성 확인 → 버전명 규칙 → 스토어 업로드” 절차 문서화
- 내부 정책은 “승인된 PDF만 업로드” 원칙 유지
- 변경/폐지 법령 반영
- 정기적으로 (예: 월 1회) 법령 변동 사항 점검
- File Search Store 내 문서 삭제/교체 API를 통한 최신화
- 로그·감사
- “어떤 문서가 언제 어떤 버전으로 교체되었는지”를 별도 시스템(예: Git, DB)에서 관리
2. 접근 통제 & 인증
- API 키 최소 권한
- File Search 용 서비스 계정/키를 별도 생성, 다른 서비스와 분리
- 가능하다면 서버 측에서만 사용하고, 프론트엔드에 키를 직접 노출하지 않음
- 사용자별 권한 차등
- 일반 직원: “법령 + 사내 공개 규정” 검색 권한
- 법무/보안팀: “내부 비공개 가이드/리스크 평가 문서”까지 포함된 별도 스토어 접근
- 감사 로깅
- “누가 언제 어떤 질문을 했고, 어떤 문서를 참조했는지”를
자체 로그/시스템에서 기록해 내부 감사에 활용
- “누가 언제 어떤 질문을 했고, 어떤 문서를 참조했는지”를
3. 응답 품질 및 법적 리스크 관리
- 법적 책임 한계 고지
- UI 상단/하단에
- “본 시스템은 참고용이며, 법적 효력 및 책임은 없습니다.
최종 판단은 반드시 법무팀과 상의하시기 바랍니다.” - 같은 문구를 항상 표시
- “본 시스템은 참고용이며, 법적 효력 및 책임은 없습니다.
- UI 상단/하단에
- 고위험 질문에 대한 세이프가드
- 예: “이 경우 손해배상 책임이 있나요?”, “고소 가능한가요?”
- 이런 질문은 법무팀 상담 안내 + 일반적인 법규 설명까지만 제공하도록 프롬프트 설계
- 법무팀 리뷰 프로세스
- 초기에는 실제 Q&A 로그를 법무/보안팀이 샘플링하여
- “잘못된 해석/과도한 일반화” 케이스를 찾아 프롬프트/데이터/메타데이터를 보정
- 초기에는 실제 Q&A 로그를 법무/보안팀이 샘플링하여
내부 사용자용 “보안 RAG 사용 가이드” 샘플
1. 이렇게 질문하면 좋습니다 (예시)
- 업무 시나리오 기반 질문
“쇼핑몰을 운영하는 회사에서, 신규 회원가입 화면에 표시해야 할 개인정보 수집·이용 동의 항목과 필수 고지사항을 정리해 주세요.”
- 법령 기준 + 실무 가이드 요청
“클라우드 서비스 사업자가 고객 데이터를 해외 리전에 저장할 때,
개인정보보호법과 관련 가이드라인 상 요구되는 고지/동의/보안조치를
체크리스트 형식으로 알려주세요.”
- 내부 정책과 결합된 질문
“우리 회사 내부 보안정책(정보보호 기본정책)과 개인정보보호법을 동시에 고려했을 때,
고객 DB 백업본 보존 기간과 파기 기준을 제안해 주세요.
정책 이름과 법령 조문을 함께 적어 주세요.”
2. 사용자에게 알려줄 보안상 주의사항
- 법률·판례 해석은 참고용
- “AI 답변만 믿고 법적 의사결정을 하지 말 것”
- 규제기관 대응, 대규모 계약 조건 등은 반드시 법무팀과 협의
- 민감한 내부 정보 최소 입력
- 고객 개인식별정보, 내부 사건 상세내용 등은
꼭 필요하지 않으면 질문에 포함하지 않도록 교육
- 고객 개인식별정보, 내부 사건 상세내용 등은
- 로그 활용 동의
- 문의 내용은 시스템 고도화 및 보안 감사 목적으로 저장될 수 있음을 고지
정리
- File Search Stores & Documents를 활용하면 벡터DB/임베딩/청킹/검색 로직을 전부 Google 인프라에 맡기고, 문서 관리 + 프롬프트 설계 + 보안/거버넌스에 집중할 수 있습니다.
- 보안 법규/내부 정책 문서를 File Search Store에 업로드하고, 메타데이터로 법령명, 조문, 업종, 시행일, 버전 등을 구조화하면 업종/서비스 유형별 컴플라이언스 Q&A가 매우 자연스럽게 구현됩니다.
- 보안 관점에서는
- 데이터 수명주기,
- 접근 권한,
- 로그/감사,
- 고위험 응답에 대한 세이프가드,
- 리뷰 프로세스
를 함께 설계해야 실제로 “안전한 법규 RAG”가 됩니다.
댓글