01 VectorDB 개념
01 VectorDB 개념
1. Note
- 대략적으로 이해는 되는데 뭔지는 모르겠네…
- 실제로 써보면서 이해해야할듯!!
2. 기본 개념
1. 벡터(Vector)
- 숫자들의 나열로 어떤 데이터를 표현하는 방식
- 단순한 리스트처럼 보이지만, 실제로는 n차원 공간에서의 좌표를 의미
- 텍스트, 이미지 같은 다양한 데이터를 수치화해서 컴퓨터가 처리할 수 있게 만듬
- 벡터 간의 거리나 방향을 통해 데이터 간 관계를 계산할 수 있음
- “데이터를 계산 가능한 형태로 만든 결과”
2. 임베딩(Embedding)
- 텍스트나 이미지 같은 비정형 데이터를 벡터로 변환하는 과정
- 단순 변환이 아니라 “의미를 유지”하는 것이 핵심
- 비슷한 의미를 가진 데이터는 벡터 공간에서도 가까운 위치에 배치
- 이 변환은 보통 AI 모델(임베딩 모델)이 수행
- 임베딩은 “의미를 담은 벡터로 바꾸는 작업”
3. 벡터와 임베딩
- 사람은 의미 기반으로 이해하는 과정을 가지지만, 컴퓨터는 ‘의미’를 이해하지 못함.
- 따라서 임베딩 작업을 거쳐서 비슷한 거리로 확인함
1 2 3 4 5 6 7
○ 강아지/고양이/자동차 "강아지" → [0.21, -0.55, 0.91] "고양이" → [0.19, -0.60, 0.88] "자동차" → [3.2, 10.1, -4.5] ○ 비교 distance(강아지, 고양이) → 작음 → 유사함 distance(강아지, 자동차) → 큼 → 다름
- 전체 흐름 ```
- 문장 입력
- 임베딩 모델이 벡터로 변환
- DB에 벡터 저장
- 검색할 때도 벡터로 변환
- 가장 가까운 벡터 찾기 ```
3. 고차원 벡터와 수학적 거리
1. 다차원 특징 (Dimensions)
- 우리가 사는 세상은 3차원(가로, 세로, 높이)이지만, AI가 사용하는 임베딩 공간은 보통 768차원~1536차원에 달함.
- 차원이 높다는 것은 하나의 단어를 설명하는 ‘기준(특징)’이 그만큼 많다는 뜻
- 1차원: [크기] → (개미는 작고, 코끼리는 크다)
- 2차원: [크기, 공격성] → (개미는 작고 순하지만, 벌은 작고 공격적이다)
- 1536차원: [크기, 공격성, 서식지, 포유류여부, 색상, 수명, 식성, …]
- 수많은 기준(차원)을 통해 단어를 정의하면,
- “강아지”와 “개”가 단순히 글자가 달라도 수천 개의 특징 값이 거의 일치함
- 때문에 AI는 두 단어가 매우 유사하다고 판단할 수 있음
- 차원을 많이 다룰수록
- 무거워지기는 하지만, 정확한 비교가 가능하기도 함.
- 너무 많을 경우 불필요한 차원이 생길 수도 있음을 경계해야함
2. 거리 계산법 (Similarity Metrics)
- 거리 계산 방식
| 방식 | 설명 | 특징 |
|---|---|---|
| 코사인 유사도 | 두 벡터 사이의 각도를 측정 | 가장 대중적. 데이터의 크기보다 방향성(의미)이 중요할 때 사용 |
| 유클리드 거리 | 두 점 사이의 직선 거리를 측정 | 값이 작을수록 유사함. 물리적인 값의 차이가 중요할 때 사용 |
| 내적 (Dot Product) | 두 벡터의 방향과 크기를 모두 고려 | 검색 속도가 빠르며, 추천 시스템에서 자주 활용 |
- 임베딩 공간에서 두 데이터가 얼마나 유사한지는 두 벡터 사이의 거리를 계산하여 유사도를 측정함.
- A와 B의 거리: “먹는 것”, “과일”, “단맛” 등의 수많은 차원에서 값이 비슷합니다. 따라서 거리가 매우 가까움
- A와 C의 거리: “전자제품”, “금속성”, “통신” 등의 차원에서 값이 완전히 다릅니다. 따라서 거리가 매우 멈
4. 일반 DB vs VectorDB
1. 비교
| 구분 | 일반 관계형 DB (RDB) | 벡터 데이터베이스 (Vector DB) |
|---|---|---|
| 핵심 기술 | SQL (B-Tree 인덱스) | 임베딩 & ANN (근사 최근접 이웃) |
| 검색 방식 | 키워드 일치 (Exact Match) | 의미적 유사도 (Semantic Search) |
| 데이터 형태 | 텍스트, 숫자, 날짜 (정형) | 고차원 수치 배열 (비정형 벡터) |
| 검색 결과 | 단어가 포함되어야만 나옴 | 단어가 달라도 의미가 같으면 나옴 |
2. 일반 DB의 한계 (Keyword Search)
1. 키워드 기반 검색 방식
- 일반적인 데이터베이스는 사용자가 입력한 문자열을 기준으로 데이터를 조회
- 대표적으로 SQL의 LIKE, FULLTEXT 검색 등이 있으며, 입력한 키워드와 동일하거나 포함된 데이터를 찾는 방식
- 이 구조는 단순하고 빠르며 구현이 쉽다는 장점
2. 의미를 이해하지 못하는 구조
- 이 방식은 “문자열 비교”에만 의존하기 때문에 의미를 전혀 고려하지 못함.
- 예를 들어 “강아지”를 검색하면 “반려견”이나 “애완동물”과 같이 의미적으로 유사한 데이터는 검색되지 않음
- 단어가 다르면 전혀 다른 데이터로 인식하기 때문
3. 표현 차이에 따른 검색 품질 저하
- 사용자의 표현 방식이 조금만 달라져도 검색 결과가 크게 달라지는 문제가 있음
- 같은 의미라도 표현이 다르면 검색이 실패하는 경우가 많음
1 2
“맛집 추천” → 검색됨 “맛있는 식당 알려줘” → 검색 안됨
5. 벡터 DB의 혁신 (Vector Search)
1. 벡터 기반 검색 방식
- 벡터 DB는 데이터를 임베딩 과정을 통해 벡터(숫자 배열)로 변환한 뒤 저장
- 검색 시에도 동일하게 입력값을 벡터로 변환하고, 기존 데이터와의 유사도를 계산하여 결과를 찾음
- 문자열이 아니라 “벡터 간 거리”를 기준으로 검색
2. 의미 기반 검색 가능
- 벡터 검색의 핵심은 의미를 반영할 수 있다는 점
- “강아지”를 검색하면 “반려견”,”고양이”, “동물” 처럼 의미적으로 유사한 데이터도 함께 검색
- 임베딩 과정에서 의미가 벡터 공간에 반영되기 때문
3. 유사도 계산 방식
- 벡터 간의 유사도는 주로 코사인 유사도(Cosine Similarity)를 사용하여 계산
- 이 방식은 벡터의 크기가 아니라 방향(패턴)을 기준으로 유사성을 판단
- 표현의 강도나 길이에 영향을 받지 않고 의미 자체의 유사도를 비교할 수 있음
4. 검색 경험의 변화
- 벡터 검색을 사용하면 사용자의 자연어 표현을 그대로 이해하는 것처럼 동작
- 키워드를 정확히 맞추지 않아도 의도를 기반으로 결과를 찾을 수 있기 때문에 검색 품질이 크게 향상
- 특히 챗봇, 추천 시스템, RAG 구조에서 필수적으로 사용됨
6. 벡터디비 종류(2026.03.30)
1. 전용 벡터 DB (Vector-Native)
| DB | 특징 | 장점 | 단점 |
|---|---|---|---|
| Pinecone | 완전 관리형 SaaS | 인프라 관리 필요 없음, 빠른 시작 | 비용 발생, 커스터마이징 제한 |
| Weaviate | 오픈소스 + GraphQL 지원 | 메타데이터 필터링 강력, AI 기능 내장 | 설정 다소 복잡 |
| Milvus | 고성능 벡터 엔진 | 대규모 데이터 처리에 강함 | 운영 난이도 있음 |
| Qdrant | Rust 기반 벡터 DB | 빠르고 가벼움, 필터 기능 우수 | 생태계 상대적으로 작음 |
2. 기존 DB + 벡터 확장
| DB | 특징 | 장점 | 단점 |
|---|---|---|---|
| PostgreSQL + pgvector | RDB에 벡터 기능 추가 | 기존 시스템과 통합 쉬움 | 성능은 전용 DB보다 제한적 |
| Elasticsearch | 검색 엔진 + 벡터 검색 | 텍스트 + 벡터 검색 동시 가능 | 설정 복잡, 리소스 사용 큼 |
| Redis (Vector) | 인메모리 기반 | 매우 빠름, 실시간 처리에 적합 | 메모리 비용 부담 |
7. 주요 임베딩 모델 차원
| 제공 주체 | 모델 | 차원 (Dimension) | 특징 |
|---|---|---|---|
| OpenAI | text-embedding-3-small | 1,536 | 가볍고 빠름, 비용 효율 |
| OpenAI | text-embedding-3-large | 3,072 | 높은 정확도, 검색/추천에 강함 |
| OpenAI | text-embedding-ada-002 (legacy) | 1,536 | 과거 표준 모델 |
| embedding-gecko-001 | 768 | Vertex AI 기반 | |
| textembedding-gecko@latest | 768 | 최신 gecko 계열 | |
| Sentence Transformers | all-MiniLM-L6-v2 | 384 | 매우 가벼움, 로컬용 |
| Sentence Transformers | all-mpnet-base-v2 | 768 | 성능 vs 속도 균형 |
| Microsoft | e5-small / base / large | 384 / 768 / 1024 | 검색 특화 (E5 계열) |
| BAAI | bge-small / base / large | 384 / 768 / 1024 | 최신 성능 좋은 오픈모델 |
| HKUNLP | Instructor-xl | 768 | instruction 기반 임베딩 |
This post is licensed under CC BY 4.0 by the author.