벡터 데이터베이스를 위한 일관성 모델 이해하기
벡터 검색 애플리케이션을 위한 분산 시스템은 확장성 및 장애 허용성부터 향상된 성능과 전 세계적 접근성에 이르기까지 필수적인 요소가 되고 있습니다. 분산 시스템을 탄력적이고 고성능인 애플리케이션의 중추로 만드는 기본 원칙은 일관성, 가용성, 지연 시간 간의 트레이드오프를 고려하도록 요구합니다.
예를 들어, 분산 애플리케이션의 특정 벡터 검색 사용 사례에서는 일관성이 매우 중요합니다. 있어야 한다고 예상한 데이터를 쿼리했는데 거기에 없다면 정말 짜증 나지 않을까요? 분산 시스템에 있는 모든 복제본에서 데이터가 일관되지 않다면 그런 일이 발생할 것입니다. 겉으로 보기에는 간단해 보입니다. 물론 데이터를 넣고 여러 노드에 복제한 후에는 데이터가 거기에 있어야 합니다. 하지만 언제 거기에 있어야 할까요? 그것을 어떻게 보장할 수 있을까요?
일관성 문제에 대응하여, 완전 분산형 Milvus 벡터 데이터베이스는 Tunable Consistency를 제공합니다. Milvus는 데이터를 쓰는 방식을 확장하고 추가 도구를 사용하지 않고도 일관성을 보장할 수 있게 해주는 고유한 아키텍처를 갖추고 있습니다. 분산 인프라를 활용하는 Milvus는 느슨하게 결합된 pub-sub 시스템이며, 이는 타임스탬프를 통해 일관성을 쉽게 관리하고 조정할 수 있음을 의미합니다.
이 글에서는 다음을 살펴보겠습니다:
일관성이란 무엇인가?
- 벡터 데이터베이스 일관성 요구 사항
일관성, 가용성, 파티션
Milvus는 어떤 수준의 일관성을 제공하는가?
최종적 일관성
세션 일관성
제한된 일관성
강한 일관성
벡터 데이터베이스를 위한 일관성 이해 요약
일관성이란 무엇인가?
일관성의 정의 중 하나는 “시간이 지나도 품질이 크게 달라지지 않는 수준의 성능을 달성하는 것”입니다. 분산 데이터베이스의 일관성과 관련해서는, 사용자가 요청한 가장 정확하고 최신의 데이터를 제공합니다. 그래서 Milvus는 접근하려는 데이터가 얼마나 최신이어야 하는지에 따라 일관성을 “조정”할 수 있는 기능을 제공합니다.
데이터베이스 유형마다 추가적인 일관성 요구 사항이 있습니다. 예를 들어, 비관계형 데이터베이스는 종종 “최종적” 또는 완화된 ACID(원자성, 일관성, 격리성, 지속성) 요구 사항을 갖습니다. NoSQL 데이터베이스로 작업할 때 부분적으로 업데이트된 데이터를 받을 수도 있습니다.
반면, Postgres와 같은 ACID 준수 SQL 데이터베이스는 다른 일관성 요구 사항을 갖습니다. 이러한 데이터베이스는 변경 수준에서 일관성을 적용함으로써 부분적으로 업데이트된 데이터를 돌려받지 않도록 보장합니다. 따라서 쿼리할 때는 해당 변경으로부터 데이터를 돌려받기 위해 전체 변경이 완료될 때까지 기다려야 합니다.
벡터 데이터베이스 일관성 요구 사항
한편, 벡터 데이터베이스는 관계형 또는 비관계형 데이터베이스와는 다른 일관성 요구 사항을 갖습니다. 배치 변경이 완전히 완료되기 전에도 유효한 데이터를 가질 수 있습니다. 하지만 부분적으로 업데이트된 데이터는 가질 수 없습니다. 벡터 데이터베이스는 PACELC 정리 하에서 작동합니다. 이것이 바로 Milvus가 pub-sub 설정을 통해 수행하는 방식입니다. 각 행은 쓰기 파이프라인을 통해 “게시”되고 필요한 노드가 이를 “구독”합니다. 이 설정을 통해 Milvus를 검색하거나 쿼리하고 타임스탬프의 차이를 기반으로 결과를 얻을 수 있습니다.
일관성, 가용성, 파티션(CAP)
CAP 정리는 일관성, 가용성, 파티션 허용성 사이에 트레이드오프가 있다는 컴퓨터 과학 개념입니다. 세 가지 중 두 가지만 선택할 수 있습니다. 네트워크 파티션이 발생하면 가용성과 일관성 중 하나를 선택해야 합니다. 높은 데이터 가용성을 요구하는 시스템에는 복제본이 필요하며, 이는 일관성을 더 어렵게 만듭니다.
PACELC 정리는 CAP 정리의 확장입니다. CAP 정리 + else + latency + consistency입니다. 이는 네트워크 파티션이 없는 시스템에서는 가용성과 일관성 간의 트레이드오프를 걱정할 필요가 없다고 말합니다. 하지만 데이터를 동기화할 때까지 기다려야 하므로 여전히 지연 시간과 일관성 중 하나를 선택해야 합니다.
Milvus는 어떤 수준의 일관성을 제공하나요?
Milvus는 네 가지 다른 일관성 수준을 제공합니다. 일관성이 가장 낮은 것부터 가장 높은 것 순서대로 Eventual, Session, Bounded, Strong입니다. 최종적 일관성은 그것이 “... 언제든” 발생할 때까지 기다릴 의향이 있다는 의미입니다. 강한 일관성은 쿼리를 보내는 순간 모든 데이터를 포함하고 싶다는 의미입니다. Session과 Bounded는 그 중간에 있습니다. 더 자세히 살펴보겠습니다.
어떤 이모지가 어떤 수준을 나타내는지 맞혀볼 수 있나요?
최종적 일관성
Eventual(또는 “Eventually”) consistency는 데이터가 결국 모든 복제본에서 일관되게 된다는 의미입니다. 우리는 가장 최신 데이터나 반복 가능한 쿼리보다 애플리케이션의 속도를 더 중요하게 생각할 때 최종적 일관성을 사용합니다. Milvus에서 이러한 유형의 일관성은 읽을 때 타임스탬프 검사를 건너뛰어 일관성 요구 사항을 구현한다는 의미입니다.
이 유형의 일관성 수준의 예시 사용 사례는 제품 리뷰를 가져올 때일 수 있습니다. 대부분의 사용자는 제품의 모든 리뷰를 읽지 않으므로 가장 최신 리뷰를 가져오는 것은 그다지 중요하지 않습니다. 이 수준의 일관성으로 컬렉션을 만들고 싶다면, 아래 코드는 Milvus에서 “Eventually” 수준의 일관성으로 컬렉션을 만드는 방법을 보여줍니다. consistency_level이 “Eventually”라는 키워드를 찾고 있다는 점에 유의하는 것이 중요합니다.
세션 일관성
세션 일관성은 각 세션이 적어도 자체 쓰기를 기준으로 최신 상태임을 의미합니다. 하나의 세션에는 여러 복제본이 있을 수 있으므로, 이것이 첫 번째 지연 시간-일관성 트레이드오프입니다. 우리는 세션당 한 번만 상태를 저장하면 될 때 세션 일관성을 사용합니다. Milvus는 필요한 타임스탬프를 마지막 쓰기 시간으로 설정하여 이 유형의 일관성을 구현합니다.
실제로 각 클라이언트-서버 인스턴스가 데이터 일관성을 가져야 할 때 세션 일관성을 사용할 수 있습니다. 그 예로 비디오 게임 서버가 있습니다. 플레이어가 무한 글리치를 하도록 허용하고 싶지 않으므로, 각 인스턴스 또는 세션 내부에서 일관성을 보장해야 합니다. 아래 코드는 “Session” 일관성 수준을 사용해 벡터 검색을 수행하는 방법을 보여줍니다.
제한된 일관성
Bounded consistency(또는 bounded staleness)는 세션 일관성보다 한 단계 “더 일관된” 수준입니다. “Session” 수준의 일관성에서는 다른 인스턴스 또는 세션이 최종적 일관성으로 취급됩니다. Bounded staleness는 각 인스턴스와 복제본이 일정 기간 내에 동기화되도록 강제합니다.
Bounded staleness의 예로는 비디오 추천 엔진이 있을 수 있습니다. 사용자는 최신 비디오를 즉시 볼 필요는 없지만 곧 볼 수 있어야 합니다. 사용자의 변경 사항도 세션 외부로 신속하게 확산되어야 합니다. 아래 코드는 bounded consistency 요구 사항으로 Milvus를 검색하는 방법을 보여줍니다.
강한 일관성
강한 일관성은 데이터를 삽입하는 순간 사용할 수 있게 만듭니다. 물론 이러한 일관성에는 지연 시간 트레이드오프가 따릅니다. 시스템이 변경될 때까지 기다려야 합니다. 실제로 Milvus는 필요한 읽기 타임스탬프를 시스템의 최신 업데이트로 설정하여 이 일관성을 구현합니다. 이는 검색 지연 시간을 최소 200ms로 높입니다.
강한 일관성의 예로는 사기 탐지가 있을 수 있습니다. 누군가가 당신의 은행 계좌를 사기에 사용한다면, 이를 즉시 알아차리고 막아야 합니다. read-after-write 유형의 설정이 필요한 애플리케이션에는 강한 일관성이 필요합니다. 아래 코드는 Strong 일관성 요구 사항으로 컬렉션을 쿼리하는 방법(벡터 없는 필터링 검색)을 보여줍니다.
벡터 데이터베이스의 일관성 이해 요약
데이터 일관성은 분산 애플리케이션을 구축할 때 고려해야 할 가장 중요한 요소 중 하나입니다. 모든 애플리케이션에는 데이터가 필요하며, 모든 데이터에는 일정한 일관성 요구 사항이 필요합니다. 벡터 데이터와 관련해서는 행 기반 일관성 요구 사항을 기준으로 데이터 일관성을 평가해야 합니다.
이러한 요구 사항에 맞춰 Milvus는 데이터에 타임스탬프를 지정하는 방식에 기반하여 네 가지 수준의 일관성을 제공합니다. 이는 행 기반 일관성에 대해서만 가능하며 SQL 또는 NoSQL 데이터베이스에는 구현되어 있지 않다는 점에 유의하세요. 가장 일관성이 높은 것부터 낮은 것까지 네 가지 일관성 수준은 strong, bound, session, eventually입니다.
강한 일관성은 시스템 전체에서 사용 가능한 최신 데이터를 (거의) 즉시 모두 확보하도록 보장합니다. 이 수준의 일관성은 타임스탬프를 최신 삽입 타임스탬프로 업데이트하여 달성되며, 이를 통해 요청 시점까지 삽입된 모든 데이터를 쿼리할 수 있습니다.
Bounded 일관성은 고정된 기간 내에 시스템 전체의 최신 데이터를 모두 확보하도록 보장합니다. Bounded 일관성은 요청 시점부터 특정 기간 내를 확인하도록 타임스탬프를 설정합니다. 이렇게 하면 제한된 기간 내의 모든 데이터를 확보할 수 있습니다. Bounded 일관성은 Milvus의 기본 설정입니다.
Session 일관성은 현재 작업 중인 세션에서 최신 데이터를 모두 확보하도록 보장합니다. Milvus는 각 인스턴스의 타임스탬프를 해당 인스턴스가 마지막으로 데이터를 삽입한 시간으로 설정하여 이 수준의 일관성을 달성합니다. 이렇게 하면 우리가 사용하는 인스턴스에 삽입된 모든 데이터(적어도)를 확보할 수 있습니다.
마지막으로 eventual 일관성(키워드 “Eventually”)은 결국 시스템 전체의 데이터가 모두 일관되게 될 것임을 보장합니다. 데이터는 확산될 수 있으며, 적절하다고 판단되는 속도로 복제본에 동기화됩니다. 일부 데이터 일관성을 희생하지만, 그 대가로 더 나은 가용성과 성능을 얻습니다. 실제로 이 수준의 일관성은 오래 걸리지 않습니다. Milvus는 타임스탬프 확인을 건너뛰고 검색 또는 쿼리를 즉시 실행함으로써 eventual 일관성을 구현합니다.
계속 읽기

Zilliz Cloud Audit Logs Goes GA: Security, Compliance, and Transparency at Scale
Zilliz Cloud Audit Logs are now GA, giving enterprises real-time visibility, compliance-ready trails, and stronger security across AWS, GCP, and Azure.

Zilliz Named "Highest Performer" and "Easiest to Use" in G2's Summer 2025 Grid® Report for Vector Databases
Zilliz shines in G2's Summer 2025 Grid® Report as both "Highest Performer" and "Easiest to Use," solving the performance-usability dilemma.

Vector Databases vs. Graph Databases
Use a vector database for AI-powered similarity search; use a graph database for complex relationship-based queries and network analysis.



