10차시. 벡터저장소 이해
퀴즈 1 — 있으면 불러오고 없으면 만들기
인덱스 폴더가 있으면 불러오고 없으면 새로 만드세요.
빈칸 코드에서 시작합니다.
def get_store(folder, load, build):
pass결과 보기 (예시 풀이)
# 퀴즈 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만 호출한다.