우와한 개발자

[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에 붙일 때 매번 다른 방식으로 연결하지 않아도 되는 공통 규격

블로그의 정보

우와한개발자 님의 블로그

우와한개발자

활동하기