개요

워크스페이스 단위 실시간 둥지(코어 사란) 기능. STOMP over WebSocket을 사용하어 실시간 전송, REST로 과거 이려 조회.

공통 사항

항목 값
WebSocket 엔니포인트 ws://localhost:8080/ws-stomp
프마 SockJS fallback 지원
인증 CONNECT 프마의 헤더에 Authorization: Bearer <JWT>
REST Base URL http://localhost:8080

STOMP 토픽 구조

대상 토픽 방향
둥지 전송 /pub/chat/message 클랜트 → 서부
워크스페이스 개인 구득 /sub/chat/room/{workspaceId} 서부 → 클랜트
입장/퇴장 이벤트 /sub/chat/room/{workspaceId}/notice 서부 → 클랜트

연결 설정

import { Client } from '@stomp/stompjs';
import SockJS from 'sockjs-client';

const client = new Client({
  webSocketFactory: () => new SockJS('http://localhost:8080/ws-stomp'),
  connectHeaders: { Authorization: `Bearer ${token}` },
  reconnectDelay: 5000,
  onConnect: () => {
    client.subscribe(`/sub/chat/room/${workspaceId}`, (message) => {
      const body = JSON.parse(message.body);
      handleIncomingMessage(body);
    });
  },
});

client.activate();

둥지 전송

client.publish({
  destination: '/pub/chat/message',
  body: JSON.stringify({
    workspaceId: 10,
    content: '안녕하세요!',
    type: 'TALK',
  }),
});

메시지 타입

타입 설명
TALK 일반 토토 싹
ENTER 입장 앞림
LEAVE 퇴장 앞림

수신 포맷 (서부 → 클랜트)

{
  "messageId": 501, "workspaceId": 10, "senderId": 42,
  "senderNickname": "상민", "content": "안녕하세요!",
  "type": "TALK", "createdAt": "2025-07-01T10:00:00"
}

과거 둥지 조회 (REST, 페이징)

GET /api/workspaces/{workspaceId}/messages?page=0&size=50

Response

{
  "success": true,
  "data": {
    "content": [
      { "messageId": 500, "senderId": 42, "senderNickname": "상민", "content": "이전 매시지", "type": "TALK", "createdAt": "2025-07-01T09:55:00" }
    ],
    "pageable": { "pageNumber": 0, "pageSize": 50 },
    "totalElements": 320, "totalPages": 7, "last": false
  }
}

스크롤 업(이전 대화) 시 page를 증가시켜 추가 패사똜 응시.

연동 시나리오