이것이 Spring AI다

한빛미디어 서평단 <나는리뷰어다> 활동을 위해서 책을 협찬받아 작성된 서평입니다
Spring AI에 대한 관심이 시작된 곳, SpringCamp 2025
사실 이 책을 집어든 건, 우연이 아니었습니다.
지난 SpringCamp 2025에서 종훈님이 Spring AI 오픈소스 기여 경험을 발표하셨는데, 그 이야기가 꽤 오래 마음에 남았습니다. 프레임워크를 "쓰는" 입장에서만 바라보던 저에게, 직접 코드를 읽고 기여하고 커뮤니티와 소통하는 과정을 들려주신 건, 솔직히 부러움 반, 자극 반이었던 것 같습니다. 무엇보다 종훈님의 발표를 통해 Spring AI라는 프로젝트가 단순히 "Spring에서 ChatGPT 호출하기"가 아니라, 꽤 진지하게 추상화 계층을 설계하고 있는 프로젝트라는 인상을 받았습니다.
그래서 이번에 서평 기회가 있을 때, 망설임 없이 이 책을 골랐습니다. SpringCamp에서 받은 인상을 직접 확인해보고 싶었고, 책을 읽는 것에서 멈추지 않고 뭔가를 만들어봐야겠다는 마음이 이미 있었던 것 같습니다. 돌이켜보면 종훈님의 발표가 씨앗이었고, 이 책이 그 씨앗에 물을 준 셈이라고 해야 할까요.
책과의 첫인상
그런 기대를 안고 펼친 책이었기에, 목차를 넘길 때의 느낌은 꽤 좋았습니다.
신용권 작가는 이미 <이것이 자바다> 시리즈로 수많은 개발자에게 체계적인 입문서를 제공해 온 분인데, 이번에도 그 특유의 "하나씩 쌓아가는" 구성이 느껴졌습니다. Spring AI가 무엇이고, 왜 필요하며, 어떤 구조로 LLM과 대화하는지를 차근차근 풀어놓는 방식이, 적어도 저에게는, 안심이 되었습니다.
특히 인상적이었던 건, SpringCamp에서 종훈님이 언급하셨던 ChatModel 추상화가 책에서도 핵심적으로 다뤄진다는 점이었습니다. Prompt 엔지니어링, Ollama를 통한 로컬 LLM 연동, 그리고 프로바이더 전환 전략까지. 발표에서 얼핏 들었던 개념들이 책을 통해 구체적인 코드로 연결되는 경험은 꽤 만족스러웠습니다. "아, 그때 그 이야기가 이런 구조였구나" 하는 순간들이 있었습니다.
그래서 만들어본 것: personal-finance-local-simulator
책을 읽는 것과 코드를 짜는 것 사이에는 늘 간극이 있습니다. 저는 그 간극을 줄이는 가장 좋은 방법이, 책의 내용을 자기 문제에 적용해보는 것이라고 생각하는 편입니다. 그래서 만들어본 것이 personal-finance-local-simulator, 개인 재무 시뮬레이터였습니다.
프로젝트의 핵심 아이디어는 이랬습니다.
수입, 지출, 부채, 적금 같은 재무 데이터를 입력하면, 결정론적(deterministic) 시뮬레이션 엔진이 월별 자산 변화를 예측한다. 그리고 그 결과 위에 Spring AI를 통해 LLM이 자문(advisory)을 덧붙인다.
여기서 중요한 건 AI가 시뮬레이션의 "주인"이 아니라는 점이었습니다. 숫자를 계산하고 예측하는 건 순수한 도메인 로직(ProjectionEngine, DebtEngine)이 담당하고, AI는 그 결과를 읽고 코멘터리를 달아주는 역할에 한정했습니다. 이건 책에서도 강조하는 부분이기도 한데, AI의 출력은 보조적이어야 하며, 핵심 비즈니스 로직을 AI에 의존하면 안 된다는 것. 나는 이 원칙에 꽤 공감했습니다.
Spring AI가 로컬 LLM과 맞물리는 방식에 대한 단상
실습하면서 가장 많이 고민했던 부분은 프로바이더 전환이었습니다.
책에서 소개한 대로, Spring AI는 ChatModel이라는 추상화를 통해 백엔드가 특정 AI 프로바이더에 직접 결합되지 않도록 설계되어 있습니다. 이 구조 덕분에 application-ai-local.yml과 application-ai-external.yml을 나누어, Ollama로 로컬 LLM(llama3.1)을 쓸 때와 OpenAI 호환 API로 외부 모델을 쓸 때를 프로파일 하나로 전환할 수 있었습니다.
spring:
ai:
model:
chat: ollama
ollama:
base-url: http://localhost:11434
chat:
options:
model: llama3.1
이 구조가 실제로 동작하는 걸 보면서, "아, Spring AI BOM 1.0.0이 이 정도까지 성숙했구나" 하는 느낌을 받았습니다. 물론 처음부터 매끄럽진 않았습니다. Ollama 서버가 꺼져 있을 때 graceful하게 처리하는 부분이라든지, 외부 API 호출 시 사용자 동의(consent) 플로우를 어떻게 설계할지 같은 문제는 책의 범위를 넘어서는 것이어서, 직접 고민해야 했습니다.
결국 AiAdvisoryProvider라는 인터페이스를 두고, 로컬 프로바이더와 외부 프로바이더를 각각 구현하는 방식으로 풀었습니다. 로컬(OllamaLocalAdvisoryProvider)은 동의 없이 바로 쓸 수 있지만, 외부(OpenAiCompatibleExternalAdvisoryProvider)는 consentGranted 플래그가 없으면 요청 자체를 거부하도록 했습니다. 개인 재무 데이터라는 민감한 정보가 외부로 나가는 것에 대한 최소한의 안전장치였습니다.
이 과정에서 AI에게 전달하는 페이로드를 redact(편집)하는 구조도 만들었는데, 시나리오의 원본 데이터가 아니라 요약된 스냅샷만 LLM에 전달하도록 한 것입니다. 금액의 구체적인 수치는 포함하되, 사용자의 이름이나 계좌번호 같은 건 애초에 시뮬레이터에 입력하지 않으니 걱정할 필요가 없었지만, 그래도 습관적으로 "이 데이터가 외부로 나가도 괜찮은가?"를 한 번 더 묻는 구조를 만들어두는 게 맞다고 느꼈습니다.
책이 가르쳐준 것, 그리고 책 너머에서 배운 것
<이것이 Spring AI다>는 분명 좋은 출발점이었습니다. Spring AI의 핵심 개념들, ChatModel, Prompt, ChatResponse 같은 추상화 계층과, Ollama/OpenAI 프로바이더 설정법, BOM을 통한 버전 관리를 체계적으로 익힐 수 있었습니다.
좋았던 점을 꼽자면:
- 신용권 작가 특유의 단계적 설명이 건재합니다. "이것이" 시리즈를 읽어본 사람이라면 익숙한, 그 안정감 있는 전개.
- 로컬 LLM(Ollama) 연동을 다루는 부분이 실용적이었습니다. 클라우드 API 비용 걱정 없이 실험할 수 있다는 건, 개인 프로젝트에서는 꽤 큰 장점이니까요.
- Spring 생태계의 맥락에서 AI를 설명하기 때문에, Spring Boot를 이미 알고 있는 개발자라면 진입 장벽이 확실히 낮습니다.
아쉬웠던 점도 있었습니다:
- 실제 프로덕션에서 마주칠 법한 문제들, AI 응답의 불확실성을 어떻게 다룰지, fallback 전략, 프로바이더가 다운됐을 때의 graceful degradation은 책의 범위 밖이었습니다. 물론 입문서에 그런 걸 요구하는 건 과한 기대일 수도 있지만요.
- 프롬프트 엔지니어링에 대한 깊이가 좀 더 있었으면 합니다. 어떤 프롬프트가 좋은 결과를 내는지에 대한 노하우는 결국 직접 부딪혀야 한다는 걸 실습하면서 절감했습니다.

앞으로 AI와 개발자의 관계에 대해
카페에서 나와 성수동 골목을 걸으면서, 문득 이런 생각이 들었습니다.
"나는 지금 AI를 도구로 쓰고 있는 걸까, 아니면 AI가 나를 도구로 쓰고 있는 걸까?"
personal-finance-local-simulator를 만들면서, 나는 의도적으로 AI를 "보조자"의 위치에 놓았습니다. 시뮬레이션의 진실(source of truth)은 결정론적 엔진이고, AI는 그 위에 해석을 덧붙이는 레이어일 뿐이라고. 하지만 이 구분이 앞으로도 이렇게 깔끔하게 유지될 수 있을까요?
AI 모델이 점점 더 정교해지고, 개발자들이 점점 더 많은 판단을 AI에 위임하게 되면, 어느 순간 "AI는 보조적이어야 한다"는 원칙이 관성처럼 무너지는 건 아닐까 하는 걱정이 조금은 있습니다. 그리고 그런 미래가 온다면, 지금 이 시점에 "AI와 도메인 로직의 경계"를 의식적으로 연습해둔 경험이 꽤 소중한 자산이 되지 않을까 하는 기대도 있고요.
신용권 작가의 책은 그 연습의 좋은 시작점이었습니다. Spring이라는 익숙한 프레임워크 위에서, AI를 "하나의 인프라스트럭처 레이어"로 다루는 감각. 이건 단순히 API 호출법을 배운 것 이상의 가치가 있었다고 생각합니다.
성수동 카페의 오후는 그렇게 지나갔습니다. 커피는 식었고, 노트북 배터리는 줄었고, 머릿속에는 코드보다 질문이 더 많이 남았습니다. 하지만 그게 좋은 공부의 증거가 아닐까 싶습니다. 답보다 질문이 늘어나는 것.
다음에는 이 시뮬레이터에 RAG(Retrieval-Augmented Generation)를 붙여서, 실제 금융 상품 정보를 참조한 자문을 해볼 수 있을지 고민해보려 합니다. 책의 다음 장이 기다려지는 이유이기도 하고, 아직 펼쳐보지 못한 장이 남아 있다는 건, 그 자체로 설레는 일이니까요.
책 정보
- 제목: 이것이 Spring AI다
- 저자: 신용권
- 실습 프로젝트: personal-finance-local-simulator (Kotlin + Spring Boot 3.4.3 + Spring AI BOM 1.0.0)
- 기술 스택: Ollama(llama3.1) / OpenAI-compatible API, H2, Flyway, JPA
#SpringAI #이것이SpringAI다 #신용권 #Ollama #Kotlin #SpringBoot #개인재무시뮬레이터 #서평 #성수동