Experience/LG CNS AM Inspire Camp 1기

[LG CNS AM Inspire Camp] 20. Spring도 AI 쓴다. Spring AI

chillmyh 2025. 5. 14. 00:54

1. 들어가며.. Spring AI는 무엇인가

최근 ChatGPT를 비롯한 생성형 AI의 발전과 함께, 개발자들은 자바 애플리케이션 안에서도 이러한 기술을 쉽게 통합하고 싶어 하는 니즈가 커지고 있다. 하지만 LLM API를 직접 다루는 것은 번거롭고, Java와 친화적인 추상화 계층이 없다는 점에서 진입 장벽이 존재했다. 바로 이런 문제를 해결하기 위해 등장한 것이 Spring AI다.

 Spring AI는 스프링 생태계에 LLM을 쉽게 연동할 수 있게 해주는 실험적인 프로젝트로, OpenAI, Azure OpenAI, Hugging Face같은 다양한 LLM 제공자들을 손쉽게 바꿔가며 사용할 수 있게 해준다. 뿐만 아니라, 프롬프트 템플릿, 벡트 기반 검색, RAG 패턴 구성 등 실제 AI 활용에 필요한 대부분의 기능들을 내장하고 있다는 점이 특징이다.

 이번 Spring AI는 전부터 관심이 많았었고 미니 프로젝트 1에 AI 활용 부분에 활용하면서 사용했었다. 한참 시간이 지났지만 뒤늦게 정리해본다.

 

2. Spring AI의 주요 구성 요소

2.1 PromptTemplate

프롬프트는 LLM의 응답 품질을 결정짓는 핵심이다. Spring AI는 이를 PromtTemplate 이라는 형태로 추상화해서 관리할 수 있게 한다. 변수 삽입, 시스템 메시지 설정 등도 이 템플릿 안에서 쉽게 구성할 수 있어서, 비즈니스 로직과 프롬프트 로직을 깔끔하게 분리할 수 있다.

2.2 ChatClient, EmbeddingClient

ChatClient는 사용자의 질문을 LLM에게 전달하고 결과를 받아오는 역할을 담당한다. 예를 들어 OpenAI를 사용할 경우, GPT 모델에게 질문을 보내고 답변을 받아오는 과정을 한 줄 코드로 처리할 수 있다. EmbeddingClient는 텍스트를 벡터화해서 유사도 검색 등에 활용할 수 있게 해주는 컴포넌트다.

2.3 Vector Store & RAG 지원

Spring AI는 자체적으로 VectorStore 인터페이스를 제공하고 있다. 여기에 Chroma, Redis, PostgreSQL 등 여러 스토리지를 플러그인처럼 붙여서 사용할 수 있다. 이를 기반으로 문서 검색 기반 응답 시스템(RAG, Retrieval-Augmented Generation)도 쉽게 구현할 수 있게 된다.

 

3. Spring AI 실습 간단 예제

Spring AI를 사용해 실제 애플리케이션에서 OpenAI와 통신하는 예제를 살펴보자.

3.1 프로젝트 생성 및 의존성 추가

Spring Initializr에서 Spring AI, Spring Web, Spring Boot 의존성을 포함한 프로젝트를 생성한다.

build.gradle 또는 pom.xml에는 spring-ai-openai-spring-boot-starter 의존성이 필요하다.

 

참고로 Spring AI 는 아직 정식출시 전 상태 이므로, 사용할때는 Spring Boot 버전과 Spring AI 버전 호환성을 주의하도록 하자.

현재는 spring boot 3.4.x 버전 에서만 호환되고 있다.

 

자세한 내용은 아래 공식문서를 참고하자

https://docs.spring.io/spring-ai/reference/getting-started.html

 

Getting Started :: Spring AI Reference

The Spring AI Bill of Materials (BOM) declares the recommended versions of all the dependencies used by a given release of Spring AI. This is a BOM-only version and it just contains dependency management and no plugin declarations or direct references to S

docs.spring.io

 

3.2 설정 파일 구성

spring:
  ai:
    openai:
      api-key: ${OPENAI_API_KEY}
      chat:
        model: gpt-3.5-turbo

 

3.3 ChatClient 사용 예시

@Autowired
private OpenAiChatClient chatClient;

public String ask(String question) {
    ChatResponse response = chatClient.call(
        new ChatRequest(List.of(new Message(Role.USER, question)))
    );
    return response.getResult().getOutput().getContent();
}

 

이렇게 몇 줄 코드만으로도 사용자의 질문을 받아 ChatGPT 모델로부터 응답을 받아오는 기능을 구현할 수 있다.

 

restTemplate 방식을 사용하던거에 비교하면 코드가 엄청 짧아진다.

 

4. RAG 구성 : 문서 기반 질문 응답 구현하기

Spring AI는 벡터 저장소를 활용한 문서 검색 기반 LLM 응답 시스템, 즉 RAG(Retrieval-Augmented Generation)를 비교적 쉽게 구성할 수 있게 해준다.

4.1 텍스트 임베딩

먼저 EmbeddingClient를 사용해서 문서를 벡터로 변환한다.

EmbeddingRequest request = new EmbeddingRequest(List.of("Spring AI는 무엇인가?"));
EmbeddingResponse response = embeddingClient.call(request);

4.2 VectorStore에 저장하고 유사 검색

vectorStore.accept(new Document("RAG는 검색 기반 생성 시스템입니다."));
List<SearchResult> results = vectorStore.similaritySearch("검색 기반 생성이란?");

 

이렇게 하면, 사용자의 질문과 가장 유사한 문서나 내용을 찾아서, LLM에게 전달할 컨텍스트로 사용할 수 있다.

 

5. 고려해야할 점과 한계

Spring AI는 아직 베타버전 프로젝트로, 빠르게 발전 중이다. 버전 간 변경 폭이 크고, 아직 공식 문서나 레퍼런스가 부족하다는 점은 염두에 두고 시작하는 게 좋다. 또한 OpenAI 같은 외부 API를 사용하는 경우, 비용이나 응답 속도, 개인정보 보호 등 다양한 이슈를 고려해야 한다.

또한, LLM 기반 코드를 테스트하는 것이 어렵다는 문제도 존재한다. 동일한 질문에 대해 매번 다른 응답이 나올 수 있기 때문에, 단순한 JUnit 테스트로는 품질을 보장하기가 쉽지 않다는 것이다.

 

6. 마무리

Spring AI는 Java/Spring 개발자에게 있어 LLM 기술을 빠르게 테스트하고, 기존 애플리케이션에 녹여낼 수 있는 훌륭한 도구다. Prompt 관리, VectorStore 통합, ChatClient 추상화 등은 실제로 개발과 운영에서 많은 편의성을 제공해준다.

초기 학습이 필요한 부분도 분명히 있지만, Java 생태계 내에서 생성형 AI를 활용하고자 한다면 Spring AI는 앞으로 매우 중요한 도구가 될 수 있을 것이다.