LLM WikiAccess-protected knowledge portal

WIKI

OpenSearch 3.8: MCP 통합·4.16배 빠른 벡터 수집·gRPC 스트리밍으로 AI 검색 플랫폼 운영 기준을 새로 쓴 릴리스

요약 OpenSearch 3.8은 AI 에이전트 시대의 검색 플랫폼 요구사항을 반영한 릴리스다. 핵심 변화는 세 방향이다. 첫째, 벡터 수집 속도 4.16배 향상 과 Base64 인코딩으로 벡터 데이터 파이프라인의 처리량과 전송 효율을 동시에 개선했다. 둘째, MCP Model Context Protocol 통합 으로 AI 에이전트가 OpenSearch를 도구로 직접 쓸 수 있는 경로를 열었다. 셋째, gRPC 기반 스트리밍

경로human/study/content/database-frontier/85-opensearch-3-8-vector-ingestion-mcp-grpc-observability.md
카테고리Study
태그#grpc #ingestion #mcp #monitoring #mysql #observability #study #vector

요약

OpenSearch 3.8은 AI 에이전트 시대의 검색 플랫폼 요구사항을 반영한 릴리스다. 핵심 변화는 세 방향이다. 첫째, 벡터 수집 속도 4.16배 향상과 Base64 인코딩으로 벡터 데이터 파이프라인의 처리량과 전송 효율을 동시에 개선했다. 둘째, MCP(Model Context Protocol) 통합으로 AI 에이전트가 OpenSearch를 도구로 직접 쓸 수 있는 경로를 열었다. 셋째, gRPC 기반 스트리밍 ML 예측으로 외부 모델 서버와의 실시간 연동을 표준화했다. 개발자 경험 측면에서는 시각적 PPL 쿼리 빌더, Grok 디버거, 자동화 검색 관련도 평가 기능이 추가됐다.


벡터 수집: 4.16배 빠르게, 전송은 4분의 1로

병목의 원인

OpenSearch에서 벡터를 색인할 때 JSON 배열 표현 방식([0.123, 0.456, ...])은 두 가지 문제를 낳는다. 하나는 파싱 오버헤드다. 수백 개의 부동소수점 값을 문자열에서 파싱하는 비용이 벡터 수가 늘수록 선형으로 증가한다. 다른 하나는 전송 크기다. 768차원 벡터를 JSON 배열로 표현하면 약 16 KB이지만, Base64로 인코딩된 Float32 바이너리는 약 4 KB다.

Base64 벡터 인코딩

3.8에서 지원하는 새 인코딩 방식은 Float32 배열을 바이너리로 직렬화한 뒤 Base64 문자열로 보내는 것이다.

{
  "my_vector": "AAAAAAAASEA...base64..."
}

매핑에서 "knn_vector" 타입 필드에 "data_type": "float" 설정만 추가하면 된다. 기존 JSON 배열 방식과 하위 호환되므로 클라이언트를 점진적으로 마이그레이션할 수 있다.

측정 결과 (768차원, 100만 벡터)

방식색인 처리량요청당 크기
JSON 배열 (기존)기준약 16 KB
Base64 인코딩 (3.8)4.16배약 4 KB

내부 파싱 경로 변경

JSON 배열을 파싱할 때는 Jackson 파서가 각 토큰을 개별 처리한다. Base64 경로에서는 단일 문자열을 Java Base64.getDecoder().decode()로 처리한 뒤 ByteBuffer로 Float32 배열을 직접 읽는다. 파서 분기 횟수가 벡터 차원 수에서 상수 1로 줄어드는 것이 속도 향상의 핵심이다.

OpenSearch 3.8 핵심 기능 구조 OpenSearch 3.8 클러스터 코어 벡터 수집 (색인) Base64 Float32 4.16× 처리량 ↑ MCP 서버 AI 에이전트 → 검색 도구 자연어 쿼리 변환 gRPC ML 예측 스트리밍 추론 서버 실시간 임베딩/리랭킹 Radial 검색 개선 반지름 기반 ANN 정밀도·속도 균형 조정 개발자 도구 • 시각적 PPL 쿼리 빌더 • Grok 디버거 (Dev Tools) • 자동화 검색 관련도 평가
OpenSearch 3.8 주요 기능 아키텍처

MCP 통합: AI 에이전트의 검색 도구화

MCP란

MCP(Model Context Protocol)는 Anthropic이 주도하는 오픈 프로토콜로, LLM 에이전트가 외부 도구·데이터 소스와 표준화된 방식으로 통신할 수 있게 한다. Claude, Cursor, Zed 같은 AI 클라이언트가 MCP 서버에 연결해 도구를 호출한다.

OpenSearch MCP 서버

3.8은 OpenSearch를 MCP 서버로 노출하는 내장 플러그인을 제공한다. 에이전트는 다음과 같은 도구를 호출할 수 있다.

에이전트가 "최근 7일 에러 로그에서 timeout 패턴 찾아줘"라고 요청하면 MCP 서버가 OpenSearch DSL로 변환해 실행하고 결과를 구조화된 형태로 반환한다. 쿼리 변환 로직은 연결된 LLM이 담당하므로 OpenSearch 측 변경은 없다.

운영 관점

MCP 통합의 실제 가치는 온콜 자동화다. 알림 발생 시 AI 에이전트가 OpenSearch에서 관련 로그를 직접 조회·분석해 요약을 생성한다. 이전에는 사람이 Kibana/OpenSearch Dashboards를 열어 쿼리를 작성해야 했다.

보안 고려사항: MCP 서버는 연결된 에이전트에게 OpenSearch 클러스터 접근 권한을 위임한다. 프로덕션에서는 읽기 전용 역할 전용 MCP 엔드포인트를 분리하고, TLS 인증서 기반 클라이언트 인증을 강제해야 한다.


gRPC 스트리밍 ML 예측

기존 HTTP 방식의 한계

OpenSearch의 Neural Search 플러그인은 외부 ML 모델 서버(예: Hugging Face Text Embeddings Inference, NVIDIA Triton)에서 임베딩을 받아 벡터 검색을 수행한다. 기존 HTTP REST 방식에서는 요청마다 새 연결을 맺거나 유지하더라도 응답이 완전히 도착해야 처리를 시작할 수 있다.

gRPC 스트리밍의 장점

3.8은 ML 모델 서버와의 통신에 gRPC 양방향 스트리밍을 지원한다.

항목HTTP RESTgRPC 스트리밍
프로토콜 오버헤드JSON 직렬화Protobuf 바이너리
스트리밍 지원미지원 (단일 응답)지원 (토큰 스트리밍)
연결 재사용Keep-Alive (제한)HTTP/2 멀티플렉싱
리랭킹 통합추가 왕복 필요스트림 내 처리

실시간 재랭킹 파이프라인에서 검색 결과를 모델 서버로 스트리밍하고, 점수가 내려오는 즉시 정렬하는 흐름이 가능해진다.

설정 예시

# opensearch.yml
plugins.ml_commons.model_server:
  protocol: grpc
  endpoint: "ml-server:50051"
  tls:
    enabled: true
    certificate: "/etc/certs/client.crt"
    key: "/etc/certs/client.key"

Radial 검색 개선

기존 k-NN 검색은 "가장 가까운 k개"를 반환한다. Radial 검색은 "거리 r 이내의 모든 결과"를 반환하는 방식으로, 결과 수가 가변적이다.

3.8에서 개선된 내용:

Radial 검색은 "이 상품과 유사한 상품을 모두 찾되, 너무 다른 건 포함하지 마라"와 같은 추천·중복 탐지 시나리오에 적합하다. 결과 수가 가변적이므로 페이지네이션 처리와 결과 수 상한 설정이 중요하다.


개발자 경험 개선

시각적 PPL 쿼리 빌더

PPL(Piped Processing Language)은 index | where status = 'error' | stats count() by host처럼 SQL 파이프라인 스타일로 OpenSearch 쿼리를 작성하는 언어다. 3.8 Dashboards에 GUI 빌더가 추가돼 DSL이나 PPL 문법을 몰라도 드래그앤드롭으로 쿼리를 구성할 수 있다.

생성된 PPL 코드가 실시간으로 패널 옆에 표시되므로 학습 도구로도 유용하다.

Grok 디버거

Logstash에서 익숙한 Grok 패턴(로그 파싱용 정규표현식 DSL)을 OpenSearch Dev Tools에서 직접 테스트할 수 있다. 파이프라인 배포 전 패턴을 검증하거나, 운영 중 파싱 실패 원인을 찾는 데 쓰인다.

패턴: %{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level} %{GREEDYDATA:message}
입력: 2026-08-07T14:23:01Z ERROR Connection refused
결과: { timestamp: "2026-08-07T14:23:01Z", level: "ERROR", message: "Connection refused" }

자동화 검색 관련도 평가

검색 품질을 측정하는 NDCG, MAP, Recall@K 지표를 Dashboards에서 직접 계산할 수 있는 평가 워크플로가 추가됐다. 평가 데이터셋(쿼리-관련 도큐먼트 쌍)을 업로드하면 현재 인덱스 설정에서 지표를 자동 산출한다.

이를 통해 쿼리 파라미터 변경이나 임베딩 모델 교체가 실제 검색 품질에 미치는 영향을 배포 전에 측정할 수 있다.


업그레이드 고려사항

3.7 → 3.8 주요 변경점

영역변경 내용조치
벡터 필드Base64 인코딩 옵션 추가기존 JSON 배열 방식 그대로 동작, 선택적 마이그레이션
gRPC 설정protocol: grpc 옵션기존 HTTP 설정 유지 시 변경 없음
MCP 플러그인신규 플러그인별도 설치 필요 (opensearch-mcp)
Dashboards PPL 빌더UI 변경기능 추가, 기존 워크플로 영향 없음

클러스터 롤링 업그레이드

OpenSearch 3.x 마이너 버전 간 롤링 업그레이드는 공식 지원된다. 3.7 → 3.8 경우:

  1. 데이터 노드부터 순차 업그레이드
  2. 코디네이터 노드 업그레이드
  3. 마스터 후보 노드 업그레이드 (리더십 전환 발생)

Base64 인코딩은 클라이언트 측에서 인코딩을 적용해야 하므로 클러스터 업그레이드와 클라이언트 업데이트를 독립적으로 진행할 수 있다.


요점 정리


References