이 문서를 통해 아래 질문들에 답할 수 있게 됩니다.
- embedding은 무엇이고 어떤 문제를 해결하는가?
- embedding model version을 왜 metadata로 관리해야 하는가?
- 모델 변경 시 기존 vector index는 어떻게 다뤄야 하는가?
개요
Embedding은 텍스트를 숫자 벡터로 변환해 의미적 유사도를 계산할 수 있게 하는 방식이다. OpenAI Embeddings 문서, vector DB 공식 문서, RAG framework 문서에서 모두 핵심 기반으로 다룬다.
백엔드 개발자에게 embedding은 단순 API 호출이 아니라 검색 인프라를 만드는 파이프라인이다.
왜 백엔드 개발자에게 중요한가
Embedding은 RAG, 의미 검색, 문서 추천, 중복 탐지에 쓰인다. 이 기능들은 대부분 사용자 권한과 데이터 lifecycle에 연결된다.
예를 들어 사내 문서 검색에서 embedding은 다음과 연결된다.
- 문서 id
- chunk id
- tenant id
- 권한 scope
- 문서 버전
- embedding model version
- 삭제 상태
이 정보를 함께 관리하지 않으면 검색 결과를 운영할 수 없다.
핵심 원리
Embedding 모델은 입력 텍스트를 벡터로 바꾼다. query도 같은 모델로 embedding하고, 문서 chunk embedding과 유사도를 비교한다.
중요한 원칙:
- 같은 embedding 모델의 벡터끼리 비교한다.
- vector만 저장하지 말고 source metadata를 저장한다.
- 모델 변경은 검색 품질 변경이다.
- vector는 원본 데이터의 파생물이므로 재생성 가능해야 한다.
코드로 이해하기
색인 record에는 model version을 포함한다.
from dataclasses import dataclass
@dataclass(frozen=True)
class VectorRecord:
chunk_id: str
source_id: str
embedding_model: str
vector: list[float]
tenant_id: str
document_version: int
deleted: bool = False이 정보가 있어야 모델 변경, 문서 삭제, 재색인 범위를 판단할 수 있다.
모델 변경 판단
embedding 모델을 바꿀 때는 다음을 확인한다.
- 기존 vector와 새 vector를 같은 index에 섞을 것인가?
- 전체 재색인 비용은 얼마인가?
- dual index로 품질 비교를 할 것인가?
- query embedding과 document embedding이 같은 모델인가?
- retrieval eval에서 품질이 개선되는가?
대부분의 경우 model version이 다른 vector를 무심코 섞는 것은 위험하다.
장애 상황과 대응
증상:
- 모델 변경 후 검색 품질이 갑자기 나빠졌다.
- 특정 문서가 검색되지 않는다.
- 비슷하지 않은 문서가 상위에 온다.
대응:
- query와 index의 embedding model version을 비교한다.
- 재색인 완료율을 본다.
- old/new index eval을 비교한다.
- source id별 vector record 존재 여부를 확인한다.
인프라 협업 포인트
Embedding은 batch workload를 만든다. 인프라팀과 embedding worker concurrency, rate limit, retry, queue depth, 비용, vector DB write throughput을 합의한다.
실전 팁
- embedding 입력에는 불필요한 boilerplate를 줄인다.
- chunk마다 source id와 document version을 붙인다.
- embedding 실패를 재처리할 수 있게 job 상태를 저장한다.
- 모델 변경은 작은 설정 변경이 아니라 데이터 마이그레이션으로 본다.
위험 신호!
- embedding model version을 저장하지 않는다.
- query embedding 모델과 index embedding 모델이 다르다.
- 원본 문서 없이 vector만 남아 있다.
- 재색인 계획 없이 embedding 모델을 바꾼다.
확인 질문
확인 질문
- embedding 모델 변경이 검색 품질에 영향을 주는 이유는 무엇인가?
- 벡터가 놓이는 의미 공간이 달라질 수 있기 때문이다.
- vector record에 source metadata가 필요한 이유는 무엇인가?
- 검색 결과를 권한, 출처, 삭제, 재색인과 연결하기 위해서다.