[Spring AI] Spring Boot 기반 AI 서비스 아키텍처 — FastAPI, MQTT, Spring AI
by 우와한개발자
1. AI 객체탐지 시스템

1) 전체 흐름
- 클라이언트가 이미지를 업로드 → Spring Boot가 수신 → FastAPI로 전달 → YOLO 모델이 객체 탐지 → 결과를 JSON으로 반환
2) 구성 요소별 역할
(1) Web / Mobile Client
- 사용자가 이미지를 업로드하고 탐지 결과를 확인하는 화면
- Spring Boot와 비동기 HTTP로 통신
(2) Spring Boot (WAS)
- 클라이언트 요청을 받아 FastAPI로 프록시(대리 전달) 하는 역할
- Spring WebFlux 를 사용해 비동기로 처리 → 추론 대기 중에도 스레드를 낭비하지 않음
- 기존 Spring MVC는 요청마다 스레드 1개를 점유하고 기다리지만, WebFlux는 기다리는 동안 다른 요청도 처리 가능
(3) FastAPI (AI Server)
- 실제 YOLO 추론이 실행되는 곳
- Python 기반이라 딥러닝 라이브러리를 그대로 활용 가능
- Uvicorn (비동기 ASGI 서버) 위에서 실행됨
3) Spring Boot와 FastAPI를 분리하는 이유
- Java는 엔터프라이즈 비즈니스 로직, 보안, 인증에 강점
- Python은 AI/ML 라이브러리 생태계가 압도적으로 풍부
- 분리하면 AI 서버만 독립적으로 교체하거나 확장하기 쉬움
2. 실시간 AI 영상 분석 시스템

1) 이미지 탐지 시스템과의 차이
- 이미지 탐지는 1회성 요청-응답 구조
- 영상 분석은 카메라가 끊임없이 데이터를 보내는 스트리밍 구조
- 때문에 일반 HTTP 대신 목적에 맞는 프로토콜을 각 구간마다 다르게 사용
2) 프로토콜별 역할
| 프로토콜 | 사용 구간 | 역할 |
| RTSP | 카메라 → AI 서버 | 영상 스트리밍 전송 |
| MQTT | AI 서버 → Broker → Spring Boot | 분석 결과 이벤트 전달 (비동기) |
| WebSocket | Spring Boot → 클라이언트 | 실시간 결과 푸시 |
3) MQTT 구조를 쓰는 이유
(1) 발행 / 구독 (Pub/Sub) 구조
- AI 서버는 결과가 나올 때마다 Broker에 발행(Publish)
- Spring Boot는 Broker를 구독(Subscribe) 하고 있다가 결과를 수신
- 두 서버가 서로 직접 연결되지 않아도 되는 느슨한 결합 구조
(2) HTTP 대비 장점
- HTTP는 클라이언트가 먼저 요청해야 응답이 오는 구조 → 실시간에 부적합
- MQTT는 서버가 결과가 생길 때마다 능동적으로 전달 → 실시간 이벤트에 적합
4) 전체 데이터 흐름
- 카메라 → (RTSP) → AI 서버 분석 → (MQTT Publish) → Broker → (MQTT Subscribe) → Spring Boot → (WebSocket) → 클라이언트
3. Spring AI를 이용한 외부 AI API 연결 시스템

1) 앞의 두 시스템과의 차이
- 앞의 두 시스템은 Python AI 서버를 직접 운영하는 구조
- 이 시스템은 ChatGPT, Gemini 같은 외부 AI API를 호출하는 구조
- AI 모델을 직접 관리하지 않아도 되므로 구축 비용이 낮음
2) Spring AI란?
- OpenAI, Google Gemini 등 다양한 AI API를 Spring 방식으로 통일된 인터페이스로 연결해주는 라이브러리
- API마다 호출 방식이 달라도 Spring AI가 추상화해주기 때문에, 모델을 교체해도 코드 변경이 최소화됨
3) 주요 기능 개념
(1) LLM Streaming
- AI 응답을 한 번에 받는 것이 아니라, ChatGPT처럼 글자가 타이핑되듯 조금씩 수신
- 응답이 길수록 사용자 경험이 크게 향상된다.
(2) Tool Calling
- AI가 텍스트 응답을 넘어 특정 함수나 API를 직접 호출하도록 지시할 수 있는 기능
- 예) "오늘 날씨 알려줘" → AI가 날씨 API를 호출해서 실제 데이터로 응답
(3) RAG (Retrieval-Augmented Generation)
- AI가 학습하지 않은 우리 회사만의 문서나 데이터를 검색해서 답변에 활용하는 기법
- AI 모델을 재학습하지 않고도 최신 정보나 내부 데이터를 활용 가능하다.
(4) MCP (Model Context Protocol)
- AI가 외부 도구들과 표준화된 방식으로 연결될 수 있도록 Anthropic이 제안한 프로토콜
- 다양한 도구를 AI에 붙일 때 매번 다른 방식으로 연결하지 않아도 되는 공통 규격
'AI > Spring AI' 카테고리의 다른 글
| [Spring] WebClient로 OpenAI API 연동하기 (0) | 2026.06.01 |
|---|---|
| [Spring AI] MQTT로 실시간 객체탐지 구현하기 — Mosquitto, paho-mqtt, YOLO, WebSocket (0) | 2026.06.01 |
| [Spring] WebFlux로 FastAPI 프록시 구현하기 — MultipartBodyBuilder, FilePart, WebClient (0) | 2026.06.01 |
| [Spring] Spring WebFlux란? — 동기/비동기, 블로킹/논블로킹, Mono/Flux, WebClient (0) | 2026.06.01 |
| [Spring AI] Spring Boot와 FastAPI로 AI 객체탐지 서비스 구현하기 (0) | 2026.05.30 |
블로그의 정보
우와한개발자 님의 블로그
우와한개발자