[Part 1] Spring AI 사례로 배우는 AI 애플리케이션 통제 기법: 비용·품질·리스크·흐름 통제

Spring AI로 AI 기능을 구현했다면, 이제는 AI가 어떻게 동작하는지 관찰하고 비용·품질·리스크·흐름을 통제하는 방법을 고민할 차례입니다. LLM을 호출하고 RAG를 연결하고 구조화된 응답을 받는 것만으로 AI 애플리케이션이 충분히 신뢰할 수 있게 되는 것은 아닙니다. 실제 애플리케이션에서는 요청이 어떤 경로로 처리되었는지, 모델에 얼마나 많은 컨텍스트를 전달하고 있는지, 생성된 결과를 어디까지 신뢰할 수 있는지, 위험한 추천을 어떻게 제한할 것인지까지 함께 고민해야 합니다. 이 강의에서는 Spring AI 기반의 Incident Responder 애플리케이션을 하나의 일관된 사례로 사용합니다. 정상적으로 동작하지만 아직 충분히 통제되지 않은 baseline에서 시작해 실제 실행 결과를 관찰하고 문제를 발견한 뒤, 코드에 통제 지점을 추가하고 개선 전후를 비교합니다. 이를 통해 특정 AI 기능의 사용법을 하나 더 배우는 것을 넘어, 확률적으로 동작하는 AI를 Java/Spring 애플리케이션 안에서 어떻게 관찰하고 제한하고 검증할 것인지에 대한 설계 관점을 익힙니다.

3명 이 수강하고 있어요.

난이도 초급

수강기한 무제한

springai
springai
ai애플리케이션
ai애플리케이션
llm
llm
ai품질
ai품질
aiobservability
aiobservability
springai
springai
ai애플리케이션
ai애플리케이션
llm
llm
ai품질
ai품질
aiobservability
aiobservability

수강 후 이런걸 얻을 수 있어요

  • AI 요청의 trace와 span을 추적해 모델 호출, 프롬프트, 컨텍스트, 토큰 사용량, 지연 시간 등 실제 요청 흐름을 분석할 수 있습니다.

  • 요청 특성에 따라 AI 처리 경로를 분기하고, 애플리케이션이 모델을 사용하는 흐름을 통제할 수 있습니다.

  • LLM에 전달되는 런북·과거 장애 이력·프롬프트 크기를 직접 제한해 컨텍스트 비용을 통제할 수 있습니다.

  • 구조화된 AI 응답의 기본 계약을 검증하고, 실패 시 재시도와 fallback을 적용해 안정적으로 처리할 수 있습니다.

  • DTO 매핑을 넘어 AI 응답의 근거 일치성·구체성·과도한 확신·액션 적절성을 평가하고 개선할 수 있습니다.

  • AI가 생성한 추천의 위험도를 분류하고 정책을 적용해 위험한 결과가 그대로 전달되지 않도록 통제할 수 있습니다.

  • 동작하는 AI 애플리케이션에서 통제되지 않은 지점을 발견하고, 흐름·비용·품질·리스크 관점에서 적절한 통제 지점을 설계할 수 있습니다.

AI 애플리케이션, 동작하는 것만으로 충분할까요?

Spring AI로 LLM을 호출하고 원하는 응답을 받아냈습니다.

애플리케이션도 정상적으로 동작합니다.

하지만 정상적인 응답이 돌아온다는 사실만으로 AI 애플리케이션이 잘 통제되고 있다고 말할 수 있을까요?

요청이 실제로 어떤 경로를 거쳤는지 알기 어렵거나, 필요한 것보다 많은 정보가 LLM에 전달될 수 있습니다. 형식에 맞는 응답이 생성되더라도 그 내용이 정확하고 적절한지는 별개의 문제이며, 기술적으로 그럴듯하지만 그대로 전달하기에는 위험한 추천이 만들어질 수도 있습니다.

기존의 Java/Spring 애플리케이션에 확률적으로 동작하는 AI가 들어오면, 우리는 "정상적으로 동작하는가?"를 넘어 "어디를 관찰하고, 무엇을 제한하고, 어떤 결과를 검증해야 하는가?"를 함께 고민해야 합니다.

이 강의는 바로 이 질문에서 시작합니다.

AI 애플리케이션은 하나의 요청을 처리하는 동안 여러 데이터와 서비스를 거쳐 LLM을 호출하고, 그 결과를 다시 애플리케이션의 응답으로 전달합니다.

문제는 이 과정이 정상적으로 끝났다는 사실만으로 그 과정과 결과가 적절했는지는 알 수 없다는 것입니다.

요청이 실제로 어떤 경로를 거쳤는지 보이지 않을 수 있고, 필요한 것보다 많은 런북과 과거 장애 이력이 LLM에 전달될 수도 있습니다. 응답이 정해진 JSON 구조에 맞더라도 내용의 정확성과 품질까지 보장되는 것은 아니며, 그럴듯하지만 그대로 전달하기에는 위험한 추천이 만들어질 수도 있습니다.

즉, 문제는 LLM이 동작하지 않는 것이 아닙니다.

애플리케이션 곳곳에 우리가 아직 관찰하고 제한하고 검증하지 않는 지점이 남아 있다는 것입니다.

그렇다면 이런 지점들을 어떤 기준으로 찾아내고 통제해야 할까요?

Spring AI로 LLM을 호출하고, RAG로 필요한 정보를 연결하고, 원하는 형태의 응답까지 만들어냈습니다.

애플리케이션은 정상적으로 동작합니다.

하지만 정상적으로 동작한다는 것과, 통제되고 있다는 것은 다릅니다.

요청이 실제로 어떻게 흘렀는지 알 수 없다면, 문제가 생겼을 때 원인을 추적하기 어렵습니다.

필요 이상의 정보가 계속 모델에 전달된다면 비용과 처리 시간은 불필요하게 증가할 수 있습니다.

응답이 원하는 형식으로 만들어졌더라도 그 내용까지 신뢰할 수 있다는 보장은 없습니다.

기술적으로 그럴듯한 추천이라도 그대로 전달하기에는 위험할 수 있습니다.

이 강의는 바로 이 지점에서 시작합니다.

AI 기능을 하나 더 만드는 것이 아니라, 이미 동작하는 AI 애플리케이션 안에서 어디를 관찰하고, 제한하고, 검증해야 하는지를 찾아갑니다.

하나의 Incident Responder를 끝까지 발전시킵니다

이 강의에서는 개념마다 새로운 예제를 만들지 않습니다.

하나의 Incident Responder를 기준 사례로 삼아 강의가 진행될수록 같은 애플리케이션을 계속 발전시킵니다.

Incident Responder는 운영 장애 정보를 입력받아 관련 런북, 과거 장애 이력, 에스컬레이션 정책을 수집하고, 이를 바탕으로 AI가 장애 상황과 잠재 원인을 분석해 우선 대응 액션을 추천하는 Spring AI 애플리케이션입니다.

처음부터 완벽하게 통제된 애플리케이션을 보여주지는 않습니다.

강의의 출발점인 baseline은 잘못 만든 코드가 아니라, 정상적으로 동작하지만 아직 충분히 통제되지 않은 애플리케이션입니다.

이 baseline에서 실제 요청을 실행하고 문제를 발견한 뒤, 흐름·비용·품질·리스크 관점에서 필요한 통제 지점을 하나씩 추가합니다. 그리고 같은 요청을 다시 실행하며 무엇이 달라졌는지 확인합니다.

하나의 애플리케이션이 문제 발견과 통제를 반복하며 어떻게 더 신뢰할 수 있는 구조로 발전하는지, 그 과정을 처음부터 끝까지 따라갑니다.

이 강의는 Spring AI의 기능을 하나씩 나열하고 사용법을 익히는 방식으로 진행하지 않습니다.

먼저 정상적으로 동작하는 baseline을 실행해 보고, 그 안에서 실제로 어떤 문제가 생기는지 확인합니다.

문제가 보이면 코드에서 통제가 필요한 지점을 찾고, 실행 결과를 관찰하면서 왜 이 지점을 개선해야 하는지 이해합니다.

그다음에야 문제를 해결하기 위해 필요한 기술과 패턴이 등장합니다.

Routing, Observability, Context Budget, Validation, Evaluator–Optimizer 같은 기술도 그 자체가 학습 목표는 아닙니다.

“이 기술이 어떤 문제를 해결하고, 애플리케이션의 어디를 통제하기 위해 필요한가?”를 먼저 확인한 뒤 코드에 적용합니다.

그리고 같은 요청을 다시 실행해 개선 전과 후를 비교합니다.

문제를 먼저 발견하고, 필요한 기술을 선택하고, 실제 실행 결과로 변화까지 확인하는 것.

이것이 이 강의의 학습 방식입니다.

네 가지 통제 문제를 직접 해결합니다

AI 애플리케이션에서 문제가 생겼을 때, 최종 응답만 보고서는 원인을 찾기 어렵습니다.

이 강의에서는 관찰 가능성(Observability) 을 연결해 하나의 Incident 요청이 어떤 서비스와 모델 호출을 거쳤는지 trace · span · event 구조로 확인합니다.

실제 Langfuse Trace 화면에서 요청의 처리 흐름과 각 단계의 소요 시간, 모델 호출, token usage, latency, error를 직접 확인하고, 이후에는 요청 특성에 따라 필요한 경로를 선택하도록 Routing을 적용합니다.

먼저 흐름을 보이게 만들고, 그다음 흐름을 통제합니다.

LLM 비용을 통제하려면 사용된 token을 확인하는 것에서 끝나서는 안 됩니다.

애플리케이션이 LLM에 얼마나 많은 정보를 전달하도록 허용할 것인지 직접 결정해야 합니다.

이 강의에서는 런북과 과거 장애 이력의 개수와 길이를 제한하고, 중복을 제거하며, severity에 따라 context budget을 적용해 최종 Prompt 크기를 통제합니다.

그리고 동일한 요청을 다시 실행해 token 사용량을 관찰하고 개선 전후를 비교합니다.

비용을 관찰하는 것에서, 비용을 만들어내는 Context 자체를 통제하는 것으로.

LLM 응답이 DTO에 정상적으로 매핑되었다고 해서 그 내용을 바로 신뢰할 수 있는 것은 아닙니다.

먼저 필수값, 목록 개수, 중복, priority 범위와 같은 기본 계약을 검증하고, 문제가 있다면 retry와 fallback으로 대응합니다.

하지만 형식이 올바른 응답도 근거가 부족하거나 지나치게 확신하는 내용을 담을 수 있습니다. 그래서 한 단계 더 나아가 근거 일치성, 구체성, 과도한 확신, 액션 적절성을 평가하고 Evaluator–Optimizer를 통해 응답을 개선합니다.

구조를 검증하는 것에서, 내용의 품질까지 검증하는 것으로.

기술적으로 그럴듯한 AI 추천이라도 그대로 사용자에게 전달하기에는 위험할 수 있습니다.

이 강의에서는 추천의 위험도를 식별해 riskLevel, approvalRequired, riskReason을 부여하고, minimumSeverity와 escalation policy 같은 애플리케이션 정책을 적용합니다.

핵심은 AI가 추천을 생성하는 역할과 애플리케이션이 정책에 따라 통제하는 역할을 분리하는 것입니다.

이 강의에서는 실제 Tool 실행이나 자동 복구를 다루지 않습니다. AI 추천을 정책에 따라 통제하고 안전한 형태로 외부에 전달하는 지점까지 다룹니다.

AI의 추천을 그대로 신뢰하는 것에서, 애플리케이션의 정책으로 통제하는 것으로.

이 강의는 Java 21과 Spring Boot, Spring AI를 기반으로 하나의 Incident Responder를 단계적으로 발전시키며 진행합니다.

요청 흐름을 관찰하기 위해 Micrometer, OpenTelemetry, Langfuse를 활용하고, 실제 코드를 실행하고 API를 호출하며 결과를 직접 확인합니다.

별도의 복잡한 환경을 새로 배우는 것이 아니라, Java/Spring 개발자에게 익숙한 개발 환경에서 AI 애플리케이션의 통제 지점을 설계하고 검증하는 과정에 집중합니다.

🔗 강의 자료 다운로드

강의에서 사용하는 수업별 실습 코드와 가이드 문서, 용어집은 GitHub Repository에서 제공합니다.

📦 강의 자료 GitHub Repository

전체 강의 자료는 아래 Repository에서 확인할 수 있습니다.

GitHub Repository 바로가기

실습을 시작하기 전에 Repository root의 README.md를 반드시 먼저 읽어주세요.
수업별 코드의 구성과 활용 방법 등 강의 자료를 사용하는 데 필요한 안내를 확인할 수 있습니다.


⚙️ Langfuse 설정 가이드

Langfuse를 처음 사용하는 수강생을 위해 회원 가입부터 API Key 설정까지 실습에 필요한 준비 과정을 별도의 가이드 문서로 제공합니다.

Langfuse 회원 가입 및 API Key 설정 가이드


📖 강의 용어집

강의에서 등장하는 AI 애플리케이션 통제, Prompt, Context, Observability, Quality, Risk 등의 주요 용어가 낯설다면 용어집을 함께 참고할 수 있습니다.

강의 용어집 보기

강의를 따라가다 낯선 용어가 나오면 구현 방법을 설명하는 문서라기보다, 용어의 의미를 빠르게 확인하는 보조 자료로 활용해주세요.

👉 시작하기 전에 확인해주세요

선수지식

이 강의는 Java/Spring 개발자를 대상으로 합니다.

Java와 Spring Boot의 기본적인 애플리케이션 개발 경험이 필요하며, REST API와 JSON 데이터 처리에 대한 기본적인 이해를 권장합니다.

또한 LLM, Prompt, Token 등 생성형 AI의 기본 개념과 Spring AI를 이용한 기본적인 LLM 호출 방식을 알고 있다면 강의를 더 수월하게 따라갈 수 있습니다.


개발 환경

실습은 Java 21과 Spring Boot, Spring AI를 기반으로 진행합니다.

IntelliJ IDEA를 중심으로 코드를 작성하고, Postman 등을 이용해 실제 Incident 요청을 실행하고 결과를 확인합니다.


강의에서 다루는 범위

하나의 Incident Responder를 발전시키면서 AI 애플리케이션의 흐름(Flow) · 비용(Cost) · 품질(Quality) · 리스크(Risk)를 어떻게 관찰하고 통제할지 학습합니다.

단순한 기능 사용법보다 통제되지 않은 지점을 발견하고, 필요한 통제를 코드에 추가한 뒤 실제 실행 결과를 비교하는 과정에 집중합니다.


이 강의에서 다루지 않는 범위

이 강의의 Incident Responder는 AI 추천을 생성하고, 위험도를 식별하고, 정책을 적용해 안전한 형태로 전달하는 지점까지를 책임집니다.

따라서 실제 시스템의 restart · rollback · scale 같은 Tool 실행, 자동 복구, 관리자 승인 후 실행하거나 중단된 workflow를 재개하는 과정은 다루지 않습니다.

이런 분들께
추천드려요

학습 대상은
누구일까요?

  • Spring AI의 기본 기능을 익힌 뒤, 실제 AI 애플리케이션을 어떻게 설계해야 할지 고민하는 Java/Spring 개발자

  • LLM 호출은 구현했지만 요청 흐름과 모델 호출 과정을 제대로 파악하기 어려운 개발자

  • RAG와 프롬프트에 전달되는 컨텍스트가 늘어나면서 토큰과 비용 관리가 고민되는 개발자

  • 구조화된 출력만으로는 AI 응답의 품질을 신뢰하기 어렵다고 느끼는 개발자

  • AI가 생성한 추천과 판단을 애플리케이션의 코드와 정책으로 통제하고 싶은 개발자

  • AI 기능 구현을 넘어 운영 가능하고 신뢰할 수 있는 AI 애플리케이션의 설계 방법을 배우고 싶은 개발자

선수 지식,
필요할까요?

  • Java와 객체지향 프로그래밍에 대한 기본적인 이해

  • Spring Boot를 이용한 애플리케이션 개발 경험

  • Spring의 의존성 주입(DI)과 기본적인 애플리케이션 구조에 대한 이해

  • REST API와 JSON 데이터 처리에 대한 기본적인 이해

  • 대규모 언어 모델(LLM), 프롬프트, 토큰 등 생성형 AI의 기본 개념에 대한 이해

  • Spring AI를 사용해 ChatClient 등 기본적인 LLM 호출을 구현해 본 경험

안녕하세요
Kevin입니다.

커리어인증

6,936

명

수강생

311

개

수강평

133

개

답변

4.8

점

강의 평점

12

개

강의

  • 주력 언어 또는 기술 : Java, Spring Framework, RxJava, Reactor, Spring WebFlux

  • (주) 펜타시큐리티 백엔드 개발자로 활동(From 2015.07 To 2022.01)

  • (주)코드스테이츠(https://www.codestates.com)에서 Senior Educational Software Engineer(Backend)로 활동
    (From 2022.03 To 2024.01.31)

- 프리랜서 개발자 및 강사로 활동(Since 2024.02)

- 저서

안녕하세요? Kevin이라고 합니다. ^^

인프런에서 이렇게 강사로서 여러분들을 만나게 되어서 너무 반갑습니다.

어떤 분야든 마찬가지겠지만 특히나 소프트웨어 개발자는 끊임없이 변화하는 트렌드에 뒤처지지 않도록 항상 자기 자신을 갈고 닦는것이 개발자로써 살아남는 유일한 방법이라고 생각하며 항상 배우는 자세로 즐겁게 소프트웨어 개발을 하고 있는 개발자 중 한 명입니다.

제가 가지고 있는 지식과 경험이 다른 분들에게 조금이나마 도움이 되기를 바라면서 인프런에서 강좌를 시작하였습니다.

앞으로 수강생분들에게 현실적으로 도움이 되는 다양한 강좌로 꾸준히 찾아뵙도록 하겠습니다. 감사합니다.

 

질문이나 의견은 언제든지 환영하니, 이메일(it.village.host@gmail.com)로 편하게 얘기해주세요.

 

더보기

커리큘럼

전체

16개 ∙ (6시간 23분)

해당 강의에서 제공:

수업자료
강의 게시일: 
마지막 업데이트일: 

수강평

아직 충분한 평가를 받지 못한 강의입니다.
모두에게 도움이 되는 수강평의 주인공이 되어주세요!

Kevin님의 다른 강의

지식공유자님의 다른 강의를 만나보세요!

비슷한 강의

같은 분야의 다른 강의를 만나보세요!

얼리버드 할인 중

₩29

33%

₩55,000