@MessageMapping("/chat/{chatroomId}/message")
public void sendMessage(@DestinationVariable(value = "chatroomId") Long chatroomId, @Valid ChatMessageRequestDTO chatMessage) {
...
}
개요
@MessageMapping
은 스프링 프레임워크의 일부로서, WebSocket 을 사용한 메시징 어플리케이션을 쉽게 구현할 수 있게 해주는 어노테이션이다.
- WebSocket 은 클라이언트와 서버 간에 양방향 통신을 가능하게 하는 기술로서, 실시간 채팅 어플리케이션 같은 곳에서 많이 사용한다.
@MessageMapping
- 특정 메시지가 도착한 경우 해당 메시지를 처리할 메서드를 지정할 때 사용한다고 한다.
- 클라이언트가 서버로 메시지를 전송하면 → 그 메시지가 어떤 메서드에 의해 처리될지 결정하는 데 사용한다고 한다.
내부 동작 방식
- 클라이언트 → WebSocket 을 통하여 /chat/123/message 주소로 메시지를 보낸다.
- 서버에서
@MessageMapping
에 의하여 해당 주소로 오는 메시지는 sendMessage
메서드로 라우팅을 시도한다.
sendMessage
가 호출되며, 메시지 내용이 처리된다.
DestinationVariable
은?
- URL 에서 {chatroomId} 에 해당하는 부분을 추출해서 메서드의 파라미터로 전달한다.
- 이를 통하여 어떤 채팅방에 메시지를 보내야할지를 알 수 있다.