DynamoDB에 벡터 검색이 내장됩니다
Amazon DynamoDB에서 벡터 검색을 정식으로 사용할 수 있게 됐습니다. 이제 벡터 임베딩을 운영 데이터와 같은 테이블에 저장하고, 그 데이터를 별도의 벡터 저장소로 복제하지 않고도 유사도 검색을 직접 실행할 수 있습니다.
DynamoDB의 네이티브 벡터 검색은 99% 이상의 recall에서 한 자릿수 밀리초 지연을 제공합니다. 수조 개 규모의 벡터까지 다루도록 설계됐고, 프로비저닝하거나 패치하거나 관리할 서버가 없습니다. 설치하거나 유지할 소프트웨어도 없습니다. 버전도 유지보수 창도 없으며, 유지보수 작업에 다운타임이 발생하지 않습니다. 벡터 인덱스에는 저장 용량 제한이 없고, 데이터가 늘어나면 수평으로 확장됩니다.
무엇이 달라지는가
DynamoDB를 이미 쓰는 애플리케이션에 벡터 검색을 붙이려면, 기존에는 데이터를 전용 벡터 데이터베이스로 복사하고 두 서비스 사이의 동기화 파이프라인을 계속 유지해야 했습니다. 여기에는 운영 부담, 데이터 이동 비용, 라이선스 비용이 따랐고, 규모가 커질 때 낮은 지연을 예측 가능하게 유지하는 문제도 있었습니다.
벡터 검색이 DynamoDB 안으로 들어오면서 벡터와 운영 데이터가 같은 서버리스 인프라, 그리고 같은 요청당 과금 모델을 공유합니다. 별도의 데이터베이스를 프로비저닝하거나 동기화 파이프라인을 관리할 필요 없이 유사도 검색을 추가할 수 있습니다.
동작 방식
벡터 검색은 임베딩을 저장하는 속성 위에 만드는 새로운 인덱스 유형을 도입합니다. 임베딩 생성 모델은 직접 고를 수 있습니다. Amazon Bedrock Titan Text Embeddings, Cohere Embed, OpenAI 텍스트 임베딩 모델 등을 사용해 임베딩을 만들고, 이를 float 리스트 형태로 PutItem 호출을 통해 테이블에 저장합니다.
DynamoDB는 기존 List 데이터 타입으로 벡터 임베딩을 저장합니다. 리스트의 각 요소는 임베딩 벡터의 float 값 하나를 나타내는 Number입니다. 새 데이터 타입이나 스키마 변경 없이 기존 운영 속성 옆에 벡터를 저장할 수 있습니다.
임베딩을 저장한 속성 위에 벡터 인덱스를 만들 때는 차원 수, 거리 함수, 그리고 쿼리 시점에 결과를 좁히는 데 쓸 비벡터 속성(필터 속성)을 지정합니다. 검색은 SearchVectors API로 수행하며, 쿼리 벡터와 반환할 결과 개수(최대 100개), 그리고 선택적인 필터 조건을 받습니다. 결과는 유사도 순으로 정렬되어 돌아옵니다.
지원하는 사양은 다음과 같습니다.
- 최대 4096 차원
- 거리 함수: Euclidean, Cosine, Dot product
- 인라인 필터링
- 반환 결과 최대 100개
거리 함수 선택은 용도에 따라 다릅니다. Cosine은 벡터의 크기가 아니라 각도를 측정하기 때문에 텍스트 임베딩의 의미적 유사도 비교에 효과적입니다. Euclidean은 구매 횟수 같은 수치로 항목을 클러스터링할 때처럼 벡터의 크기 자체가 의미를 가질 때 씁니다. Dot product는 관심 정렬과 빈도를 함께 가중하는 추천 시스템처럼 방향과 크기가 모두 중요할 때 적합합니다. 일반적으로는 임베딩 모델을 학습시킬 때 사용한 거리 함수와 맞추는 편이 정확도에 유리합니다.
대상 워크로드
DynamoDB의 벡터 검색은 에이전트 메모리, 검색 증강 생성(RAG), 추천 엔진, 개인화 경험, 이상 탐지처럼 의미 기반 검색이 필요한 애플리케이션을 대상으로 합니다. 운영 데이터가 이미 DynamoDB에 있고 별도 데이터베이스 프로비저닝이나 동기화 파이프라인 관리 없이 유사도 검색을 붙이고 싶을 때가 적합한 상황입니다.
콘솔에서 붙여 보는 흐름
온라인 스포츠용품 상점의 상품 카탈로그 테이블을 예로 들면, 각 항목에는 productId, category, description, marketplace, name, price 같은 표준 운영 속성이 들어 있습니다. 여기에 자연어 질의로 상품을 찾는 의미 기반 검색을 추가하는 과정입니다.
먼저 테이블에 이미 들어 있는 상품 설명에 대해 임베딩을 생성합니다. Bedrock Titan Text Embeddings 같은 모델로 임베딩을 만든 뒤, ProductCatalog 테이블의 각 항목에 descriptionEmbedding이라는 새 속성으로 UpdateItem 호출을 통해 추가합니다. 임베딩은 콘솔, AWS CLI, SDK, CloudFormation 등 IaC 도구로도 넣을 수 있습니다.
다음으로 콘솔의 Indexes 탭에서 Create vector index를 선택합니다. 인덱스 이름과 벡터 속성(descriptionEmbedding)을 지정하고, 임베딩 모델 출력에 맞는 차원 수를 입력한 뒤 거리 함수로 Cosine을 선택합니다.
파티션 키로는 marketplace를 지정할 수 있습니다. 벡터 인덱스 파티션 키는 DynamoDB가 벡터를 파티션에 어떻게 분산할지를 제어하며, 이를 통해 인덱스가 확장되면서도 지연을 예측 가능하게 유지합니다. 각 검색은 하나의 파티션 키 값 범위로 한정되므로, 여러 마켓플레이스를 서비스하는 상품 카탈로그라도 인덱스 전체를 훑지 않고 한 마켓플레이스 재고 안에서만 검색합니다. 파티션 키는 선택 사항이지만, 대규모 데이터셋과 높은 쿼리 처리량에서는 지정을 권장합니다.
인라인 필터 속성으로 category를 추가하면 쿼리 시점에 특정 상품 범주로 결과를 좁힐 수 있습니다. 필터 조건은 정확히 일치하는 값만 지원하며, BETWEEN이나 BEGINS_WITH 같은 범위 조건은 지원하지 않습니다. 속성 프로젝션을 All로 두면 검색 결과와 함께 모든 테이블 속성이 반환됩니다. 인덱스를 생성한 뒤에는 상태가 Active로 바뀔 때까지 기다립니다.
검색을 실행할 때는 상품 설명에 사용한 것과 같은 임베딩 모델로 자연어 검색어에서 쿼리 벡터를 생성합니다. 콘솔의 Explore items에서 테이블을 선택하고 Search로 벡터 검색 모드로 전환한 뒤, 인덱스를 고르고 쿼리 벡터를 붙여 넣습니다. 반환 개수(Top K)를 설정하고, 파티션 키 값으로 검색 범위를 특정 마켓플레이스로 한정하며, 인라인 필터로 category를 특정 값과 일치하도록 지정할 수 있습니다.
DynamoDB는 지정한 범주 안에서 의미적으로 가장 유사한 상품들을 유사도 점수 순으로 반환하며, name과 price 같은 표준 운영 속성을 같은 응답에 함께 담아 돌려줍니다. 유사도 점수의 의미는 인덱스에 선택한 거리 함수에 따라 달라집니다. Cosine과 Euclidean에서는 점수가 낮을수록 유사도가 높고, 0이면 벡터가 동일함을 뜻합니다. Dot product에서는 점수가 높을수록 유사도가 높습니다.
도입 전 확인할 사실
벡터 검색은 AWS GovCloud (US) 리전을 포함한 모든 상용 AWS 리전에서 정식 사용 가능합니다. 리전별 가용성과 향후 로드맵은 AWS Capabilities by Region에서 확인할 수 있습니다. 요금은 DynamoDB의 요청당 과금 모델을 따르며, 세부 사항은 Amazon DynamoDB 요금 페이지에서 확인할 수 있습니다.
기능상 제약으로는 반환 결과가 검색당 최대 100개, 차원은 최대 4096이라는 점, 그리고 인라인 필터가 정확 일치 조건만 지원하고 범위 조건은 지원하지 않는다는 점을 미리 염두에 둘 필요가 있습니다.
API 호출과 문서 검색을 프로그래밍 방식으로 다루려면 AWS MCP Server와 플러그인을 선호하는 AI 코딩 도구와 함께 사용할 수 있습니다. 더 자세한 내용은 Amazon DynamoDB Developer Guide에서 확인할 수 있습니다.
원문: Amazon DynamoDB now supports real-time vector search at any scale · 발행일 2026-08-05