이 문서를 통해 아래 질문들에 답할 수 있게 됩니다.

  • 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가 필요한 이유는 무엇인가?
    • 검색 결과를 권한, 출처, 삭제, 재색인과 연결하기 위해서다.

참고 문서