FastAPI와 Spring Boot를 연동한 AI 기반 도슨트 설명 전달 시스템 구축하기

윤서·2025년 5월 29일

CapstoneProject

목록 보기
8/11

이전 포스트까지 AI 모델이 작품 속 객체를 인식하고 설명을 생성한 뒤, 해당 정보를 FAISS 데이터 베이스에 전달하는 구조를 만들었습니다.
이 시스템은 FAST API와 SPRING BOOT를 연동하여 동작하도록 연결 할 것 이며 실시간 응답성과 인증 보안을 동시에 고려해 설계하였습니다.

전체 흐름 요약
1. 사용자가 이미지 클릭 -> FAST API 서버로 요청 전송
2. FAST API는 YOLO/CLIP 기반으로 객체 설명 전송
3. JWT 인증 토큰과 함께 설명을 SPRING BOOT 로 전송 (POST)
4. SPRING BOOT는 Painting Id 유효성 검증 후 db에 설명 저장

3/4 가 이번 포스트에서 다룰 내용입니다.

FAST API에서 SPRING BOOT로 POST 전송 예시

@app.post("analyze")
def analyze_click(req:AnalyzeClickRequest):
	description = generate_descriptoin(req.image_id)
    response = requests.post(
    	"http://localhost:8080/api/model/response",
        json = { "paintingId":req.image_id, "description":description},
        headers = {"Authorization": ACCESS_TOKEN} #JWT 인증 헤더 포함
        )
        return { "status" : response.status_code }
        
        

--> AI가 생성한 설명을 SPRING 서버에 POST 방식으로 전송합니다.이때 , 보안 처리를 위해 JWT 토큰을 함께 헤더에 담습니다.

! JWT 란?

JSON WEB TOKEN 는 사용자 인증 정보를 안전하게 주고 받기 위한 디지털 토큰입니다. 
로그인 이후 서버가 클라이언트에게 토큰을 발급하면, 
이후 요청 시 이 토큰을 HTTP HEADER에 포함시켜 서버는 유저를 식별할 수 있습니다. 

구성: 헤더, 내용, 서명으로 이루어진 문자열
장점: 세션 관리 불필요, 서버가 사용자 상태를 저장하지 않아도 됨
분산 시스템에 적합
가볍고 빠름

! 비동기 처리란?

하나의 작업이 끝날때까지 기다리지 않고, 다른 작업을 병렬로 처리할 수 있는 방식입니다.
FAST API와 같은 프레임워크는 비동기 기반 서버 ( ASGI ) 를 사용해 다음을 가능하게 합니다.

 - 여러 요청 동시 처리
 - 응답 대기 중에도 다른 요청 처리 가능
 - 서버 자원을 효율적으로 사용
 
	@app.post("/async.process")
	async def handle_asnyc():
	result = await slow_task()
	return result

SPRING BOOT 서버에서 설명 저장

@PostMapping("/api/model/response")
public ResponseEntity<?> receiveDescription(@RequestBody ObjectDescriptionRequest request){
Painting painting = paintingRepository.findById(reequest.getPaintingID())
.orElseThrow() -> new IllegalArgumentException("해당 그림 없음"));
painting.setBackground(request.getDescription());
return ResponseEntity.ok().build();
}

이 연동 시스템은 비동기 요청 처리, jwt 인증, 모델-백엔드 간 restful 통신 , db 저장 처리 까지 실제 프로덕션 환경에서 요구되는 다양한 기능을 통합하였습니다.

0개의 댓글