벡터DB데이터베이스AI입문

벡터 데이터베이스 입문 - AI 시대의 새로운 데이터 저장소

7분 읽기

벡터 데이터베이스 입문 - AI 시대의 새로운 데이터 저장소

MySQL, MongoDB 같은 데이터베이스는 익숙합니다. 하지만 AI 시대에는 새로운 종류의 데이터베이스가 필요합니다. 벡터 데이터베이스(Vector Database)입니다. ChatGPT, Google 검색, Netflix 추천 뒤에는 모두 벡터 데이터베이스가 있습니다.

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

전통적인 데이터베이스는 정확한 매칭에 강합니다. "이름이 '홍길동'인 사람을 찾아라"는 쉽습니다. 하지만 "홍길동과 비슷한 사람을 찾아라"는 어렵습니다. 무엇이 비슷함인지 정의하기 어렵기 때문입니다.

AI는 유사성 검색이 핵심입니다. "이 이미지와 비슷한 이미지 찾기", "이 문장과 의미가 유사한 문서 찾기", "이 사용자와 취향이 비슷한 사람 찾기" 같은 작업이 계속 필요합니다.

벡터로 표현하면 유사성을 수학적으로 계산할 수 있습니다. 문장, 이미지, 사용자를 모두 숫자의 배열(벡터)로 변환합니다. 두 벡터 사이의 거리나 각도를 계산하면 얼마나 비슷한지 알 수 있습니다.

하지만 벡터 검색은 계산량이 많습니다. 수백만 개의 벡터를 하나하나 비교하면 너무 느립니다. 벡터 데이터베이스는 이 검색을 빠르게 해주는 특수한 데이터베이스입니다. 전통적 DB가 정확한 검색에 최적화되어 있다면, 벡터 DB는 유사도 검색에 최적화되어 있습니다.

벡터와 임베딩

벡터는 그냥 숫자의 배열입니다. [0.2, 0.5, 0.8, 0.1] 같은 것입니다. 하지만 이 숫자들이 의미를 담을 수 있습니다. 단어, 문장, 이미지를 벡터로 변환하는 것을 임베딩(Embedding)이라고 합니다.

Word2Vec은 단어를 벡터로 만드는 유명한 기법입니다. "왕" - "남자" + "여자" = "여왕" 같은 계산이 가능합니다. 비슷한 의미의 단어는 비슷한 벡터를 가집니다. "고양이"와 "강아지"의 벡터는 가깝고, "고양이"와 "자동차"는 멉니다.

문장 임베딩은 더 복잡합니다. BERT, Sentence Transformers 같은 모델이 문장 전체의 의미를 768차원 또는 1536차원 벡터로 압축합니다. "날씨가 좋다"와 "맑은 하늘"은 표현은 다르지만 의미가 비슷해 벡터도 가깝습니다.

이미지도 벡터로 만들 수 있습니다. CNN 모델이 이미지를 벡터로 변환합니다. 비슷하게 생긴 이미지는 비슷한 벡터를 가집니다. Google 이미지 검색이 이 원리입니다. 이미지를 업로드하면 그것과 비슷한 이미지를 찾아줍니다.

벡터의 차원이 높을수록 더 많은 정보를 담을 수 있습니다. 하지만 계산량도 늘어납니다. 일반적으로 128차원에서 2048차원 사이를 씁니다. 어플리케이션의 요구사항에 따라 적절한 차원을 선택합니다.

유사도 검색의 원리

두 벡터의 유사도를 어떻게 계산할까요? 가장 간단한 방법은 유클리드 거리입니다. 두 점 사이의 직선 거리를 계산합니다. 거리가 가까울수록 비슷합니다.

코사인 유사도도 많이 씁니다. 두 벡터 사이의 각도를 계산합니다. 각도가 작을수록(벡터가 같은 방향을 가리킬수록) 비슷합니다. 벡터의 크기보다 방향이 중요할 때 유용합니다.

닷 프로덕트(내적)는 가장 빠릅니다. 두 벡터를 곱해서 더합니다. 하지만 벡터의 크기에 영향을 받습니다. 벡터가 정규화되어 있다면 코사인 유사도와 같습니다.

문제는 수백만 개의 벡터를 모두 비교하면 너무 느리다는 것입니다. 1억 개 벡터에서 검색하려면 1억 번 계산해야 합니다. 벡터 데이터베이스는 ANN(Approximate Nearest Neighbor) 알고리즘으로 이를 해결합니다.

ANN은 정확도를 조금 포기하고 속도를 얻습니다. 모든 벡터를 비교하지 않고, 가능성 높은 후보만 빠르게 찾습니다. HNSW, IVF, LSH 같은 알고리즘이 쓰입니다. 99% 정확도로 1000배 빠른 검색이 가능합니다.

주요 벡터 데이터베이스

Pinecone은 가장 인기 있는 관리형 벡터 DB입니다. 설치나 관리 없이 API로 바로 쓸 수 있습니다. 확장성이 좋고 속도가 빠릅니다. 무료 플랜도 있어 테스트하기 좋습니다.

Weaviate는 오픈소스 벡터 DB입니다. 강력한 필터링 기능과 하이브리드 검색(벡터 + 키워드)을 지원합니다. GraphQL API를 제공해 개발이 편리합니다.

Milvus는 대규모 데이터에 강합니다. 10억 개 이상의 벡터도 처리할 수 있습니다. Zilliz라는 관리형 서비스도 있습니다. 중국 회사가 만들었지만 글로벌하게 쓰입니다.

Qdrant는 Rust로 만들어져 매우 빠릅니다. 필터링 기능이 강력하고, 클라우드와 온프레미스 모두 지원합니다. 유럽에서 인기가 많습니다.

Chroma는 임베딩 중심으로 설계되었습니다. LangChain 같은 LLM 프레임워크와 통합이 쉽습니다. 개발용으로 간편하게 쓸 수 있습니다.

Redis, Elasticsearch, PostgreSQL(pgvector)도 벡터 검색 기능을 추가했습니다. 기존 인프라를 활용하고 싶다면 좋은 선택입니다.

실무 활용 사례

RAG 시스템에서 벡터 DB는 필수입니다. 문서를 임베딩해서 벡터 DB에 저장합니다. 질문이 들어오면 질문을 임베딩하고, 벡터 DB에서 유사한 문서를 검색합니다. Pinecone이나 Weaviate가 이 용도로 많이 쓰입니다.

추천 시스템도 벡터 DB 활용의 대표 사례입니다. 사용자와 상품을 벡터로 표현합니다. 사용자 벡터와 가까운 상품 벡터를 찾아 추천합니다. Netflix, Amazon이 이 방식을 씁니다.

이미지 검색에서도 필수입니다. Google Lens처럼 이미지로 이미지를 검색하거나, Pinterest처럼 비슷한 이미지를 추천할 때 벡터 DB를 씁니다. 수억 장의 이미지를 실시간으로 검색합니다.

중복 감지에도 유용합니다. 고객 문의가 들어왔을 때, 이전에 유사한 문의가 있었는지 찾습니다. 빠르게 해결책을 제시하거나 중복 티켓을 병합할 수 있습니다.

이상 감지(Anomaly Detection)에도 씁니다. 정상 패턴을 벡터로 학습해두고, 새로운 데이터가 들어왔을 때 기존 벡터와 거리가 멀면 이상으로 판단합니다. 금융 사기 탐지, 네트워크 보안 등에 활용됩니다.

실천 가이드

  1. 무료 플랜으로 시작하기: Pinecone이나 Weaviate의 무료 플랜으로 벡터 DB를 직접 써보세요. 텍스트를 임베딩하고 검색하는 과정을 경험하세요.

  2. OpenAI Embeddings API 활용하기: 직접 임베딩 모델을 학습하기 어렵다면 OpenAI의 ada-002 모델을 쓰세요. 텍스트를 API로 보내면 벡터로 변환해줍니다.

  3. 적절한 차원 선택하기: 일반 텍스트는 768-1536차원이면 충분합니다. 이미지는 더 높은 차원이 필요할 수 있습니다. 정확도와 속도를 테스트하며 최적점을 찾으세요.

  4. 하이브리드 검색 고려하기: 순수 벡터 검색만으로 부족할 때가 있습니다. 키워드 검색과 벡터 검색을 결합하면 더 정확한 결과를 얻습니다.

  5. 성능 모니터링하기: 쿼리 속도, 재현율(Recall), 메모리 사용량을 모니터링하세요. 데이터가 늘어나면 인덱스를 재구축하거나 설정을 조정해야 할 수 있습니다.

마무리

벡터 데이터베이스는 AI 시대의 필수 인프라입니다. 전통적인 데이터베이스가 할 수 없는 유사도 검색을 빠르고 효율적으로 처리합니다.

처음에는 낯설게 느껴질 수 있습니다. 하지만 개념을 이해하면 생각보다 단순합니다. 벡터로 변환하고, 유사한 벡터를 찾고, 결과를 활용합니다. 이 세 단계가 전부입니다.

RAG를 구축하든, 추천 시스템을 만들든, 이미지 검색을 구현하든 벡터 DB는 필요합니다. 이제는 관리형 서비스 덕분에 인프라 걱정 없이 쉽게 시작할 수 있습니다. 당신의 프로젝트에 벡터 검색이 필요하다면, 주저하지 말고 시도해보세요.

함께 읽으면 좋은 글