[Cosmos DB] Cosmos DB 개요 및 벡터 관련 정리 (Cosmos DB란?)

2025. 4. 4. 20:24·Azure

1. 개요

조사 계기

RAG 시스템 구축을 위해 알아보던 중, Azure에서 만든 Cosmos DB라는 것을 알게 되었다.
MySQL이나 PostgreSQL처럼 전통적인 DB와 ChromaDB, Milvus와 같은 Native Vector DB는 알고 있었지만 Cosmos DB라는 새로운 DB, 그것도 'MS Azure'에서 만든 것이라해서 궁금했다.

그래서 찾아보기 시작했는데 공식문서 외에는 한글로 된 자료가 많이 없어서 직접 정리해보기로 마음먹었다.

 

모든 내용은 MS Azure 공식문서에 기반한 것이며, 추가적으로 궁금한 내용은 별도로 공부하여 정리했습니다.

전체 구조

일단 AWS나 GCP는 많이 들어봤지만 Azure는 낮설기 때문에 아래의 내용과 같은 구조로 내용을 작성함

AI Search 항목이 포함되어 있는데 이는 RAG 플로우에서 데이터 청킹, 벡터화, DB 저장, 검색 등을 간소화한 서비스라고 생각하면 된다. DB는 아니지만 AI Search도 문서를 바로 벡터화하여 인덱싱할 수 있어서 벡터 관련 비교에 필요하여 추가했다.

(7번에 비교되어 있지만 AI Search에 대한 상세한 내용은 후에 글을 남기려고 한다.)

  • Azure AI Search를 포함한 기존 전통 DB와 비교
  • 벡터 DB 서비스 간 비교
  • 지원하는 벡터 인덱싱 알고리즘과 검색방법
  • 로컬에서 사용 가능한 방법

 

2. 내용

(1) Azure가 지원하는 데이터 모델

 

Azure 데이터 서비스 선택 - Azure Architecture Center

이 가이드를 사용하여 애플리케이션에 가장 적합한 데이터 서비스를 결정합니다.

learn.microsoft.com

[Azure 지원 데이터 모델 참조 링크]

구분 PostgreSQL MySQL Apache
Cassandra
Cosmos DB
for NoSQL
Cache
for Redis
Cosmos DB
for MongoDB
Cosmos DB
for Gremlin
DB 유형 관계 관계 NoSQL NoSQL 메모리 내 NoSQL 그래프
데이터
모델
관계 관계 다중 모델: 문서, 와이드 열, 키-값, 그래프 와이드 열 키-값 Document 그래프

 

구분

기본적으로 Azure에서는 위 항목 외에도 기본 SQL, MariaDB가 있음

  • 문서(Document): JSON 기반, NoSQL 형식 (예: MongoDB, SQL API)
  • 키-값(Key-Value): 단순 키-값 쌍 저장
  • 열(Column-Family): Cassandra API
  • 그래프(Graph): Gremlin API

Gremlin의 경우 처음 들어봤는데 이거에 대해서도 한 번 조사해볼 필요가 있을 것 같다.

 

(2) Cosmos DB란?

Cosmos DB는 다양한 데이터 모델과 글로벌 분산 기능을 제공하고 고성능과 낮은 대기 시간을 보장하는 Azure DB의 하나

  • 낮은 지연 시간과 높은 가용성 보장
  • 다중 쓰기 지역(다중 리전)과 다양한 워크플로우 제공
  • 읽기/쓰기 처리량을 필요에 따라 자동 스케일링으로 확장
  • 초당 수백만 개의 요청을 처리할 수 있음
  • 사용량에 따라 저장 공간을 동적으로 증가

Cosmos DB가 지원하는 데이터 모델은 아래와 같음

  • PostgreSQL
  • NoSQL
  • Mongo DB
  • Apache Cassandra

 

(3) RAG 시스템을 위한 벡터 타입과 관련 기능

 

벡터 검색을 위한 Azure 서비스 선택 - Azure Architecture Center

이 정보를 사용하여 애플리케이션에 가장 적합한 벡터 검색용 Azure 서비스를 결정하는 방법을 알아보세요.

learn.microsoft.com

[벡터 검색 참조 링크]

 

RAG 시스템 구축을 위한 데이터베이스는 벡터 타입과 벡터·검색 기능을 지원해야 하는데, 이를 지원하는 DB는 제한되어 있고 세부적인 사항도 다름

기능 Azure SQL
DB
Cosmos DB for
PostgreSQL 
Cosmos DB for MongoDB Cosmos DB for NoSQL Azure AI Search
내장 벡터 검색 O O O O O
벡터 데이터 유형 O O O O O
차원 제한 1,998 2,000 또는 16,000 2,000 505 또는 4,096 3,072
다중 벡터 필드 O O X O O
다중 벡터 인덱스 O O X O O

 

* 차원 (dimension) 정의

차원은 벡터의 크기를 정의하는 수이며 해당 요소는 벡터의 특성을 나타냄

 

차원의 수가 클 경우 장점
  • 차원의 수가 많은 벡터는 고차원 벡터라고 하고 주로 복잡한 데이터를 표현하는데 사용
  • 데이터의 특징을 더 정확하게 나타낼 수 있으며 벡터 공간 단어들 간 미묘한 차이를 더 잘 구분할 수 있음
    이로 인해 서로 비슷한 데이터를 더 정확하게 구분하고 찾을 수 있으며 이미지와 같은 데이터에서도 다양한 특성을 나타낼 수 있음
차원의 수가 클 경우 단점
  • 벡터들 간 거리가 비슷해질 수 있어서 거리 계산이 비효율적이 되고 성능 저하를 일으킬 수 있음
  • 메모리와 자원이 많이 소모되며 이는 검색 속도에 영향을 미침

=> 따라서 적절한 차원 수를 선택해야 함 (직접 사이즈를 조절해가며 테스트 필요..)

일반 데이터를 벡터 데이터로 바꿀 때 차원(dimension) 수가 중요한데, 벡터 DB에 저장된 데이터와 사용자 쿼리(검색어)의 차원 수가 같아야 검색이 됨

내가 테스트할 때 주로 사용한 text-embedding-3-small 모델의 경우 차원 수가 1536임

 

(4) 검색 메서드에 따른 구분

 

벡터 검색을 위한 Azure 서비스 선택 - Azure Architecture Center

이 정보를 사용하여 애플리케이션에 가장 적합한 벡터 검색용 Azure 서비스를 결정하는 방법을 알아보세요.

learn.microsoft.com

[검색 메서드 참조 링크]

검색 메서드 Cosmos DB for PostgreSQL Cosmos DB for NoSQL Azure AI Search
전체 텍스트 검색 O O O
하이브리드 검색 O O O
내장 reranking 기능 X O O
* RRF (Reciprocal Rank Fusion)

공식문서에서는 RRF(Reciprocal Rank Fusion)에 대한 비교표가 없어서 추가함

여기서 re-ranking은 RRF와는 다른 것!

  • RRF는 여러 점수 (텍스트 검색, 유사도 검색)를 합쳐서 계산하고 최종 랭킹으로 나열한 것
  • re-ranking은 검색 결과를 추가적으로 재정렬하는 것으로 내장 또는 별도의 모델을 사용
     
특성 RRF (Reciprocal Rank Fusion) Re-ranking
적용 대상 여러 검색 모델의 결과를 결합 단일 검색 결과의 순서를 다시 조정
계산 방식 순위(rank)를 기반으로 가중치를 계산하여 점수를 조합 추가적인 모델 또는 기준을 사용해 점수 계산 및 정렬
주요 목적 다양한 모델의 장점을 결합 초기 검색 결과의 품질 향상
Azure Cosmos DB Full-Text 검색과 벡터 검색 점수를 결합 Cosmos DB 내장 기능
예시 RANK RRF(VectorDistance, FullTextScore)로
하이브리드 검색 점수 계산
ML 모델을 사용해 상위 검색 결과 재정렬

 

=> RRF는 Cosmos DB에서 '하이브리드 검색 구현'을 위해 사용 되고 있으며, 여러 검색 알고리즘의 순위를 병합하여 단일 통합 순위를 생성하는 순위 집계 메서드임

 

(5) 하이브리드 검색 (Hybrid Search)

 

하이브리드 검색 사용(미리 보기) - Azure Cosmos DB for NoSQL

NoSQL용 Azure Cosmos DB의 전체 텍스트 검색 점수 매기기와 벡터 검색을 결합하는 하이브리드 검색의 개요입니다.

learn.microsoft.com

[하이브리드 검색 참조 링크]

 

벡터 기반 및 기존 키워드 기반 검색 방법의 장점을 활용하여 보다 관련성이 높고 정확한 검색 결과를 제공하는 검색 방법

NoSQL용 Azure Cosmos DB의 하이브리드 검색은 '두 가지'의 고유한 검색 방법론을 통합

  • 벡터 검색: 기계 학습 모델을 활용하여 쿼리 및 문서의 의미 체계적 의미를 이해함. 이렇게 하면 보다 미묘하고 컨텍스트 인식 검색 결과가 가능하고, 특히 기존 키워드 검색이 부족할 수 있는 복잡한 쿼리에 유용
  • 전체 텍스트 검색(BM25): 단어와 용어의 존재 및 빈도에 따라 문서의 점수를 지정하는 알고리즘. BM25는 특히 간단한 키워드 검색에 효과적이며 검색 관련성에 대한 강력한 기준을 제공

그런 다음 벡터 검색 및 전체 텍스트 검색의 결과는 RRF(상호 순위 Fusion) 함수를 사용하여 결합함. 이렇게 하면 최종 검색 결과가 두 검색 방법의 장점을 모두 활용할 수 있으며 여러 가지 이점을 제공함

  • 향상된 관련성: 의미 체계 이해와 키워드 일치를 결합하여 하이브리드 검색은 광범위한 쿼리에 대해 더 관련성 있는 결과를 제공
  • 정확도 향상: RRF 함수는 두 검색 방법에서 가장 적절한 결과의 우선 순위를 지정
  • 다용도: RAG(검색 증강 세대)를 비롯한 다양한 사용 사례에 적합하여 사용자 고유의 데이터에 기반을 두는 LLM에서 생성된 응답을 개선

NoSQL용 Azure Cosmos DB 하이브리드 검색

 

현재 Azure Cosmos DB NoSQL에서 하이브리드 검색은 프리뷰로 제공되고 있으며, 모든 지역에서 사용할 수 없는 상태 (일부 지역만 지원 또는 전체 사용 불가로 상태가 수시 변경)

 

모든 지역에서 사용할 수 없는 상태

 

코드의 경우, 하이브리드 검색의 인덱싱 정책과 쿼리에 대한 설명이 있어 해당 글을 참고하여 구현하였는데 추후 추가

 

(6) 벡터 데이터 인덱싱 알고리즘

벡터 데이터 인덱싱은 벡터를 효율적으로 저장하고 검색하는 기능
데이터 원본에 대한 유사성 검색과 가장 가까운 인접 쿼리의 속도와 정확도에 영향을 주기에 매우 중요

일반적으로 가장 가까운 인접 항목 알고리즘인 EKNN 또는 ANN 알고리즘 (DiskANN, HNSW, IVFFlat)을 사용

  • EKNN은 적은 양의 데이터의 경우 밀리초 단위로 작동하지만 많은 양의 데이터 검색 시, 대기 시간 발생 가능
  • DiskANN은 데이터 세트의 변경에 적응하고 컴퓨팅 리소스를 저장할 수 있음
  • HNSW는 빠른 쿼리 응답이 필요하고 데이터 세트의 변경에 적응할 수 있는 시스템에서 탁월
  • IVFFlat은 하드웨어 리소스가 제한되거나 쿼리 볼륨이 높지 않은 환경에서 효과적
       
인덱싱 방법 Cosmos DB for PostgreSQL Cosmos DB for NoSQL Azure AI Search
DiskANN X O X
EKNN O O O
HNSW O X O
IVFflat O X X
기타 - flat, quantizedFlat -

 

cosmos DB의 경우, 많은 DB가 사용하는 'IVFFlat'은 지원하지 않음

하지만, 유일하게 flat과 quantizedFlat 알고리즘을 지원하고 있음

적절한 인덱싱 전략을 선택하려면 데이터 세트의 특성, 쿼리의 특정 요구 사항 및 사용 가능한 리소스와 같은 다양한 요소를 신중하게 고려

 

(7) AI Search와 Cosmos DB의 차이

위에서 벡터 인덱싱 알고리즘이나 차원의 제한 등 세부 사항에 대한 차이가 있지만 구현하는데 있어 큰 차이가 있음

* Cosmos DB

Cosmos DB의 경우는 RAG 토이 프로젝트에서 사용한 Supabase 클라우드 DB와 마찬가지로 단순하게 본다면 데이터 저장소에 불과하기 때문에 데이터에 대한 인덱싱, 유사도 또는 하이브리드 검색, 정책 생성 등 많은 부분을 코드로 구현해야 함 (물론 SDK를 지원하고 많이 추상화되어 있기 때문에 오픈소스 벡터 DB에 비교한다면 적은 양)
그리고 문서 또한 직접 텍스트를 추출하여 벡터화하는 임베딩 과정을 거쳐야 함

* AI Search

AI Search는 데이터 인덱싱, 하이브리드 검색, 정책 생성 등 많은 부분을 웹 또는 SDK로 간단하게 구성할 수 있음
특이한 점은 DB와 연동을 해야 하는 것
사전에 벡터 데이터 등으로 구성된 Cosmos DB와 연동도 가능하지만 PDF와 같은 문서 파일이 업로드 되어 있는 Blob Storage와 연동한다면 별도의 텍스트 추출 없이 즉각 추출 -> 벡터화가 가능
이렇게 벡터화를 한 경우에는 AI Search 인덱스에 저장되며 AI-enrichment pipeline으로 수행

AI-enrichment pipeline

 

 

Use AI enrichment with image and text processing - Azure Architecture Center

Learn how to transform unstructured image and text data into full-text searchable content with Azure AI Search prebuilt skills and custom skills.

learn.microsoft.com

[Enrichment 참조 링크]

 

(8) 로컬에서 실행해보기 (Cosmos DB 로컬 에뮬레이터)

에뮬레이터 참조 링크 - 에뮬레이터 바로가기
windows 참조 링크 - windows 바로가기
Linux, Docker 참조 링크 - Linux, Docker 바로가기

 

개발 목적으로 설계된 Azure Cosmos DB 에뮬레이터를 사용하면 구독을 구입하거나 비용 지출 없이 로컬에서 애플리케이션 테스트를 할 수 있음. 이 후 만족하면 Azure Cosmos DB 계정을 사용하여 전환 가능

이를 통해 클라우드와 동일하게 로컬에서 데이터베이스에 대한 데이터를 만들고 모델링하는 특성을 학습할 수 있음

 

현재 에뮬레이터는 Windows(Linux) 기반에서 동작하기 때문에 Apple 실리콘, ARM 칩에서 실행되는 컴퓨터에서 동작 X.

하고자 한다면 Windows 가상 머신을 설치하고 에뮬레이터를 실행

 

Docker 컨테이너로도 사용 가능

권장 - NET 6 이상, Node.js 20 or Python 3.7 이상

 

3. 마치며

Cosmos DB에 대해 알아봤는데 기존 Native Vector 데이터베이스에 꿀리지 않을만큼 벡터 데이터베이스로서의 기능을 제공하고 있었다. 그리고 무엇보다 MS의 클라우드 서비스이기 때문에 전세계에 위치한 다양한 지역의 서버를 사용할 수 있어서 배포뿐만 아니라 백업, 이중화 측면에서도 좋을 것 같다. 그리고 로컬 에뮬레이터를 제공하기 때문에 도입 단계에서의 테스트나 개발 단계에서는 비용 걱정없이 사용할 수 있기 때문에 이또한 큰 이점인 것 같다.

하지만, 하이브리드 검색도 아직 프리뷰 단계이고 사용할 수 없다는걸 보면 벡터 데이터베이스로 실제로 사용하기에는 조금 어려우지 않을까 생각이 든다. 그래도 실제로 해보지 않으면 모르기 때문에 직접 Cosmos DB를 생성하고 SDK를 이용한 간단한 텍스트 검색을 테스트해보고자 한다. 

 

'Azure' 카테고리의 다른 글

[Cosmos DB] 생성 및 연결, 구현 테스트 (Cosmos DB 사용법)  (0) 2025.04.05
'Azure' 카테고리의 다른 글
  • [Cosmos DB] 생성 및 연결, 구현 테스트 (Cosmos DB 사용법)
hangyeoldora
hangyeoldora
hangyeoldora 님의 블로그 입니다.
  • hangyeoldora
    한결의 개발로그
    hangyeoldora
  • 글쓰기 관리자
  • 전체
    오늘
    어제
    • 분류 전체보기 (6)
      • Electron (0)
      • Nsis (0)
      • NestJS (1)
      • Python (1)
        • 자연어 처리 (0)
      • Azure (2)
      • 블로그 관련 (0)
      • Java (1)
      • Javascript (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 최근 댓글

  • 최근 글

  • 태그

    vector db
    cosmos
    netsjs
    ai search
    py-hanspell
    full-text
    Vector
    cosmos db
    azure db
    azure
  • hELLO· Designed By정상우.v4.10.3
hangyeoldora
[Cosmos DB] Cosmos DB 개요 및 벡터 관련 정리 (Cosmos DB란?)
상단으로

티스토리툴바