SpringAIJavaSpring AI

Spring AI란

·5 min read

4시간동안 RAG 작업하다가 말아먹어서 오늘은 간단한 주제로 이야기 해보고자 한다.

대 AI 시대 Java 개발자는 이대로 죽을 것인가.

Spring AI

난 원래 Spring 개발자다.

먹고살려고 이것저것 했지만 근본 중 하나는 Spring 이라고 생각한다.

AI 하면 파이썬 아닌가요?

기술에 단 한가지 정답만 있는건 아니다.

Docker 두고 Vmware 쓰는 곳 있듯이 각자 장단점과 상황이 있다고 생각한다.

그리고 자바 공화국에서 Spring에 전자정부프레임워크도 붙이는데 AI도 붙일 수 있지

개발 생산성 및 유지보수 비용을 생각한다면 내 기준으로는 굉장히 매력적인 선택지이다.

요즘 JAVA도 방향성을 많이 트는거 같은데 이참에 우리 SI 환경도 좀 변화가 생기면 좋겠다.

그래서 뭘 제공해주나요

당연하겠지만 추상화를 통한 여러 벤더 모델을 같은 코드로 접근 가능하다.

무슨 말이냐면 Anthropic(Claude), OpenAI, Microsoft, Amazon 등 다양하게 끼고 뺴고 교체하고 하기 편하다는 거다.

이번에 나온 버전을 보니 벡터 저장소부터 MCP, Function Calling, 추적 모니터링 기타등등

메인 릴리즈가 나와서 그런지 많은 기능을 지원하는 것 같다.

1년전에 잠깐 java로 AI 붙여보겠다고 했을때는 간단한 채팅 정도만 됐었는데 못본 사이에 많이 발전했다.

dependencies {
  implementation("org.springframework.boot:spring-boot-starter-web")
  // 모델(예: OpenAI/LM Studio-호환)
  implementation("org.springframework.ai:spring-ai-starter-model-openai")
  // 벡터스토어(예: PostgreSQL + pgvector)
  implementation("org.springframework.ai:spring-ai-starter-vector-store-pgvector")
}

dependencies 예제를 보면 간단한 스타터를 지원한다.

LM Studio도 지원하니 local에서 gpt-oss 기반으로 기능 테스트하는데 접근성이 좋아보인다.

좀더 파봐야겠지만 가장 좋으리라 생각하는 부분은 Spring 생태계 내부에 있다는 점이다.

스프링 시큐리티를 통한 API 접근 제한, 스프링 데이터를 바로 AI 운영에 연동에 활용한다는 점

Observability를 통한 AI 호출을 모니터링하는 등 기존 스프링 프로젝트의 장점을 모두 활용 가능하다는 점이다.

서로 다른 두가지 기술 스택을 연결한다는 것은 쉬운일이 아니다.

모델을 안정적으로 배포해야 하고, 외부의 호출을 막기 위해 분리하거나 보안을 걸어둬야 하고

네트워크 트래픽을 계산해야 하고 토큰/응답시간/요금 구조까지 감안해야한다.

즉 유지보수 측면에서 운용해야 할 환경이 늘어나는 일이다.

모듈 구조

모듈 의존성 상으로는 다음과 같은 구성이 있다.

  • spring-ai-commons: Document, TextSplitter 등의 공통 요소들

  • spring-ai-model: AI 기능을 추상화한다. ChatModel, EmbeddingModel 등을 제공한다.

  • spring-ai-vector-store: 직관적으로 vector 관련 기능을 제공한다. SQL 풍 메타데이터 필터를 제공한다는데, 개발자 입장에서는 중요해보여서 이건 나도 실 사용 결과를 봐야할 것 같다.

  • spring-ai-client-chat : 채팅 기능이 제공된다는데 ChatMemory라는 개념이 있다. AI가 대화의 맥락을 기억하게 해주는 핵심 컴포넌트로 Advisor와 함께 같이 구성되어 동작한다

대략적인 모듈 구조나 문서를 읽는다고 해서 크게 이해가 안될테니 나머지는 추후에 직접 써보면서 문서를 작성해보려 한다.

AI 모델 구현 모듈을 별도로 제공하며 각 AI 서비스 제공자 별로 별도의 스타터 의존성으로 제공되니 원하는 방향이 있으면 한번 찾아보자

← Previous
빠르게 써보는 docker
Next →
인프런 자료 수집기