ws로 접속하면 실시간으로 양방향 통신 가능
ws://localhost:8080/ws → 웹소켓 접속 엔드포인트
여기서 뒤의 /ws 는 WebSocketConfig의 엔드포인트 설정에서 직접 설정한 값
한 번 접속하면 클라이언트와 서버가 WebSocket을 통해 지속적으로 연결 유지되며 실시간으로 통신이 가능
STOMP를 이용해 구독 가능
- STOMP는 WebSocket 위에서 동작하는 프로토콜로, 메시지를 목적지(구독 엔드포인트)로 라우팅할 수 있음
- 구독
- 메시지를 전송할 때 전송 엔드포인트와 구독 엔드포인트를 동시에 작성
- 예를 들어 /topic/room/1 이라는 경로를 구독하고, /message/send 같은 전송 엔드포인트로 메시지를 전송
- 서버는 받은 메시지를 브로커를 통해 구독자들에게 전달
- 모든 사용자에게 메시지가 보이는게 아니라 /topic/room/1 을 구독한 사용자에게만 메시지가 전송이 됨
- 구독되는 과정
- 구독을 해야 메시지를 받을 수 있기 때문에, 방을 생성할 때 방에 입장하는 유저들은 모두 해당 방을 구독하도록 구현 했음.
- 채팅방에 들어와 있다면 구독을 하고 있다고 생각하면 됨
- 따라서 해당 방에 없는 유저(해당 방을 구독을 안 한 유저)는 해당 전송 받지 않음
메시지 전송
- 메시지 전송은 기본 prefix인 /app 에 @MessageMapping의 엔드포인트를 붙여 전송
- ex) /app/chat/3/sendMessage
- @SendTo는 해당 엔드포인트를 구독한 사용자에게만 전송하도록 하는 애노테이션
- 3번 방에 메시지를 전송 했다면 /topic/chat/3 엔드포인트를 구독하고 있는 사용자만 메시지 수신
ws://localhost:8080/ws 로 웹소켓 연결 (서버가 끊길 때 까지 연결 유지)
/topic/chat/{roomId} 로 구독
- 현재 /topic/chat/3 만 구독 되어있는 상태
메시지 전송
구독이 되어있지 않은 2번 방에 메시지가 전송된 경우
전송된 메시지는 성공적으로 저장되지만 구독을 하지 않았으므로 사용자에게 메시지가 전송되지 않음구독이 되어있는 3번 방에 메시지가 전송된 경우
전송된 메시지가 성공적으로 저장되고, 구독을 했으므로 사용자에게도 메시지가 전송됨
'기타' 카테고리의 다른 글
Netlify에 프론트 서버 띄우기 (0) | 2025.04.17 |
---|---|
JWT / 세션 (1) | 2025.03.18 |
OpenAI API 비용 및 활용 고려 사항 (0) | 2025.03.14 |
마크다운 (0) | 2024.06.24 |