반응형

웹소켓 연동에서 STOMP를 사용할 때, 일반적으로 클라이언트의 메시지를 받기 위한 컨트롤러를 작성합니다. 이 컨트롤러는 `@MessageMapping` 애노테이션을 사용하여 클라이언트에서 보낸 메시지를 받습니다. 그리고 `SimpMessagingTemplate`를 사용하여 원하는 채팅방에 메시지를 보낼 수 있습니다.

예를 들어, 아래와 같이 구현할 수 있습니다:

```java
@Controller
public class ChatController {

    private final SimpMessagingTemplate messagingTemplate;

    @Autowired
    public ChatController(SimpMessagingTemplate messagingTemplate) {
        this.messagingTemplate = messagingTemplate;
    }

    @MessageMapping("/chat")
    public void receiveMessage(ChatMessage message) {
        // 메시지를 받는 로직
        sendMessageToChatRoom(message.getChatRoomId(), message);
    }

    public void sendMessageToChatRoom(String chatRoomId, ChatMessage message) {
        // 원하는 채팅방에 메시지를 보내는 로직
        this.messagingTemplate.convertAndSend("/topic/chatroom/" + chatRoomId, message);
    }
}
```

위 코드에서 `ChatMessage`는 채팅 메시지와 관련된 정보를 담는 클래스입니다. `chatRoomId`는 메시지를 보낼 채팅방의 ID를 나타냅니다. 

`@MessageMapping("/chat")` 애노테이션이 붙은 `receiveMessage` 메소드는 클라이언트가 `/app/chat` 주소로 메시지를 보내면 호출됩니다.

`sendMessageToChatRoom` 메소드는 `SimpMessagingTemplate`의 `convertAndSend` 메소드를 사용하여 특정 채팅방으로 메시지를 보냅니다. 이 때, `"/topic/chatroom/" + chatRoomId`는 메시지를 보낼 주소를 나타냅니다.

이렇게 하면 일반 컨트롤러를 사용하여 클라이언트의 메시지를 받고, 원하는 채팅방에 메시지를 보낼 수 있습니다.

 

-----------------

@PostMappding으로 받고 sendMessageToChatRoom 을 호출 할 수는 없을 까?

-----------------

네, `@PostMapping`을 사용하여 HTTP 요청을 받고 웹소켓을 통해 메시지를 보낼 수 있습니다. 이 경우에는 일반적인 HTTP 요청을 처리하는 방식과 동일하게 `@PostMapping` 애노테이션을 사용하면 되며, 메시지를 보낼 때 `SimpMessagingTemplate`를 사용합니다.

다음은 이를 구현한 예시입니다:

```java
@RestController
public class ChatController {

    private final SimpMessagingTemplate messagingTemplate;

    @Autowired
    public ChatController(SimpMessagingTemplate messagingTemplate) {
        this.messagingTemplate = messagingTemplate;
    }

    @PostMapping("/chat")
    public void sendMessage(ChatMessage message) {
        // 원하는 채팅방에 메시지를 보내는 로직
        this.messagingTemplate.convertAndSend("/topic/chatroom/" + message.getChatRoomId(), message);
    }
}
```

위 코드에서 `ChatMessage`는 채팅 메시지와 관련된 정보를 담는 클래스입니다. `chatRoomId`는 메시지를 보낼 채팅방의 ID를 나타냅니다.

`@PostMapping("/chat")` 애노테이션이 붙은 `sendMessage` 메소드는 클라이언트가 `/chat` 주소로 HTTP POST 요청을 보내면 호출됩니다. 이 메소드는 클라이언트로부터 받은 메시지를 원하는 채팅방으로 보냅니다.

이렇게 하면 `@PostMapping`을 사용하여 클라이언트의 요청을 받고, 웹소켓을 통해 원하는 채팅방에 메시지를 보낼 수 있습니다.

반응형

+ Recent posts