S3 Vectors에서 Zilliz Cloud로 마이그레이션하기: 계층형 스토리지의 힘을 활용하기
이제 비정형 데이터는 새로 생성되는 모든 데이터의 거의 90%를 차지합니다. ChatGPT 붐은 이러한 변화를 더욱 명확하게 만들었습니다. 이후 벡터 검색은 비정형 데이터를 이해하는 기본 방식이 되었으며, RAG 파이프라인, AI 에이전트, 추천 엔진, 챗봇과 같은 GenAI 시스템을 구동하고 있습니다.
하지만 벡터 검색은 저렴하지 않습니다. 특히 최적화되지 않은 인덱스를 사용할 경우 NoSQL 워크로드보다 10–100× 더 많은 컴퓨팅이 필요할 수 있으며, 어떤 경우에는 LLM 호출보다 더 비싸기도 합니다. 모든 쿼리가 고성능 스토리지와 메모리에 접근하면 비용은 성능보다 더 빠르게 증가할 수 있습니다.
AWS는 이를 해결하기 위해 S3 Vectors를 도입하여 벡터 검색과 객체 스토리지의 비용 효율성을 결합했습니다. 영리한 아이디어이지만 트레이드오프가 없는 것은 아닙니다. 더 높은 지연 시간, 더 낮은 재현율, 대규모 시스템을 위한 제한된 유연성이 있습니다. Zilliz Cloud의 Tiered Storage는 더 균형 잡힌 접근 방식을 취합니다. 전체 데이터셋을 객체 스토리지에 저장하면서 각 클러스터의 로컬 SSD와 메모리를 지능형 캐시로 사용하여 쿼리와 데이터 액세스를 가속화합니다.
이 글에서는 S3 Vectors가 빛을 발하는 지점과 한계가 드러나는 지점을 살펴본 다음, Zilliz Cloud의 Tiered Storage가 이러한 한계를 어떻게 해결하는지 보여드립니다. 또한 몇 단계만으로 S3 Vectors에서 Zilliz Cloud로 데이터를 마이그레이션하는 짧은 튜토리얼도 확인할 수 있습니다.
S3 Vectors: 저렴하지만 명확한 한계가 있음
먼저 잘 작동하는 부분부터 살펴보겠습니다. S3 Vectors는 저렴합니다. 스토리지 비용은 GB당 단 $0.06로, 대부분의 서버리스 벡터 데이터베이스보다 대략 5배 저렴합니다. 4억 개의 벡터와 월 1,000만 건의 쿼리를 처리하는 샘플 워크로드에서 총 청구액은 월 약 $1,200에 불과합니다. 이는 다른 곳에서 일반적으로 볼 수 있는 다섯 자릿수 청구액에서 크게 낮아진 수준입니다. 트래픽이 낮거나 지연 시간에 관대한 워크로드라면 이 계산에 이의를 제기하기 어렵습니다.
성능에는 경계가 있습니다: 규모나 응답성을 추구하기 시작하면 트레이드오프가 드러납니다:
컬렉션 크기: 각 S3 테이블은 최대 5,000만 개의 벡터를 보유하며, 전체적으로 10,000개 테이블의 글로벌 한도가 있습니다.
쿼리 지연 시간: 1M 벡터 컬렉션의 경우 약 500 ms, 10M의 경우 700 ms 정도를 예상할 수 있습니다. 백그라운드 작업에는 허용 가능하지만, 실시간 앱에는 적합하지 않습니다.
처리량: 최대 200 QPS까지 200 ms 미만의 지연 시간을 얻을 수 있지만, 그 이상으로 확장하는 것은 쉽지 않습니다.
쓰기 속도: 2 MB/s 미만으로 제한되며, GB/s 수준의 쓰기를 유지하는 Milvus 같은 엔진보다 훨씬 느립니다. 장점은 쓰기가 읽기를 차단하지 않는다는 점이지만, 전반적으로 읽기 중심의 정적 데이터셋에 명확히 최적화되어 있습니다.
정확도와 쿼리 유연성: 재현율은 일반적으로 85–90% 사이에 머물며, 이를 더 높일 수 있는 튜닝 옵션이 없습니다. 필터를 추가하면 재현율이 급격히 떨어질 수 있으며, 때로는 50% 미만으로 내려가기도 합니다. 한 벤치마크에서는 데이터셋의 절반을 삭제한 후 Top-K=20 쿼리가 15개의 결과만 반환했습니다. 이는 정밀도 제어가 제한적이라는 분명한 신호입니다.
누락된 기능: S3 Vectors는 개발자가 프로덕션 시스템에서 흔히 기대하는 여러 기능도 생략합니다:
Top-K 쿼리가 30개 결과로 제한됩니다.
레코드당 엄격한 메타데이터 제한이 있습니다.
하이브리드 검색, 멀티테넌시, 고급 필터링 지원 및 기타 많은 엔터프라이즈 준비 기능이 없습니다.
S3 Vectors는 저렴하며, 쿼리 빈도가 낮고 지연 시간이 중요하지 않은 단순한 대규모 검색 작업에 적합합니다. 하지만 워크로드가 실시간 검색, 하이브리드 검색, 또는 멀티테넌트 아키텍처를 요구할 때는 그 단순함이 빠르게 병목이 됩니다.
Zilliz Cloud Tiered Storage: 비용 효율적이고 빠르며 프로덕션에 적합
AWS는 비용 절감을 위해 객체 스토리지와 벡터 검색을 결합했습니다. Zilliz Cloud는 새로운 Tiered Storage로 그 아이디어를 한 단계 더 발전시켜, 동일한 비용 효율성을 맞추면서도 실제 프로덕션 성능을 제공합니다.
오픈 소스 Milvus를 기반으로 구축된 Zilliz Cloud는 대규모 AI 워크로드를 위해 설계된 완전 관리형 벡터 데이터베이스입니다. Tiered Storage 아키텍처는 모든 벡터 데이터를 객체 스토리지(예: AWS S3)에 저장하면서 각 클러스터의 로컬 SSD와 메모리를 지능형 캐시로 사용해 쿼리와 데이터 액세스를 가속화합니다. 그 결과: S3의 낮은 비용과 전용 벡터 데이터베이스의 속도 및 유연성을 동시에 제공합니다.
내부적으로 Tiered Storage는 세 가지 계층 — Hot(메모리), Warm(SSD), Cold(객체 스토리지) — 을 관리합니다:
Hot 데이터는 즉각적인 응답 시간을 위해 메모리에 유지됩니다.
Warm 데이터는 속도와 비용의 균형을 맞추기 위해 로컬 SSD에 저장됩니다.
Cold 데이터는 장기 보존을 위해 객체 스토리지에 효율적으로 저장됩니다.
이 시스템은 실제 쿼리 패턴을 기반으로 계층 간에 데이터를 자동으로 이동시켜, 프로덕션 테스트에서 90% 이상의 캐시 적중률을 유지합니다. 실제로 이는 대부분의 쿼리가 빠른 계층에서 직접 처리된다는 뜻이며—객체 스토리지의 경제성과 인메모리 응답성을 결합합니다.
Zilliz Cloud Tiered Storage의 실제 활용 사례
1. 대규모 멀티테넌트 RAG/AI 앱
많은 프로덕션 AI 시스템은 수백만 명의 테넌트를 지원하지만, 특정 시점에 활성 상태인 테넌트는 보통 1–5%에 불과합니다. AI 코딩 어시스턴트, 채팅 앱, 고객 지원 코파일럿을 생각해 보세요.
Tiered Storage를 사용하면 Zilliz Cloud가 활동량을 기반으로 스토리지를 자동으로 균형 있게 조정합니다:
비활성 테넌트 데이터의 약 95%는 객체 스토리지에 유지되어 스토리지 비용을 원시 S3 수준에 가깝게 유지합니다.
활성 상태의 5%는 메모리 또는 SSD에 위치하여 진행 중인 세션 동안 낮은 지연 시간의 검색을 보장합니다.
2. 대규모, 저빈도 데이터 분석
자율주행, 로보틱스 모델 훈련, 신약 개발과 같은 분야는 페타바이트 규모의 데이터셋을 생성하지만 — 쿼리 워크로드는 하루 몇 건에서 수백 건에 이르기까지 종종 가벼운 편입니다. 이러한 경우, 상시 인메모리 스토리지는 과도합니다.
Zilliz Cloud의 Tiered Storage는 cold 데이터를 객체 스토리지에 유지하면서 자주 쿼리되는 샘플을 더 빠른 계층에 캐싱합니다. 이를 통해 사용 가능한 지연 시간을 유지하면서도 스토리지 비용을 완전한 인메모리 시스템의 일부 수준으로 줄여, 연구팀이 분석 워크플로를 변경하지 않고도 방대한 데이터셋을 효율적이고 경제적으로 탐색할 수 있게 합니다.
S3 Vectors에서 Zilliz Cloud로 데이터를 이동하는 방법
이제 Zilliz Cloud의 Tiered Storage가 성능상의 타협 없이 S3 수준의 비용 효율성을 제공하므로, 다음 질문은 간단합니다 — 데이터를 어떻게 옮길까요?
간단한 예를 사용해 보겠습니다. AWS 리전 us-west-2에 books라는 벡터 인덱스 아래 200개의 도서 레코드를 저장했다고 가정해 보겠습니다. 각 레코드에는 다음이 포함됩니다:
768차원 콘텐츠 벡터
기본 키로 사용되는 도서 제목
메타데이터에 저장된 저자 정보
사전 요구 사항
Docker가 설치되어 실행 중입니다.
VTS를 실행하는 노드는 S3 Vectors와 Zilliz Cloud 모두에 액세스할 수 있습니다.
IAM 사용자 또는 역할에
s3vectors:ListVectors권한이 포함되어 있습니다.
마이그레이션 전 검증
VTS를 배포하기 전에 S3 Vectors 데이터와 액세스를 확인하세요.
import boto3
import os
aws_access_key_id = os.getenv("AWS_ACCESS_KEY_ID")
aws_secret_access_key = os.getenv("AWS_SECRET_ACCESS_KEY")
s3vectors = boto3.client("s3vectors", region_name="us-west-2", aws_access_key_id=aws_access_key_id, aws_secret_access_key=aws_secret_access_key)
resp = s3vectors.list_vectors(vectorBucketName="vectors", indexName="books", returnMetadata=True, returnData=True)
for vector in resp["vectors"]:
print(vector)
200개의 레코드가 반환된 것을 확인할 수 있습니다.
{'key': 'First foot situation land bad.', 'data': {'float32': [0.7183347940444946……]}, 'metadata': {'author': 'Wendy Jones'}}
{'key': 'Face industry bit true.', 'data': {'float32': [0.9061349630355835……]}, 'metadata': {'author': 'Steven Smith'}}
{'key': 'Republican agreement probably home choose see.', 'data': {'float32': [0.26946496963500977……]}, 'metadata': {'author': 'Misty Lynch'}}
{'key': 'Before arrive design soon finally discuss.', 'data': {'float32': [0.35728317499160767……]}, 'metadata': {'author': 'Mark Johnson'}}
…………
마이그레이션 시작
1.최신 VTS 이미지(버전 1.2.0 이상)를 가져옵니다:
docker pull zilliz/vector-transport-service:v1.2.0
2.구성 파일을 생성합니다:
vim ./s3-vector_to_milvus.conf
3.다음 내용을 추가합니다(필요에 따라 수정):
env {
execution.parallelism = 1
job.mode = "BATCH"
}
source {
S3Vector {
region = "us-west-2"
vector_bucket_name = "vector-bucket" # Name of your vector bucket
index_name = "books" # Name of your vector index
ak = "ak" # aws_access_key_id
sk = "sk" # aws_secret_access_key
}
}
sink {
Milvus {
url="https://in01-***.<region>.zilliz.com.cn:19530"
token="***"
database="default" # Target database
batch_size=1 # Number of records per batch (larger batches are faster but use more memory)
}
}
파일을 저장합니다.
4.VTS 컨테이너를 실행하고 구성 파일을 마운트합니다:
docker run -v ./s3-vector_to_milvus.conf:/config/s3-vector_to_milvus.conf -it zilliz/vector-transport-service:v1.2.0 /bin/bash
5.컨테이너 내부에서 VTS 프로세스를 시작합니다:
./bin/seatunnel.sh --config /config/s3-vector_to_milvus.conf -m local
프로세스가 완료될 때까지 기다립니다. 완료되면 데이터가 Zilliz Cloud로 성공적으로 전송됩니다.
마이그레이션 후 검증
마이그레이션이 완료된 후 Zilliz Cloud Console에서 데이터를 확인합니다.
VTS는 메타데이터 필드를 자동으로 감지하고 각 속성에 대한 컬럼을 생성합니다. key 필드는 기본 키로 사용됩니다.
벡터 필드에 벡터 인덱스를 생성합니다.
데이터를 미리 보려면 Load Collection을 수행합니다.
레코드 수와 콘텐츠가 S3 Vectors의 것과 정확히 일치하는 것을 확인할 수 있으며, 이는 마이그레이션이 성공했음을 의미합니다.
마무리
S3 Vectors는 임베딩을 객체 스토리지에 저장해 비용을 낮게 유지하지만, 성능, 재현율, 엔터프라이즈 기능 면에서는 부족합니다. Zilliz Cloud는 동일한 아이디어를 한 단계 더 발전시켜, 비용 이점을 유지하면서 실제 AI 애플리케이션에 필요한 속도, 유연성, 안정성을 더합니다.
개발자에게 이는 더 이상 경제성과 성능 중 하나를 선택할 필요가 없다는 의미입니다. 하나의 관리형 플랫폼에서 수십억 개의 벡터로 확장하고, 빠른 티어에서 활성 워크로드를 제공하며, 콜드 데이터는 객체 스토리지에 비용 효율적으로 보관할 수 있습니다.
현재 S3 Vectors를 사용 중이라면 마이그레이션은 몇 단계만으로 가능하며, 쿼리 속도와 운영 단순성 측면에서 즉시 이점을 확인할 수 있습니다. 직접 사용해 보고, 자체 데이터로 벤치마크해 보며, Zilliz Cloud가 대규모 벡터 검색의 가능성을 어떻게 바꾸는지 확인해 보세요.
Zilliz Cloud를 직접 경험해 보세요
아직도 Zilliz Cloud가 적합한 선택인지 확신이 서지 않으신가요? 무료로 가입하고 $100 크레딧을 받아 세계 최고의 관리형 벡터 데이터베이스를 직접 경험해 보세요.
이미 다른 벡터 데이터베이스를 사용 중이신가요? Zilliz Cloud는 Pinecone, Qdrant, Elasticsearch, PostgreSQL, OpenSearch, Weaviate, 그리고 온프레미스 Milvus에서도 원활한 마이그레이션을 지원하므로, 번거로움 없이 데이터를 이전할 수 있습니다.
향후 마이그레이션에 대해 궁금한 점이 있다면 문서를 확인하거나 문의하기를 통해 연락해 주세요—Zilliz Cloud를 최대한 활용하실 수 있도록 도와드리겠습니다.
계속 읽기

Introducing Zilliz CLI and Agent Skills for Zilliz Cloud
Manage your vector database from your terminal or AI coding agent. Zilliz CLI and Agent Skills work with Claude Code, Cursor, Codex, and Copilot.

Milvus 2.6.x Now Generally Available on Zilliz Cloud, Making Vector Search Faster, Smarter, and More Cost-Efficient for Production AI
Milvus 2.6.x is now GA on Zilliz Cloud, delivering faster vector search, smarter hybrid queries, and lower costs for production RAG and AI applications.

Selecting the Right ETL Tools for Unstructured Data to Prepare for AI
Learn the right ETL tools for unstructured data to power AI. Explore key challenges, tool comparisons, and integrations with Milvus for vector search.



