Hyeok의 웹 개발 블로그

<2025.06.04> 임베딩 본문

TIL/Spring

<2025.06.04> 임베딩

Yhyeok 2025. 6. 4. 21:01

✅ 임베딩

  • 텍스트(문자)를 숫자 벡터로 변환하는 작업
  • 숫자로 변환된 벡터를 벡터 DB에 저장되어 나중에 유사한 질문 검색(RAG)등에 사용
  • OpenAI의 대표 임베딩 모델 → text-embedding-ada-002

✅ Spring OpenAI 임베딩

  • Spring AI는 OpenAI의 텍스트 입베딩 모델 지원
  • OpenAI의 텍스트 임베딩은 텍스트 문자열의 연관성을 측정
  • 임베딩은 부동 소수점 숫자로 구성된 벡터
  • 두 벡터 간의 거리로 연관성 측정 → 가까우면 연관성 높고, 멀면 연관성 낮다.

✅ 필수 조건

  • OpenAI 임베딩 모델에 엑세스 하려면 OpenAI로 API를 만들어야 한다.
  • OpenAI API 키 페이지 에서 토큰 생성
  • Spring AI 프로젝트는 openai.com 에서 얻은

spring.ai.openai.api-key값으로 설정해야 하는 구성 속성을 정의합니다.API Key

파일 에서 이 구성 속성을 설정할 수 있습니다

application.properties

spring.ai.openai.api-key=<your-openai-api-key>

API 키와 같은 민감한 정보를 처리할 때 보안을 강화하기위해 SPEL을 사용 하여 환경 변수 참조 가능

# In application.yml
spring:
  ai:
    openai:
      api-key: ${OPENAI_API_KEY}
# In your environment or .env file
export OPENAI_API_KEY=<your-openai-api-key>

또한 어플리케이션 코드에서 프로그래밍 방식으로 설정 할 수 있다.

// Retrieve API key from a secure source or environment variable
String apiKey = System.getenv("OPENAI_API_KEY");

 

✅ 자동 구성

  • Spring AI는 OpenAI 임베딩 모델에 대한 Spring Boot 자동 구성을 제공한다.
    • 프로젝트 Maven pom.xml 파일에 종속성 추가
    <dependency>
        <groupId>org.springframework.ai</groupId>
        <artifactId>spring-ai-starter-model-openai</artifactId>
    </dependency>
    
    • or Gradle build.gradle 파일에 추가
dependencies {
    implementation 'org.springframework.ai:spring-ai-starter-model-openai'
}

 

✅ 임베딩 API를 위한 주소 설정

  • OpenAI 임베딩 API는 별도의 주소를 설정 X
  • 기본적으로 https://api.openai.com/v1/embeddings 엔드포인트 사용, Spring AI에서는 이를 자동으로 처리 → 별도의 주소값을 가져오지 않아도 무관

 

- 다음으로 컨트롤러와 서비스를 구현하면 별도의 WebClient 구성 없이도 OpenAI 임베딩 API와 자동으로 연동

- 입력된 텍스트를 바로 벡터 (List<Double>)로 변환하여 사용가능

- 이후 벡터를 PgVector DB에 저장하면 RAG에 활용할 수 있다.