임베딩과 벡터 운영의 핵심 경로
임베딩 운영은 벡터 저장소 선택, ANN 인덱스, chunking, hybrid search, reranker, quantization, 갱신 파이프라인이 함께 맞물리는 영역입니다. 검색 품질뿐 아니라 비용, latency, 권한, freshness까지 운영 지표로 다뤄야 합니다.
Script Companion
오디오와 함께 스크립트 보기
- 01
임베딩과 벡터 운영은 RAG의 인프라에 가깝습니다. 문서는 의미 검색 품질이 RAG 답변 품질의 절반 이상을 결정한다고 봅니다. 동시에 비용과 latency가 바로 운영 이슈가 됩니다. 예를 들어 1억 벡터에 1024차원 fp32를 쓰면 저장 공간만 400GB가 됩니다. 압축과 차원 선택이 storage 비용으로 이어지고, P99 100ms 이하 검색은 챗봇 UX의 중요한 기준이 됩니다. 결국 임베딩 운영은 모델 하나를 붙이는 일이 아니라, 검색 품질과 비용과 갱신을 함께 설계하는 일입니다.
- 02
Vector store 선택은 규모와 운영 모델에서 시작합니다. 1M 미만 벡터와 prototype 단계라면 pgvector나 Chroma가 자연스럽고, Postgres 생태계 안에서는 pgvector와 pg_search로 BM25 결합까지 고려할 수 있습니다. 1M에서 100M 사이를 self-host로 운영한다면 Qdrant나 Weaviate가 후보가 됩니다. 100M 이상 scale-out이 필요하면 Milvus나 Vespa가 언급됩니다. 운영 부담을 피하고 싶다면 Pinecone, Zilliz, Turbopuffer 같은 managed 선택지가 있고, 검색 엔진과 dense 검색을 함께 묶고 싶다면 Elasticsearch나 OpenSearch가 자연스럽습니다.
- 03
수백만에서 수십억 벡터를 정확히 전부 비교하는 nearest neighbor 검색은 비현실적이므로, 운영에서는 ANN, 즉 Approximate Nearest Neighbor 근사 검색이 표준입니다. Flat 방식은 원본 전체를 비교해 recall 100%를 얻지만 O(N)이라 느리고, 100k 미만에서나 의미가 있습니다. HNSW는 그래프 기반으로 매우 빠르고 recall 95에서 99%를 기대할 수 있어 운영 표준으로 쓰입니다. IVF는 k-means cluster를 만들고 일부만 탐색해 큰 규모에서 빠른 색인을 돕고, IVF-PQ는 Product Quantization으로 메모리를 크게 줄입니다. 메모리가 부족하면 DiskANN, Google 표준으로는 SCANN도 문서에 정리되어 있습니다.
- 04
HNSW 튜닝은 세 개의 노브를 이해해야 합니다. M은 그래프 연결 수이고 16에서 64 사이가 언급되며, 클수록 recall은 오르지만 메모리도 늘어납니다. efConstruction은 색인 시 탐색 폭이고, efSearch는 검색 시 탐색 폭입니다. 시작값은 M 32, efConstruction 200, efSearch 100으로 두고 측정 후 조정하는 흐름이 권장됩니다. 메모리 예산이 코퍼스의 1.5배보다 작으면 HNSW 인메모리는 어렵고 DiskANN 또는 IVF-PQ로 전환해야 합니다. 그대로 밀어붙이면 OOM이나 swap 때문에 P99가 100ms에서 수 초로 튈 수 있습니다.
- 05
ANN에서 자주 생기는 실패는 조용히 품질이나 latency를 망가뜨리는 형태입니다. recall@10이 0.9보다 낮으면 먼저 efSearch를 100에서 200으로 올리고, 그래도 부족하면 M을 16에서 32로 키우는 식으로 접근합니다. 하지만 efSearch만 계속 올리면 latency가 brute force 수준으로 돌아갈 수 있습니다. 그 지점에서는 인덱스 파라미터가 아니라 모델, chunking, hybrid search를 의심해야 합니다. 반대로 코퍼스가 100k보다 작다면 ANN 자체가 오버헤드일 수 있습니다. 이때는 Flat exact로 돌아가도 brute force가 ms 단위에 머물 수 있습니다.
- 06
Chunking은 문서를 어떻게 쪼개느냐의 문제이고, 문서는 검색 품질의 50%를 좌우한다고 봅니다. Fixed-size는 단순하지만 의미 단위가 깨질 수 있고, Recursive는 paragraph, sentence, token 순으로 나누어 의미 구조를 일부 보존합니다. Semantic은 임베딩 거리 기반으로 의미 단위를 살리지만 비용과 latency가 늘고, Structural은 markdown heading이나 HTML 구조를 보존하지만 구조 없는 텍스트에는 약합니다. Sliding window는 overlap으로 경계 정보를 지키지만 중복이 늘어납니다. 일반 텍스트는 chunk 512에서 1024 토큰과 overlap 50에서 100이 권장되고, 한국어는 토큰 효율을 감안해 영어 대비 약 50% chunk size가 권장됩니다.
- 07
코드와 표는 일반 텍스트처럼 자르면 안 됩니다. 코드는 함수나 class 단위의 structural chunking이 적합하고, 표와 리스트는 행 단위 또는 entire structural unit을 보존하는 쪽이 안전합니다. 문서에는 late chunking도 새 흐름으로 등장합니다. Jina, 2024-2025 맥락에서 설명된 방식으로, 문서 전체를 임베딩한 뒤 token-level 임베딩에서 chunk를 추출해 context-aware chunking 품질을 높이는 접근입니다. 여기서 중요한 점은 chunking이 단순 전처리가 아니라 검색 품질의 앞단이라는 것입니다. chunk 경계가 틀어지면 좋은 vector store와 reranker를 붙여도 정답 후보가 처음부터 빠질 수 있습니다.
- 08
Hybrid Search는 BM25와 dense embedding을 함께 쓰는 방식입니다. dense embedding만으로는 고유명사, 신조어, 법률, 코드 식별자 같은 영역이 약할 수 있으므로 BM25가 보완합니다. RRF k는 보통 60이고 두 ranking을 동등하게 결합하는 기준으로 언급됩니다. 도메인별 가중치도 달라집니다. 일반 자연어 QA는 dense 0.7, BM25 0.3이 권장되고, 법률·의학·고유명사가 많은 영역은 dense 0.4, BM25 0.6이 제시됩니다. 코드 검색은 식별자 매칭이 중요하므로 dense 0.3, BM25 0.7 쪽으로 기웁니다.
- 09
Semantic retrieval 품질 튜닝은 recall을 먼저 확보하고, rerank와 filter로 precision을 회복하는 순서가 안정적입니다. Query rewriting은 후속 질문을 독립 검색어로 바꾸는 데 쓰지만, chat history를 무조건 붙이면 noise가 늘기 때문에 최근 intent와 entity만 보존합니다. Metadata filter는 품질 기법이면서 보안 기법입니다. tenant_id, acl, doc_type, language, version, updated_at은 검색 전에 pre-filter하는 것이 원칙이고, 응답 직전 필터는 permission leak을 막지 못합니다. top-K를 키우면 recall은 오르지만 context precision과 generation 품질은 떨어집니다. 권장 흐름은 retrieve top-100, rerank top-10, context top-5에서 7입니다.
- 10
Reranker는 2단계 검색의 핵심입니다. bi-encoder embedding은 빠르지만 정확도 한계가 있으므로, 먼저 넓게 후보를 가져오고 reranker가 다시 정렬하는 구조가 표준으로 설명됩니다. 문서에는 BGE-reranker-v2-m3, voyage-rerank-2와 2-lite, Cohere Rerank 3.5, Jina Reranker v2, MS MARCO MiniLM-L6가 운영 표준 reranker로 정리되어 있습니다. ROI도 큽니다. recall@10이 보통 10에서 30% 개선된다고 되어 있어, RAG 운영에서 가장 큰 ROI 도구로 평가됩니다. 다만 latency budget이 50ms보다 작으면 적용이 어렵고, P99가 200ms를 넘으면 top-100을 top-50으로 줄이거나 더 작은 MiniLM을 고려합니다.
- 11
Multi-Vector와 Late Interaction은 문서 하나를 단일 vector로 보지 않고 token별 vector 집합으로 다루는 접근입니다. ColBERT-v2, BGE-M3 multi-vector mode, RAGatouille가 운영 도구로 언급됩니다. 장점은 bi-encoder보다 정확하고 cross-encoder보다 빠르다는 점이지만, token 수만큼 vector가 생기므로 storage가 많이 듭니다. 정확도가 중요한 검색이나 code search가 주요 사용처입니다. BGE-M3 통합 모드는 한 모델이 dense, sparse, ColBERT를 동시에 출력하고 셋을 RRF로 결합할 수 있습니다. 다만 단일 dense만 필요한 단순 작업에서는 오버헤드가 될 수 있습니다.
- 12
Quantization과 차원 축소는 비용을 직접 줄이는 운영 도구입니다. fp32에서 fp16은 2배 절감에 품질 영향이 거의 없고, fp32에서 int8은 4배 절감에 품질 영향이 1% 미만이라 운영 default로 제시됩니다. binary 1bit는 32배 줄일 수 있지만 약 5% 품질 손실이 있어 1차 검색 뒤 fp32 rerank가 권장됩니다. Matryoshka 256d는 1536차원 대비 6배 절감에 1에서 3% 손실이고, 256과 binary를 결합하면 192배 절감까지 언급됩니다. Cohere 측정값으로는 int8이 storage 4배 감소, 검색 품질 거의 100% 유지, 검색 속도 최대 40배 향상으로 정리됩니다.
- 13
Quantization의 운영 패턴은 2-stage retrieval입니다. binary로 1차 top-1000 후보를 넓게 잡고, fp32로 top-10을 다시 정렬합니다. 문서는 이 구조를 columnar DB에서 bloom filter로 page를 먼저 건너뛰고 원본 page에서 verify하는 방식, anti-spam 시스템에서 MinHash 후보군을 뽑고 정밀 비교하는 방식과 같은 패턴으로 봅니다. 일반 공식은 근사·고압축 1차 뒤에 정밀·고비용 2차를 붙이는 것입니다. 다만 코퍼스가 100k보다 작아 latency가 이미 ms 단위면 quantization 품질 손실만 떠안을 수 있습니다. reranker 없는 단일 단계 검색에서 binary 단독 사용도 피해야 하며, Matryoshka 절단은 학습 시 정해진 단계에서만 안전합니다.
- 14
갱신과 동기화는 운영에서 가장 어려운 영역으로 설명됩니다. Append-only는 새 문서만 추가해 단순하지만 오래된 정보 처리가 약하고, Soft delete와 reindex는 삭제 문서를 metadata로 표시한 뒤 주기적으로 정리합니다. Versioning은 문서마다 version 키를 두고 latest만 검색하는 방식입니다. 문서 원본이 DB, CMS, S3, Git처럼 여러 곳에 있으면 문서는 바뀌었는데 vector는 옛날 것인 장애가 흔합니다. 그래서 batch cron보다 변경 이벤트를 잃지 않는 파이프라인이 중요합니다. Outbox는 업무 트랜잭션과 document_changed 이벤트를 같은 DB commit에 넣고, CDC는 Debezium과 Kafka 등으로 변경 로그를 읽어 embedding queue에 넣습니다.
- 15
갱신 파이프라인에서는 idempotency key와 freshness SLA가 중요합니다. doc_id, version, chunk_hash로 upsert를 멱등화해야 같은 이벤트가 두 번 와도 vector가 중복 생성되지 않습니다. 문서 수정 후 5분 안에 검색 반영 같은 lag 목표를 두고, event_time에서 indexed_at까지의 p95와 p99를 모니터링합니다. 임베딩 모델이나 chunking 전략 변경은 partial upsert보다 새 index를 만들고 shadow query로 검증한 뒤 alias를 전환하는 blue-green index가 적합합니다. 흔한 silent failure는 stale embedding, orphan vectors, 모델 변경 시 전체 reindex 필요, tokenizer drift입니다. 이 문제들은 에러보다 오래된 답변과 누락된 검색 결과로 나타나기 쉽습니다.
- 16
운영 모니터링은 검색 품질과 시스템 상태를 함께 봐야 합니다. Retrieval 품질 지표로는 정답 문서가 top-k 안에 들어왔는지 보는 Recall@k, 정답 평균 rank의 역수를 보는 MRR, 순위까지 고려하는 NDCG@k, top-k 안에 적어도 하나의 정답이 있는지 보는 Hit@k가 있습니다. 운영 지표로는 query latency P50, P95, P99, gold dataset 기반 recall@k, index size, vector count, cache hit ratio, 임베딩 API 호출 비용과 drift가 필요합니다. Ragas는 faithfulness, context recall, context precision, answer relevance를 보고, TruLens, DeepEval, 자체 gold dataset과 Promptfoo도 표준 도구로 제시됩니다. 품질은 체감만으로 관리하기 어렵기 때문에 정량 지표가 반드시 필요합니다.
같은 레이어
L12에서 이어 듣기
- LLM API 기초와 운영 감각 길이 미정
- 운영 자산으로 보는 프롬프트 엔지니어링 길이 미정
- RAG 기초: 검색, 주입, 생성의 운영 기준 길이 미정
- LLM 도구 호출의 설계와 운영 길이 미정
- 에이전트 오케스트레이션 운영 기준 길이 미정
- LLM 비용과 지연을 운영 지표로 읽는 법 길이 미정
- LLM 보안과 운영 방어 계층 길이 미정
- LLM 운영을 위한 관측성과 평가 길이 미정
- 에이전틱 LLM의 컨텍스트 파이프라인 길이 미정
- 상태 머신으로 LLM 워크플로를 다루기 길이 미정
- AI 워크플로를 위한 Temporal Durable Execution 길이 미정
- Human-in-the-loop AI 워크플로 설계 길이 미정
- AI 앱의 온톨로지와 역량 모델링 길이 미정
- 심리측정으로 설계하는 SJT와 LLM 평가 길이 미정