-
1편: 벡터 데이터베이스의 개념과 필요성Open Source/VectorDB 2025. 6. 3. 12:00반응형
벡터 데이터베이스, 뭘까?
요즘 벡터 데이터베이스 를 적용해보려는 업무를 하는데 사실 저도 정확히 뭘 하는 건지 잘 몰라서 정리를 해보려고 합니다.
이 글에서는 벡터 데이터베이스의 개념과 필요성만 간단히 정리해두고, 다음 글부터는 조금 더 기술적인 내용으로 들어가 볼 예정입니다.
벡터란 무엇인가?
- 물리학에서의 벡터
- 물리학에서는 벡터를 크기(길이)와 방향을 가진 물리량으로 봅니다.
- 예: 속도 벡터(방향 + 크기), 힘 벡터(방향 + 크기)
- 보통은 화살표로 나타내며, 위치 이동(변위)도 벡터로 표현됩니다.
- 수학적 표현:
- 2D: $\mathbf{v} = (x, y)$
- 3D: $\mathbf{v} = (x, y, z)$
- 수학에서의 벡터
- 수학에서는 벡터를 성분의 나열로 생각합니다.
- 예: $\mathbf{v} = (v_1, v_2, \dots, v_n)$
- 보통 벡터는 선형대수의 기본 개념으로, 벡터 공간, 내적, 외적 등의 연산이 정의됩니다.
- 크기나 방향보다는 좌표공간에서의 위치나 방향을 다루는 개념으로 쓰입니다.
- 수학에서는 벡터를 성분의 나열로 생각합니다.
- 컴퓨터과학/데이터 과학에서의 벡터
- 컴퓨터과학에서는 벡터를 숫자로 이루어진 배열로 다룹니다.
- 주로 데이터 표현(특징 벡터, 임베딩), 또는 머신러닝 모델의 입력/출력 형태로 사용됩니다.
- 물리학/수학처럼 물리적인 방향은 의미가 없고, 각 벡터의 위치 관계와 유사성이 중요합니다.
- 예를 들어:
- 텍스트 임베딩: 문장 하나를 512차원 벡터로 표현
- 이미지 특징 벡터: CNN에서 추출한 이미지의 벡터 표현
관점 특징 예시 물리학 크기(길이)와 방향을 가진 물리량 속도, 힘, 전기장 등 수학 숫자의 나열, 좌표공간에서의 위치 (1, 2, 3), (0.1, -0.5, 0.7) 컴퓨터과학/AI 데이터 의미를 표현한 숫자 배열 텍스트 임베딩, 이미지 특징 벡터 기존 데이터베이스의 한계
- 기존의 RDB나 NoSQL 같은 데이터베이스는 정확히 일치하는 값 검색을 처리하는 데는 강점이 있습니다.
- 하지만 AI나 검색 엔진처럼 의미가 비슷한 데이터를 찾는 경우, 단순 문자열 매칭만으로는 부족합니다.
- 예를 들어 "벡터 DB 배우고 싶어요"와 "벡터 DB 공부 중입니다"는 단어는 다르지만 의미는 비슷한데, 기존 DB로는 이런 의미 기반 검색이 어렵습니다.
# 텍스트를 임베딩하는 예시 (가상코드) text1 = "벡터 DB 배우고 싶어요" embedding1 = model.encode(text1) # embedding: [0.1, 0.3, ..., 0.9] text2 = "벡터 DB 공부 중입니다" embedding2 = model.encode(text2) # embedding: [0.1, 0.3, ..., 0.8]
벡터 데이터베이스의 필요성
- 벡터 데이터베이스는 이런 문제를 해결하기 위한 기술입니다.
- 데이터(문서, 이미지 등)를 벡터로 변환해서 저장하고, 비슷한 벡터를 빠르게 찾아주는 기능에 최적화되어 있습니다.
- 이걸 유사도 검색(similarity search) 혹은 근접 이웃 검색(Nearest Neighbor Search) 이라고 부릅니다.
벡터 DB의 주요 기능
- 벡터 저장.
- 나랑 비슷한 벡터 찾아줘 요청이 들어오면, 미리 만들어 둔 인덱스를 사용해서 비슷한 벡터를 빠르게 찾아줍니다.
- 결과를 유사도가 높은 순으로 반환합니다.
마무리
정리하면:
- 벡터는 데이터를 숫자 벡터로 바꾼 표현 방식이다.
- 기존 DB로는 의미가 비슷한 데이터를 찾기 어렵다.
- 벡터 DB는 이런 의미 기반 검색을 지원하기 위해 만들어졌다.
앞으로 실제로 벡터 검색이 어떻게 동작하는지, 기술적인 내용을 더 다뤄보려고 합니다.
다음 글에서는...
"유사도 검색이 실제로 어떻게 구현되는지 (인덱싱, 검색 원리)" 를 정리해보려고 합니다.
반응형'Open Source > VectorDB' 카테고리의 다른 글
2편: 유사도 검색과 벡터 인덱싱 (0) 2025.06.05 - 물리학에서의 벡터