LLM 기반 서비스에서는 기존의 관계형 데이터베이스만으로는 해결하기 어려운 문제들이 생기죠. 오늘은 AI 개발자 관점에서 세 가지 데이터베이스의 기본 개념과 특징을 정리해보겠습니다.
RDB는 데이터를 테이블 형태로 저장하고, 테이블 간의 관계를 정의하는 데이터베이스입니다. 각 테이블은 행(row)과 열(column)로 구성되며, 기본 키(Primary Key)와 외래 키(Foreign Key)로 테이블 간의 관계를 맺습니다.
기본 구조
데이터 저장 방식
사용자 테이블을 예로 들면, 각 사용자는 하나의 행으로 저장되고, ID, 이름, 이메일 같은 속성들이 열로 정의됩니다. 이때 ID가 기본 키가 되어 각 행을 고유하게 식별합니다.
쿼리 방식
SQL(Structured Query Language)을 사용합니다. "특정 조건을 만족하는 데이터를 찾아라"는 선언적 방식으로 작동하죠. 예를 들어 "지난 달에 가입한 사용자를 모두 찾아라"라고 요청하면, 데이터베이스가 알아서 최적의 방법으로 찾아줍니다.
트랜잭션과 ACID
RDB의 가장 큰 특징은 ACID 속성입니다.
AI 서비스에서 RDB는 주로 메타데이터 관리에 사용됩니다. 사용자 정보, 대화 세션 기록, 모델 버전 관리, API 사용량 추적 등 정형화된 데이터를 다룰 때 적합합니다.
장점
단점
Vector DB는 고차원 벡터를 저장하고 유사도를 기반으로 검색하는 데이터베이스입니다. 여기서 벡터란 숫자들의 배열을 의미하는데, AI에서는 텍스트, 이미지, 오디오 등을 숫자 벡터로 변환(임베딩)하여 표현합니다.
벡터란 무엇인가
"안녕하세요"라는 문장을 임베딩 모델에 넣으면 [0.23, -0.45, 0.67, ...] 같은 수백~수천 개의 숫자 배열이 나옵니다. 이 벡터는 문장의 의미를 수학적으로 표현한 것이죠. 의미가 비슷한 문장은 비슷한 벡터를 가지게 됩니다.
유사도 측정 방식
두 벡터가 얼마나 비슷한지 측정하는 방법에는 여러 가지가 있습니다.
인덱싱 구조
수백만 개의 벡터에서 빠르게 유사한 벡터를 찾기 위해 특수한 인덱싱 구조를 사용합니다.
이 인덱싱 방법들은 정확도를 약간 희생하는 대신, 속도를 크게 높이는 근사 검색(Approximate Nearest Neighbor Search)을 가능하게 합니다.
데이터 저장 방식
Vector DB는 벡터와 함께 메타데이터도 저장합니다. 예를 들어 문서의 벡터를 저장할 때, 원본 텍스트, 문서 ID, 작성일 등을 함께 저장하죠. 검색 시에는 벡터 유사도로 찾고, 메타데이터로 필터링합니다.
LLM 기반 서비스에서 가장 중요한 역할을 합니다. RAG(Retrieval Augmented Generation) 시스템의 핵심으로, 사용자 질문과 관련된 문서를 의미적으로 찾아내는 데 사용됩니다.
작동 원리
1. 문서를 적절한 크기로 나눕니다 (청킹)
2. 각 청크를 임베딩 모델로 벡터화합니다
3. 벡터를 Vector DB에 저장합니다
4. 사용자 질문도 같은 방식으로 벡터화합니다
5. 질문 벡터와 가장 유사한 문서 벡터들을 찾습니다
6. 찾은 문서를 LLM에 컨텍스트로 제공합니다
장점
단점
Graph DB는 데이터를 노드(Node)와 엣지(Edge)로 표현하는 데이터베이스입니다. 노드는 개체를 나타내고, 엣지는 개체 간의 관계를 나타냅니다. 수학의 그래프 이론을 데이터베이스에 적용한 것이죠.
기본 구조
RDB와의 차이
RDB에서는 관계를 외래 키로 표현하고, 관계를 탐색하려면 조인을 해야 합니다. 하지만 Graph DB에서는 관계 자체가 1급 시민(First-class citizen)입니다. 관계를 직접 저장하고 탐색할 수 있어서, 다단계 관계 탐색이 훨씬 빠릅니다.
예를 들어 "친구의 친구가 좋아하는 책"을 찾는다면, RDB는 여러 번의 조인이 필요하지만, Graph DB는 그래프를 따라 탐색하면 됩니다.
쿼리 방식
Cypher(Neo4j), Gremlin 같은 그래프 쿼리 언어를 사용합니다. 패턴 매칭 방식으로 작동하죠. "A라는 사람과 연결된 모든 사람을 찾고, 그들이 좋아하는 책을 찾아라" 같은 식입니다.
저장 방식
Graph DB는 보통 두 가지 방식으로 저장합니다.
Native 방식이 관계 탐색에서 더 빠르지만, Non-Native 방식은 기존 인프라를 활용할 수 있다는 장점이 있습니다.
지식 그래프 구축, 추천 시스템, 관계 분석에 사용됩니다. 최근에는 Graph RAG라는 개념이 등장했는데, 단순히 문서 조각을 찾는 것을 넘어 엔티티 간의 관계까지 활용하는 방식입니다.
지식 그래프 예시
"서울은 대한민국의 수도다"라는 문장에서
이렇게 구조화하면 "서울과 관련된 모든 정보", "대한민국의 수도 변천사" 같은 복잡한 질문에 답할 수 있습니다.
장점
단점
RDB: 테이블 중심. "이 데이터는 어느 테이블에 속하는가?"
Vector DB: 벡터 중심. "이 데이터는 무엇과 비슷한가?"
Graph DB: 관계 중심. "이 데이터는 무엇과 연결되어 있는가?"
RDB: 정확한 조건 검색. "나이가 30살이고 서울에 사는 사람"
Vector DB: 의미적 유사도 검색. "기계 학습에 관한 문서"
Graph DB: 관계 탐색 검색. "이 사람의 친구들이 좋아하는 제품"
RDB: 인덱스 기반 검색이 빠름. 조인이 많으면 느려짐
Vector DB: 고차원 유사도 검색에 최적화. 근사 검색으로 속도 확보
Graph DB: 관계 탐색이 빠름. 전역 집계는 느림
RDB를 선택하는 경우
Vector DB를 선택하는 경우
Graph DB를 선택하는 경우
AI 서비스를 개발할 때는 각 데이터베이스의 기본 개념과 강점을 이해하는 것이 중요합니다. RDB는 정형 데이터와 트랜잭션에 강하고, Vector DB는 의미적 유사도 검색에 특화되어 있으며, Graph DB는 복잡한 관계 탐색에 최적화되어 있습니다.