RAG2026-5일10차시 · 벡터저장소 이해16 / 19← 이전목차다음 →MetaContents

10차시. 벡터저장소 이해

퀴즈 1 — 있으면 불러오고 없으면 만들기

인덱스 폴더가 있으면 불러오고 없으면 새로 만드세요.

빈칸 코드에서 시작합니다.

Python
def get_store(folder, load, build):
    pass
결과 보기 (예시 풀이)
Python
# 퀴즈 1. 인덱스 폴더가 있으면 불러오고, 없으면 새로 만들기
# indexer.py의 get_store를 FAISS 없이 흉내 냅니다. 불러오기·만들기는 가짜 함수로 바꿉니다.
import tempfile
from pathlib import Path

def get_store(folder, load, build):
    # 폴더가 이미 있으면 저장본을 불러옵니다. 임베딩 비용이 들지 않습니다.
    if folder.exists():
        return load(folder)
    # 없을 때만 새로 만듭니다. 실제로는 여기서 임베딩 비용이 납니다.
    store = build()
    return store

def fake_load(folder):
    print("  → 저장된 인덱스를 불러옵니다 (비용 0)")
    return "불러온 인덱스"

def fake_build():
    print("  → 인덱스를 새로 만듭니다 (임베딩 비용 발생)")
    # 실제 코드라면 여기서 save_local로 폴더를 만듭니다. 흉내만 냅니다.
    INDEX.mkdir()
    return "새 인덱스"

# 임시 폴더 안에서만 실험하므로 내 컴퓨터의 다른 파일은 건드리지 않습니다.
with tempfile.TemporaryDirectory() as tmp:
    INDEX = Path(tmp) / "faiss_index"

    # 확인 1: 처음 실행 → 폴더가 없으니 build만 호출
    print("첫 실행:", get_store(INDEX, fake_load, fake_build))

    # 확인 2: 두 번째 실행 → 폴더가 생겼으니 load만 호출
    print("두 번째 실행:", get_store(INDEX, fake_load, fake_build))

실행 결과

출력
  → 인덱스를 새로 만듭니다 (임베딩 비용 발생)
첫 실행: 새 인덱스
  → 저장된 인덱스를 불러옵니다 (비용 0)
두 번째 실행: 불러온 인덱스

채점 기준: exists()가 True면 load만 호출한다.

관련 교안: 10차시 「4. 실습 ② — 불러와서 재사용하기」 › 4-1) 있으면 불러오고 없으면 만들기

← 이전 절10차시 · 실습 1 — 벡터저장소 이해 실습 따라 하기다음 절 →10차시 · 퀴즈 2 — 거리 점수를 기준과 바르게 비교하기