JSCODE Logo
블로그후기멘토진
회사명 : JSCODE대표 : 박재성사업자 등록번호 : 244-22-01557통신판매업 : 제 2023-인천미추홀-0381 호
학원 명칭 : 제이에스코드(JSCODE)원격학원학원설립ㆍ운영 등록번호 : 제6063호

서울특별시 구로구 경인로 20가길 11(오류동, 아델리아)

Copyright ⓒ 2025 JSCODE - 최상위 현업 개발자들의 프로그래밍 교육 All rights reserved.

이용약관개인정보처리방침
← 블로그 목록으로 돌아가기

[실습] ElasticSearch 기반 VectorStore로 변경하기

JSCODE 시니
JSCODE 시니
2026. 06. 13.
author
JSCODE 시니
category
Spring AI
createdAt
Jun 13, 2026 09:53 AM
isPublic
isPublic
series
실무에 바로 적용하는 Spring AI: Spring 서비스에 챗봇·RAG·MCP 도입하기
slug
practice-switching-vector-store-to-elasticsearch
type
post
updatedAt

✅ 1. application.yaml 수정

app: rag: documents-location-pattern: classpath:spring-ai-llm.pdf etl: pipeline: init: true cli: # enabled: true vectorstore: in-memory: enabled: false
 
 
 

✅ 2. Docker를 이용한 ElasticSearch 설치

docker run -d -p 9200:9200 \ --name elasticsearch \ -e "discovery.type=single-node" \ -e "xpack.security.enabled=false" \ -e "xpack.security.http.ssl.enabled=false" \ docker.elastic.co/elasticsearch/elasticsearch:9.2.0
💁‍♀️
반드시 도커 설치 및 실행 후 진행해주세요!
 
 
 

✅ 3. 의존성 추가

implementation 'org.springframework.ai:spring-ai-starter-vector-store-elasticsearch'
 
 
 

✅ 4. ES 관련 application.yaml 설정 변경

spring: # ========================================== # [1] 애플리케이션 및 인프라 기본 설정 # ========================================== application: name: chat # 서비스 애플리케이션 이름 elasticsearch: uris: http://localhost:9200 # 로컬 도커로 띄운 상용 엘라스틱서치 서버 주소 # ========================================== # [2] Spring AI 핵심 모듈 설정 # ========================================== ai: # (A) OpenAI 및 외부 API 모델 연동 openai: api-key: ${OPENAI_API_KEY} # 시스템 환경변수에서 API 키를 동적으로 주입 chat: model: openai/gpt-4.1-nano # 사용할 LLM 모델명 base-url: https://models.github.ai/inference # GitHub Models 프록시 서버 주소 completions-path: /chat/completions # 엔드포인트 세부 경로 # (B) Ollama 로컬 오픈소스 AI 연동 ollama: init: pull-model-strategy: when_missing # 로컬에 모델이 없을 때만 자동으로 다운로드(Pull) chat: model: hf.co/Qwen/Qwen2.5-1.5B-Instruct-GGUF # 로컬 챗봇용 경량 모델 embedding: options: model: bge-m3 # 한국어 성능이 뛰어난 로컬 임베딩 번역기 모델 지정 # (C) 상용 백터 데이터베이스(Elasticsearch) 연동 vectorstore: elasticsearch: initialize-schema: true # 서버 구동 시 해당 인덱스가 없으면 자동으로 생성 index-name: spring-ai-document-index # 벡터 데이터가 저장될 엘라스틱서치 인덱스 이름 dimensions: 1024 # bge-m3 모델의 고유 출력 벡터 차원 수 지정 (필수) similarity: cosine # 벡터 간의 거리(유사도)를 계산할 수학 공식 (코사인 유사도) # ========================================== # [3] 디버깅 및 로그 레벨 설정 # ========================================== logging: level: org.springframework.ai.chat.client.advisor: DEBUG # RAG Advisor가 프롬프트를 조립하는 과정을 콘솔에 상세히 출력 # ========================================== # [4] 비즈니스 로직 및 기능 토글(스위치) 설정 # ========================================== app: # RAG 지식 베이스 파일 경로 rag: documents-location-pattern: classpath:spring-ai-llm.pdf # 일회성 데이터 수집/가공/적재 파이프라인 etl: pipeline: init: true # true: 서버 시작 시 PDF를 읽어 엘라스틱서치에 적재 / false: 가동 중지 # 대화형 커맨드 라인 인터페이스(CLI) 활성화 여부 cli: enabled: true # 사용 시 주석을 풀고 true로 변경 (자바 코드 @ConditionalOnProperty와 연동) # 기존 인메모리 벡터스토어 사용 안 함 설정 vectorstore: in-memory: enabled: false # 엘라스틱서치를 사용하므로 기존 가짜 메모리 저장소는 비활성화
 
 
 

✅ 5. 테스트

notion image