[STK6-06] FE 챗봇 UI 컴포넌트

작업 내용 (설계 의도)

변경 사항

기존 FE(Next.js)에 챗봇 페이지(/chat)를 추가한다. 메시지 입력창, 대화 목록, SSE 스트리밍 수신을 구현한다. sessionIdcrypto.randomUUID()로 생성해 로컬 세션 동안 유지한다.

선행 티켓: STK6-05 (Chat API 완료 후 연동)

다이어그램

처리 흐름

sequenceDiagram
    participant U as 사용자
    participant UI as ChatPage
    participant BE as ChatApiController
    U->>UI: 메시지 입력 후 전송
    UI->>BE: POST /api/chat/message (SSE)
    BE-->>UI: 스트리밍 텍스트 청크
    UI-->>U: 실시간 타이핑 효과로 표시

클래스 의존

flowchart LR
    ChatPage --> MessageList
    ChatPage --> MessageInput
    ChatPage -->|fetch SSE| ChatAPI[/api/chat/message]

테스트 케이스

  • 메시지 전송 시 사용자 메시지가 즉시 목록에 추가된다.
  • SSE 청크 수신 중 어시스턴트 메시지가 점진적으로 표시된다.
  • 빈 메시지 전송 버튼이 비활성화된다.
  • 스트리밍 중 에러 발생 시 “응답 중 오류가 발생했습니다” 메시지를 표시한다.
  • 새로고침 후 새 sessionId로 시작된다 (히스토리 초기화 허용).