brunch

You can make anything
by writing

C.S.Lewis

by 알바트로스 Nov 16. 2024

벡터 DB는 기존의 데이터베이스와 어떻게 다를까?

2차원 공간에서 다차원 공간으로 범위를 확장시킨 벡터DB

지난 시간에는 입력된 텍스트 데이터를 적절한 크기의 덩어리로 쪼개어 주는 청킹(Chunking)과 숫자로 구성된 벡터로 변환해 주는 임베딩(embedding) 그리고 벡터로 변환된 각각의 데이터에 일종의 색인 작업을 해주는 인덱싱(Indexing)의 개념에 대해 배웠습니다.


이러한 일련의 과정들을 거쳐 한국어, 영어, 일본어 등 텍스트로 되어있는 데이터를 숫자들의 조합인 고차원 벡터(Vector)로 바꾸어주고 나면 비로소 우리는 벡터 DB(Vector DB) 혹은 벡터 스토어(Vector Store)라는 저장공간에 저장할 수 있게 됩니다. 그렇다면 여기서 말하는 벡터 DB란 무엇일까요?


벡터 DB는 그 이름에서도 알 수 있듯이 임베딩된 고차원 벡터들을 저장하고 효율적으로 검색할 수 있게 도와주는 일종의 데이터베이스입니다. IT 업계에 종사하고 계신 분들은 이미 RDB(Relational Database) 즉 관계형 데이터베이스나 NoSQL(Not Only SQL)과 같은 개념에 익숙하실 것입니다.


벡터 DB는 본질적으로는 기존의 데이터베이스와 그 원리나 개념이 크게 다르지 않습니다. 가장 큰 차이점은 기존의 관계형 DB가 행(row)과 열(column)의 2차원 형식으로 데이터를 표현하는 반면, 벡터 DB는 다차원 공간으로 그 개념을 확장시켰다는 것입니다. 물론 기존의 NoSQL이 비정형 및 반정형(semi-structured) 데이터 저장을 위한 기술로써 개발되었지만, 본격적인 고차원 데이터의 저장 기술은 벡터DB의 발전과 함께 시작되었다고 해도 과언이 아닙니다.



1. 2차원 데이터의 세계 : 관계형 데이터베이스(RDB)


기존의 데이터 베이스는 쉽게 말해 엑셀(Excel)을 생각하면 이해하기 쉽습니다. 행과 열로 구성된 이차원 테이블과 그들의 관계를 나타낸 것이 기존의 데이터베이스라고 생각해볼 수 있습니다. RDB (Relational Database)와 NoSQL 데이터베이스는 전통적인 데이터베이스 관리 시스템(DBMS)의 두 가지 주요한 방식입니다. 이 둘은 비슷하면서도 각각의 데이터 저장 방식과 쿼리 처리 방식에서 매우 다르기도 합니다. 먼저, 각 데이터베이스의 특징을 간단히 살펴보겠습니다.


관계형 데이터베이스(RDB)


RDB는 데이터를 테이블 형식으로 저장하고, 각 테이블 간의 관계를 정의합니다. 데이터를 정형화된 형식으로 저장하고, SQL(Structured Query Language)을 사용하여 데이터를 조회, 삽입, 수정, 삭제합니다. RDB는 ACID(Atomicity, Consistency, Isolation, Durability) 속성을 준수하여 데이터의 일관성과 무결성을 2 보장합니다.


2차원 데이터로 이루어진 관계형 데이터베이스(rdb)의 예시


관계형 데이터베이스는 데이터의 구조가 명확하고, 관계를 정의하는 데 유리하며, 트랜잭션 처리와 데이터 무결성 보장이 용이하다는 장점이 있는 반면, 데이터 구조가 미리 정의되어 있어 유연성이 떨어지고, 대규모 데이터나 비정형 데이터 처리에 어려움이 있다는 한계점이 있습니다.



2. 비정형 및 반정형 데이터 저장에 특화된 NoSQL(Not Only SQL)


NoSQL은 "Not Only SQL"의 약자로, 전통적인 관계형 데이터베이스 시스템의 제한을 벗어나기 위해 등장한 데이터베이스입니다. NoSQL은 데이터 저장 방식이 기존의 관계형 데이터베이스에 비해 훨씬 더 다양하며, 문서 기반, 키-값 기반, 열 기반, 그래프 기반 등 여러 종류가 존재합니다.


RDB보다 더욱 유연해진 NoSQL


NoSQL 역시 유연한 데이터 모델을 제공하고, 대규모 분산 데이터 처리에 유리하고 다양한 유형의 데이터를 처리할 수 있어 기존의 비정형 데이터(예: 텍스트, 이미지, 로그 등) 저장에 장점을 가지는 반면에 트랜잭션 처리와 데이터 일관성 보장이 상대적으로 약할 수 있으며, 복잡한 쿼리 처리에 여전히 제약이 있습니다.



2. 고차원 데이터의 세계로 : 벡터 DB(Vector Database)의 등장


RDB와 NoSQL이 텍스트 기반 데이터나 정형화된 데이터(Structured Data) 혹은 반정형 데이터(Semi-structured Data)를 처리하는 데 강점을 가진다면, 벡터 DB는 비정형 데이터 특히 고차원 벡터 데이터를 처리하는 데 최적화된 데이터베이스입니다. 벡터 DB는 주로 유사도 검색(similarity search)을 위해 설계되었으며, 임베딩된 벡터 데이터를 효율적으로 저장하고 빠르게 검색할 수 있는 기능을 제공한다는 점이 기존의 RDB나 NoSQL과 다른 점이라고 할 수 있습니다.


우선 벡터 DB는 관계형 데이터베이스와 구조부터가 다릅니다. RDB는 데이터가 테이블 형식(행과 열)으로 구조화되는 반면, 벡터 DB는 벡터 공간에서 데이터를 다루며, 각 데이터는 고차원 벡터로 표현됩니다. 즉, 벡터 DB는 수학적 특성을 이용해 데이터를 3차원 이상의 다차원 공간에 모델링합니다.



쿼리 방식 또한 다릅니다. RDB는 개발자들에게 친숙한 SQL(Structured Query Language)를 사용하여 데이터를 조회하는 반면에 벡터 DB는 벡터 유사도(Vector Similarity)를 기반으로 검색합니다. 사용자가 입력한 쿼리 벡터와 가장 유사한 벡터를 빠르게 찾는 것이 주요 기능이지요. 예를 들어, 텍스트 쿼리나 이미지에서 생성된 벡터를 검색하여, 가장 관련성이 높은 데이터 항목을 반환하는 방식입니다.


마찬가지로 검색 방식 역시 매우 다른데, RDB는 정해진 관계를 기반으로 데이터를 처리하는 반면에 벡터 DB는 고차원 공간에서의 유사도를 기반으로 데이터를 검색합니다. 따라서 벡터 DB는 자연어 처리(NLP), 이미지 검색 등과 같은 복잡한 검색 작업에 유리하다고 할 수 있습니다.


이번 시간에는 벡터 DB의 개념과 어떻게 벡터 DB가 고차원 데이터를 저장할 수 있는지에 대해 배워봤습니다. RDB에는 MySQL, PostgreSQL, Oracle, SQL Server 등 다양한 종류의 데이터 베이스가 있고, NoSQL에도 MongoDB, Cassandra, Redis, Neo4 j 등 다양한 종류가 있듯이 벡터 DB에도 한 가지 종류만 있는 것은 아닙니다. 다음시간에는 Elasic Search, Milvus, FAISS, ChromaDB, Pinecone 등 다양한 벡터 DB에 대해 자세히 배워보고 벡터 DB의 발전 방향에 대해서도 소개하도록 하겠습니다.

이전 09화 RAG를 빠르고 정확하게 해주는 인덱싱과 청킹
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari