LLM WikiAccess-protected knowledge portal

WIKI

AlloyDB 2026: BM25 전문 검색·ScaNN 벡터·AI SQL·레이크하우스 페더레이션으로 PostgreSQL에서 하이브리드 데이터 플랫폼을 구성하는 방법

요약 출처 Google Cloud Next '26 2026 04 22 ~ 24, 약 110일 전 및 2026년 7 8월 공식 블로그 발표 — 180일 패스백 창 내 핵심 변화 AlloyDB가 PostgreSQL 호환 OLTP를 유지하면서 전문 검색 BM25 , 근사 벡터 ScaNN , 생성 AI SQL 함수, Lakehouse Federation을 단일 데이터 평면에 통합 실무 관련성 RAG 파이프라인이나 하이브리드 검색이 필

경로human/study/content/database-frontier/98-alloydb-hybrid-search-bm25-scann-ai-sql-lakehouse-federation.md
카테고리Study
태그#bm25 #federation #infra #lakehouse #mysql #scann #sql #study

요약


AlloyDB는 Google의 PostgreSQL 호환 관리형 데이터베이스다. 2022년 출시 당시의 핵심 가치는 컬럼 엔진 내장과 스토리지/컴퓨트 분리였다. 2025년에 벡터 검색(HNSW + ScaNN 프리뷰)이 추가되면서 임베딩 저장소로 주목받기 시작했고, 2026년 상반기에 BM25 전문 검색·AI SQL 함수·Lakehouse Federation이 한꺼번에 공개됐다.

이 챕터는 각 기능이 실제로 무엇을 하는지, 기존 아키텍처에서 무엇을 대체할 수 있는지, 그리고 어디서 아직 외부 시스템이 필요한지를 구체적으로 정리한다.


2026년 AlloyDB 기능 지도

영역기능상태90일 내
전문 검색BM25 (pg\_textsearch)Preview
벡터 검색ScaNN 인덱스Preview△ (Next '26)
AI SQLanalyze\_sentiment, summarize, if, rank, generate, forecastPreview
레이크하우스BigQuery 연합 쿼리GA
레이크하우스Apache Iceberg 연합 쿼리Preview
컬럼 엔진HNSW + 컬럼 결합 4×GA
기반PostgreSQL 18 GAGA
AI 운영Database Insights MCP 서버GA

△ = Google Cloud Next '26 발표(~110일 전), 180일 패스백 창 내


BM25 전문 검색: pg\_textsearch

PostgreSQL은 오래전부터 tsvector/tsquery 기반 GIN 인덱스로 전문 검색을 지원했다. 기본 랭킹 함수 ts_rank는 TF(단어 빈도)만 고려하며 IDF(역문서 빈도) 가중치를 통계적으로 계산하지 않는다. 텍스트 코퍼스가 크거나 희귀 용어 매칭이 중요한 검색에서 정확도가 떨어지는 이유다.

AlloyDB의 pg_textsearch 확장은 BM25(Best Matching 25) 알고리즘을 구현한다.

BM25 핵심 수식:

score(q, d) = Σ IDF(t) × (f(t,d) × (k1+1)) / (f(t,d) + k1 × (1 - b + b × |d|/avgdl))

PostgreSQL 내장 ts_rank와 달리 문서 총 수, 단어별 역문서 빈도를 컬렉션 전체에서 사전 계산해 저장한다. AlloyDB는 이 통계 테이블을 컬럼 엔진에 올려 스캔을 가속한다.

-- 확장 활성화
CREATE EXTENSION IF NOT EXISTS pg_textsearch;

-- BM25 인덱스 생성
CREATE INDEX idx_products_bm25
  ON products
  USING bm25 (description tsv_description)
  WITH (text_column = 'description', language = 'korean');

-- BM25 랭킹 전문 검색
SELECT id, name,
       bm25_rank(tsv_description, to_tsquery('korean', '벡터 검색')) AS score
FROM products
WHERE tsv_description @@ to_tsquery('korean', '벡터 검색')
ORDER BY score DESC
LIMIT 10;

한국어 토크나이저 지원 여부는 현재 Preview 단계에서 제한적이다. 영문 및 다국어 분석기 옵션이 주요 경로다.


하이브리드 검색: BM25 + ScaNN 결합

벡터 검색만 사용하면 "정확한 용어 매칭"에 약하다. 예를 들어 사용자가 GPT-4o라고 입력했을 때 임베딩 공간에서는 유사한 모델 이름이 가까워도 정확히 GPT-4o를 포함한 문서를 상위에 올리는 데 실패할 수 있다. BM25는 이런 정확 매칭에 강하지만 의미적 유사성은 반영하지 못한다. 둘을 결합하면 두 약점을 상호 보완할 수 있다.

-- BM25 결과와 ScaNN 벡터 결과를 RRF로 결합
WITH bm25_results AS (
  SELECT id,
         ROW_NUMBER() OVER (ORDER BY bm25_rank(content_tsv, query) DESC) AS rk
  FROM articles,
       to_tsquery('english', 'vector search database') query
  WHERE content_tsv @@ query
  LIMIT 100
),
vector_results AS (
  SELECT id,
         ROW_NUMBER() OVER (ORDER BY embedding <=> $1::vector) AS rk
  FROM articles
  ORDER BY embedding <=> $1::vector
  LIMIT 100
)
SELECT COALESCE(b.id, v.id) AS id,
       1.0/(60 + COALESCE(b.rk, 100)) + 1.0/(60 + COALESCE(v.rk, 100)) AS rrf_score
FROM bm25_results b
FULL OUTER JOIN vector_results v ON b.id = v.id
ORDER BY rrf_score DESC
LIMIT 20;

RRF(Reciprocal Rank Fusion) 공식: score = Σ 1/(k + rank_i) (k=60이 일반적 기본값)

AlloyDB가 두 인덱스를 모두 관리하므로 Elasticsearch나 Pinecone 같은 별도 인덱스 서버 없이 단일 psql 연결로 처리된다.

쿼리 입력
사용자 텍스트 쿼리
↓ 병렬 실행
전문 검색 경로
BM25 (pg_textsearch)
GIN 인덱스 스캔
TF-IDF 통계
(컬럼 엔진 보조)
Top-K 결과 + 순위
벡터 검색 경로
ScaNN 인덱스 스캔
(10B 벡터 지원)
임베딩 유사도
ANN 계산
Top-K 결과 + 순위
↓ RRF 융합 (k=60)
최종 출력
통합 순위 결과
단일 SQL 쿼리
하이브리드 검색 쿼리 흐름

ScaNN 인덱스: 10B 벡터 규모

AlloyDB는 원래 pgvector 호환 HNSW 인덱스를 지원했다. HNSW는 소~중간 규모(수천만 건)에서 잘 동작하지만, 빌드 메모리와 삽입 비용이 높아 수십억 건 규모에서 한계가 있다.

ScaNN(Scalable Approximate Nearest Neighbors)은 Google Research가 개발한 ANN 알고리즘으로, 양자화와 비등방성 벡터 양자화(AVQ)를 결합해 높은 재현율을 유지하면서 메모리를 줄인다.

AlloyDB에서의 공개 수치 (Next '26 기준, 정확한 벤치마크 설정은 Needs confirmation):

-- ScaNN 인덱스 생성
CREATE INDEX idx_embeddings_scann
  ON documents
  USING scann (embedding vector_cosine_ops)
  WITH (num_leaves = 1000, num_leaves_to_search = 100);

-- ScaNN 벡터 검색
SELECT id, title, embedding <=> $1::vector AS distance
FROM documents
ORDER BY embedding <=> $1::vector
LIMIT 10;

HNSW와 ScaNN 중 선택 기준:

기준HNSWScaNN
벡터 수< 5천만> 5천만
빌드 속도느림빠름
쿼리 지연 P99낮음낮음
메모리높음낮음 (양자화)
재현율 조정어려움num\_leaves\_to\_search로 세밀 조정

AI SQL 함수

AlloyDB AI는 BigQuery ML 접근 방식을 PostgreSQL 위에 올린 것으로 이해할 수 있다. Vertex AI 모델(Gemini 포함)을 SQL 함수 형태로 직접 호출한다.

현재 Preview 단계 함수:

-- 감성 분석
SELECT id, review_text,
       ai.analyze_sentiment(review_text) AS sentiment
FROM product_reviews;
-- 반환: {"score": 0.85, "magnitude": 0.9, "label": "positive"}

-- 텍스트 요약
SELECT id, article,
       ai.summarize(article, max_output_tokens => 100) AS summary
FROM news_articles;

-- 조건부 판단 (자연어 기반 필터)
SELECT * FROM support_tickets
WHERE ai.if(description, 'Is this a billing issue?');

-- 자연어 랭킹
SELECT id, content,
       ai.rank(content, 'Most relevant to database migration risks') AS relevance
FROM documents
ORDER BY relevance DESC LIMIT 5;

-- 텍스트 생성
SELECT id, product_name,
       ai.generate(
         prompt => 'Write a 50-word product description for: ' || product_name,
         model => 'gemini-2.0-flash'
       ) AS description
FROM products WHERE description IS NULL;

-- 수요 예측 (시계열 데이터)
SELECT ai.forecast(
  table => 'daily_sales',
  time_column => 'date',
  target_column => 'revenue',
  horizon => 30
);

각 함수는 내부적으로 Vertex AI API를 호출하며, AlloyDB 네트워크 내에서 Private Service Connect를 통해 처리된다. 비용은 Vertex AI 호출 건수로 청구된다.

실무 한계:


Lakehouse Federation

AlloyDB (PostgreSQL 데이터 평면) PostgreSQL 18 쿼리 엔진 SQL, 트랜잭션, MVCC 컬럼 엔진 OLAP 스캔 200× / ScaNN + BM25 AI SQL 레이어 analyze_sentiment / summarize / generate Federation 커넥터 BigQuery (GA) · Iceberg (Preview) BigQuery 분석 데이터 레이크 (GA) Apache Iceberg 오픈 테이블 포맷 (Preview) AlloyDB OLTP 로컬 행 데이터 데이터 이동 없음 Federation 경계 쿼리 푸시다운
AlloyDB Lakehouse Federation 아키텍처

Federation은 AlloyDB의 PostgreSQL 쿼리 플래너가 외부 소스에 쿼리 일부를 위임(push down)하는 방식으로 동작한다. 데이터를 AlloyDB로 복사하지 않는다.

-- BigQuery 외부 테이블 연결 (GA)
CREATE EXTERNAL TABLE ext_bq_events
  WITH COLUMN DEFINITION USING FOREIGN SERVER alloydb_bq_server
  SERVER OPTIONS (
    project = 'my-gcp-project',
    dataset = 'analytics',
    table = 'user_events'
  );

-- AlloyDB OLTP + BigQuery 데이터 조인
SELECT u.name, COUNT(e.event_id) AS event_count
FROM users u                          -- AlloyDB 로컬 테이블
JOIN ext_bq_events e ON u.id = e.user_id  -- BigQuery 외부 테이블
WHERE e.event_date >= '2026-01-01'
GROUP BY u.name
ORDER BY event_count DESC;

Apache Iceberg 연합은 Cloud Storage의 Iceberg 테이블에 대해 동일한 방식으로 동작한다. CREATE EXTERNAL TABLE ... USING iceberg 구문을 사용한다.

실제 제약:


PostgreSQL 18 GA

AlloyDB는 2026년 상반기에 PostgreSQL 18을 GA로 지원했다.

PostgreSQL 18 주요 변화 중 AlloyDB 운영에 직접 영향을 주는 것:


Database Insights MCP 서버

AlloyDB는 Claude·ChatGPT 등 LLM 클라이언트가 데이터베이스 운영 정보에 접근할 수 있도록 Remote MCP(Model Context Protocol) 서버를 제공한다.

지원 기능:

# Claude Desktop에서 AlloyDB MCP 서버 연결 (settings.json)
{
  "mcpServers": {
    "alloydb-insights": {
      "command": "npx",
      "args": ["-y", "@google-cloud/alloydb-mcp-server"],
      "env": {
        "ALLOYDB_PROJECT": "my-project",
        "ALLOYDB_INSTANCE": "my-instance",
        "ALLOYDB_DATABASE": "mydb"
      }
    }
  }
}

이 서버를 통해 LLM 에이전트가 "가장 느린 쿼리 5개를 분석하고 인덱스를 추천해 줘"라고 자연어로 요청하면 Database Insights API를 조회해 구체적 SQL을 반환한다.

주의: MCP 서버는 AlloyDB 읽기 권한이 있는 서비스 계정으로 동작한다. 쓰기 권한이나 DDL 실행 권한을 부여하면 LLM이 직접 스키마를 변경할 수 있으므로 최소 권한 원칙을 반드시 적용해야 한다.


도입 검토 기준

현재 상황 진단
이미 AlloyDB(또는 PostgreSQL)를
OLTP로 사용 중인가?
↓ Yes / No
Yes → 통합 검토
벡터 수 < 5천만?
→ HNSW 유지
벡터 수 > 5천만?
→ ScaNN Preview 평가
전문 검색이 필요한가?
→ BM25 Preview 평가
Elasticsearch 제거
가능성 있음
No → 신규 도입 판단
GCP 기반인가?
→ AlloyDB 고려
멀티클라우드 / 온프레미스?
→ PgVector + pgBM25 고려
10B 벡터 규모?
→ Pinecone/Weaviate와 비교 필수
운영 단순화 vs
성능/비용 트레이드오프 확인
AlloyDB vs 외부 특화 시스템 결정 트리

AlloyDB 통합이 유리한 경우:

AlloyDB 통합이 부적합한 경우:


요점 정리


References