스프링을 사용하면 실시간 양방향 통신을 구현하는 WebSocket을 손쉽게 구현할 수 있습니다. 이번 블로그에서는 스프링 WebSocket을 사용하고, 연결 복구 및 예외 상황을 처리하는 방법에 대해 알아보겠습니다.
스프링 WebSocket 설정 및 사용하기
먼저, spring-websocket 모듈을 의존성에 추가하고 WebSocket 설정을 구성해야 합니다. 이후 @EnableWebSocketMessageBroker 어노테이션을 사용하여 설정을 활성화하고, WebSocketMessageBrokerConfigurer를 구현하여 WebSocket 엔드포인트와 메시지 핸들러를 등록할 수 있습니다.
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/ws").withSockJS();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.enableSimpleBroker("/topic");
registry.setApplicationDestinationPrefixes("/app");
}
}
위의 예시에서는 /ws
엔드포인트를 등록하고, 클라이언트에서는 SockJS 를 활용하여 WebSocket 연결을 설정할 수 있습니다.
클라이언트는 이제 Stomp.js 등을 사용하여 메시지를 전송하고 받을 수 있게 됩니다.
연결 복구 처리
웹소켓은 네트워크 상태나 서버 다운 등의 이유로 연결이 끊어질 수 있습니다. 이때, @EnableScheduling 어노테이션을 사용하여 스프링에서 제공하는 SimpMessagingTemplate을 사용하여 주기적으로 클라이언트와 통신하는 태스크를 등록할 수 있습니다. 이를 통해 클라이언트가 연결을 잃었을 때 다시 연결하거나 데이터를 복구할 수 있게 됩니다.
@Service
public class ConnectionRecoveryService {
private final SimpMessagingTemplate messagingTemplate;
@Autowired
public ConnectionRecoveryService(SimpMessagingTemplate messagingTemplate) {
this.messagingTemplate = messagingTemplate;
}
@Scheduled(fixedRate = 5000)
public void sendHeartbeat() {
// Send a heartbeat message to the client
messagingTemplate.convertAndSend("/topic/heartbeat", "keep-alive");
}
}
위의 예시에서의 sendHeartbeat
메소드는 주기적으로 클라이언트에 keep-alive 메시지를 보내어 연결을 유지하는 역할을 합니다.
예외 처리
때로는 웹소켓 통신 중에 에러가 발생할 수 있습니다. 이때는 @MessageExceptionHandler 어노테이션을 사용하여 예외를 처리하고, 적절한 응답을 클라이언트에 전송할 수 있습니다.
@ControllerAdvice
public class WebSocketExceptionHandler {
@MessageExceptionHandler
public void handleException(Exception ex) {
// Handle the exception and send an appropriate response to the client
}
}
위의 예시에서, handleException
메소드를 사용하여 클라이언트의 요청을 처리하다가 발생한 예외를 적절히 처리할 수 있습니다.
마치며
스프링 WebSocket을 사용하여 웹소켓 통신을 구현하고, 연결의 복구 및 예외 처리를 다뤄보았습니다. 이러한 기능을 활용하여 안정적이고 안전한 실시간 통신을 구현할 수 있습니다.
끝으로, 추가로 관련된 레퍼런스를 참고하시면 보다 자세한 정보를 얻을 수 있습니다.
레퍼런스
이상으로, 스프링 WebSocket을 활용한 연결 복구 및 예외 처리에 대해 알아보았습니다. 감사합니다.