WebSocket:
STOMP (Simple Text Oriented Messaging Protocol):
/topic, /queue)/ws)WebSocketConfig: Spring에서 STOMP 엔드포인트와 메시지 브로커를 설정하는 Java 설정 클래스입니다.Http-Only 쿠키(JWT 포함)를 핸드셰이크 요청에 함께 보냅니다.CookieAuthHandshakeInterceptor가 이 요청을 가로챕니다.WebSocketSecurityConfig를 통해, 특정 STOMP 경로(e.g., 메시지 전송)는 인증된 사용자만 접근할 수 있도록 추가적인 보안을 설정했습니다.과거 메시지 조회 (REST API):
GET /api/chat/rooms/{roomId}/messages)를 구현했습니다.실시간 메시지 전송 및 수신 (WebSocket):
@MessageMapping: 클라이언트가 특정 STOMP 목적지(e.g., /app/chat.sendMessage)로 메시지를 보내면, 이 어노테이션이 붙은 컨트롤러 메서드가 메시지를 수신합니다./topic/room/{roomId}) 다시 전송(브로드캐스트)합니다.WebSocket 연결 관리 (websocketService.js):
채팅 UI 컴포넌트:
MessageList: 채팅 메시지 목록을 렌더링하는 컴포넌트.MessageItem: 개별 메시지 버블 UI.MessageInput: 사용자가 메시지를 입력하고 전송(Enter) 또는 줄바꿈(Shift+Enter)할 수 있는 입력 컴포넌트.데이터 동기화 흐름:
RoomDetail)에 진입하면, 먼저 REST API를 호출하여 과거 대화 기록을 가져와 화면에 렌더링합니다.websocketService를 통해 WebSocket에 연결하고 해당 채팅방의 STOMP 토픽을 구독합니다.