💻데브노트소개
🤖

벡터 데이터베이스와 임베딩 입문: 의미 검색은 어떻게 동작하나

데브노트 편집팀·2026.07.04·6분 읽기
X(트위터)
ADVERTISEMENT

RAG, 추천 시스템, 의미 검색의 바탕에는 모두 임베딩벡터 데이터베이스가 있습니다. 키워드가 정확히 일치하지 않아도 '의미가 비슷한' 결과를 찾아내는 마법의 정체를 입문자 눈높이로 풀어봅니다.

임베딩이란 무엇인가

임베딩(embedding)은 텍스트·이미지 같은 데이터를 숫자 벡터로 바꾼 것입니다. 핵심은 의미가 비슷한 것끼리 벡터 공간에서 가까이 놓인다는 점입니다.

예를 들어 '강아지'와 '반려견'은 글자는 다르지만 벡터 거리가 가깝고, '강아지'와 '주식'은 멀리 떨어집니다. 덕분에 단어가 정확히 일치하지 않아도 의미로 검색할 수 있습니다.

from openai import OpenAI
client = OpenAI()

r = client.embeddings.create(
    model="text-embedding-3-small",
    input=["강아지", "반려견", "주식 투자"],
)
vecs = [d.embedding for d in r.data]
print(len(vecs[0]))  # 예: 1536차원 벡터

유사도는 어떻게 재나

두 벡터가 얼마나 비슷한지는 보통 코사인 유사도로 잽니다. 두 벡터가 이루는 각도가 작을수록(방향이 비슷할수록) 1에 가깝습니다.

import numpy as np

def cosine(a, b):
    a, b = np.array(a), np.array(b)
    return a @ b / (np.linalg.norm(a) * np.linalg.norm(b))

print(cosine(vecs[0], vecs[1]))  # 강아지-반려견: 높음
print(cosine(vecs[0], vecs[2]))  # 강아지-주식: 낮음

벡터 데이터베이스가 필요한 이유

벡터가 수백만 개라면 매번 전체를 비교하는 건 너무 느립니다. 벡터 DB는 ANN(근사 최근접 이웃) 알고리즘으로 '충분히 가까운' 결과를 빠르게 찾아줍니다.

  • 저장: 벡터와 원본 메타데이터를 함께 보관
  • 인덱싱: HNSW 같은 구조로 검색 속도 최적화
  • 검색: 질의 벡터와 가까운 top-k를 밀리초 단위로 반환

주요 벡터 DB 비교

제품형태특징
pgvectorPostgreSQL 확장기존 DB에 그대로 추가
Chroma오픈소스가볍고 프로토타입에 적합
FAISS라이브러리로컬·고성능, 직접 운영
Pinecone매니지드운영 부담 적은 클라우드

이미 PostgreSQL을 쓴다면 pgvector로 시작하는 게 가장 부담이 적습니다. 빠른 실험은 Chroma, 대규모 운영은 매니지드 서비스를 고려하세요.

마무리 체크리스트

  • 검색 대상 데이터를 임베딩 벡터로 변환했는가
  • 같은 임베딩 모델로 질의와 문서를 인코딩했는가 (모델 혼용 금지)
  • 유사도 척도(보통 코사인)를 일관되게 적용했는가
  • 데이터 규모에 맞는 벡터 DB를 골랐는가

임베딩과 벡터 DB는 현대 AI 검색의 기초 체력입니다. 작은 데이터셋으로 코사인 유사도부터 직접 찍어보면 원리가 한눈에 들어옵니다.

#벡터데이터베이스#임베딩#의미검색#코사인유사도
X(트위터)
ADVERTISEMENT