Skip to content

[Feat] Proovy-server SSE 스트리밍 프로토콜 v2 적용 #201

@chowon442

Description

@chowon442

✨ 기능 설명

Proovy-ai 서버의 새로운 SSE 프로토콜(v2) 명세에 맞춰 Proovy-server의 스트리밍 처리 로직을 마이그레이션합니다.
기존의 /stream (v1) 대신 /stream/v2 엔드포인트를 사용하며, 데이터 페이로드 내부의 type 필드 대신 표준 SSE event 필드를 사용하여 이벤트를 구분합니다.

🎯 개발 목적

  • 표준 준수: [DONE]과 같은 비표준 종료 시그널을 제거하고, run.completed / run.failed 등 명시적인 라이프사이클 이벤트를 사용합니다.
  • 구조 개선: 백엔드에서 이벤트를 중계할 때 ServerSentEvent 객체를 활용하여, 클라이언트(프론트엔드)가 EventSource.addEventListener로 깔끔하게 분기 처리할 수 있도록 지원합니다.
  • 확장성: llm.token.delta, chat.message 등 세분화된 이벤트 분류 체계(Taxonomy)를 도입합니다.

✅ 작업 내용

  • ChatServiceImpl 수정
    • AI 서버 호출 URL 변경: /stream/stream/v2
    • WebClient 응답 타입을 String에서 ServerSentEvent<String>으로 변경하여 이벤트 필드 파싱
    • 토큰 스트리밍 이벤트 핸들링 변경 (tokenllm.token.delta, contentdelta)
    • 종료 조건 변경 ([DONE]run.completed / run.failed)
  • ConversationController 수정
    • 클라이언트 응답 시 ServerSentEvent.builder().event(...)를 사용하여 표준 SSE 이벤트 필드 설정
    • 기존 레거시 type 필드 의존성 제거 및 데이터 구조 정리

📌 비고

  • 프론트엔드 영향도: 프론트엔드 클라이언트 코드는 onmessage 하나로 처리하던 방식에서 addEventListener('llm.token.delta', ...) 형태로 변경해야 정상 동작합니다.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions