-
Notifications
You must be signed in to change notification settings - Fork 0
Description
이슈 배경
- 사용자의 채팅 요청을 받아 AI 서버로 전달하고, 생성된 답변을
WebSocket을 통해 실시간으로 사용자에게 스트리밍하는 AI 채팅 서비스 개발 - 답변 생성 중 사용자가 취소 요청 시 즉시 생성 중단 가능
이슈 내용
1. 시스템 아키텍처 및 흐름
- 구조:
Frontend↔ (WebSocket) ↔Spring Server↔ (HTTP API) ↔AI Server - 동작 흐름:
- 요청: 프론트엔드가
POST /chats/{chat_id}로 사용자 메시지 전송. - 전달: Spring 서버가 이를 받아 비동기로 AI 서버에 답변 생성 요청.
- 스트리밍: AI 서버의 응답을 수신하는 즉시
WebSocket을 통해 프론트엔드로 푸시.
4-1. 취소:POST /chats/{chat_id}/cancel요청 시 진행 중인 스트림과 AI 요청을 즉시 중단.
4-2. 완료/저장: 답변 생성이 완료되면 전체 메시지를 DB에 저장.
- 요청: 프론트엔드가
2. API 명세 (Trigger)
A. 답변 생성 요청 (Trigger)
- Endpoint:
WS /ws/chats/send/{chat_id} - Request Body:
{ "message": "사용자 질문 내용" } - Response:
202 Accepted(처리가 시작되었음을 알림, 실제 내용은 WS로 전달)
B. 답변 생성 취소
- Endpoint:
WS /ws/chats/cancel/{chat_id} - Description: 현재 진행 중인 해당 채팅방의 답변 생성 작업을 즉시 중단함.
- Response:
200 OK
3. 개발 범위
ChatController: 메시지 전송 요청 처리 및 취소 요청 핸들링.WebSocketConfig: 웹소켓 연결 설정.ChatService: AI 서버 연동, 스트림 처리, 세션 관리.ChatStreamManager:- AI 서버 연동 (
WebClient). - 활성 작업 관리 (
Map<Long, Disposable>). - WebSocket 메시지 전송 (
SimpMessagingTemplate등).
- AI 서버 연동 (
4. 주요 기능 구현
A. WebSocket 통신 환경 구축
WebSocketConfig설정 및 엔드포인트(/ws/chat) 개설.- STOMP 또는 TextWebSocketHandler를 사용하여 세션 관리 구현.
B. AI 서버 연동 및 비동기 스트리밍
WebClient또는 비동기 HttpClient를 사용하여 AI 서버와 통신.- AI 서버로부터 들어오는 스트림 데이터를 실시간으로 WebSocket 세션에 전송(
flux처리 등).
C. 답변 생성 취소 로직
- 요구사항: 답변 생성 도중 사용자가 중단을 요청하면 백엔드에서 AI 서버로의 요청을 즉시 끊어야 함.
- 구현 방안:
/cancel요청이 오면 Map에서 해당chat_id의 작업을 조회.- 작업이 존재하면
dispose()/cancel()을 호출하여 AI 서버와의 연결을 끊고 WebSocket 전송 중단. - Map에서 해당 Entry 제거.
참고 자료
No response
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels