미소를뿌리는감자의 코딩

[Aper] WebSocket + STOMP + SockJS 본문

프로젝트

[Aper] WebSocket + STOMP + SockJS

미뿌감 2024. 10. 11. 20:24
728x90

1. 개요

이번에 RabbitMQ 메시지 큐 도입을 앞두면서, SecurityConfig를 조금 수정하게 되었다.

메인 서버에서 사용 중인 DB를 채팅 서버에 연결 시킴을 통해 Spring security를 사용하고자 하였다.

이렇게 채팅 서버는 Mysql, mongodb, rabbitMQ를 사용하게 될 것이다. 

 

또한, 고질적인 문제였던 

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/ws/aper-chat")
                .setAllowedOriginPatterns("http://localhost:8081") // have to change allowed origins
                .withSockJS();
    }

.withSockJS() 적용 문제를 해결하고자 하였다.

 

2. 본론

websocketConfig에서 withSockJS()를 적용하면 항상 메시지 기능이 안되곤 하였다.

 

SockJS에 대한 이해가 부족하다고 판단, 여러 글들을 읽어보게 되었다.

한줄로 요약해 보면, WebSocket은 실시간 통신을, STOMP는 pub/sub구조로 WebSocket을 지원하는, SockJS는 레거시 환경에서 웹소켓이 지원이 안될 때, http 통신으로 채팅을 가능하게 해주는 역할을 한다.

 

또한, spring security를 적용하면서 WebSecurityConfig 파일 또한 적용하게 되었고, 이에 보안 규칙들이 일부 중복된다고 판단하였다.

따라서, setAllowedOriginPatterns를 제거하였으나, 메시지 전송이 되지 않았다.

 

WebSocket 설정과 WebSecurityConfig 파일들은 독립적으로 처리해 주어야 한다고 느끼게 되었다.

왜냐하면 websocket은 당연하게도 websocket 프로토콜을 사용하며, webSecurityConfig는 HTTP 보안을 관리하기 때문이다.

 

또한 작업자 도구를 통해 Network을 까보았다.

 

이렇게 이쁘게 websocket과 sockjs 그리고 stomp 또한 열심히 일하고 있는 것을 확인할 수 있다.

 

3. Need to...

이제는 RabbitMQ를 통한 메시지 큐를 도입해야 하는데, 많은 공부를 하고 난 후 접근해야할 필요성을 느꼈다.

또한, 이번에는 공식 문서도 찾아보면서 공부해 보고 싶다.

https://dev-gorany.tistory.com/325

 

[Spring Boot] WebSocket과 채팅 (4) - RabbitMQ

들어가기 앞서 STOMP + RabbitMQ Dependency Configuration DTO Controller RabbitMQ HTML Javascript Destination 마치며 [Spring Boot] WebSocket과 채팅 (3) - STOMP [Spring Boot] WebSocket과 채팅 (2) - SockJS [Spring Boot] WebSocket과 채팅 (1)

dev-gorany.tistory.com

 

https://velog.io/@yyong3519/WebSocket-RabbitMQ

 

WebSocket - RabbitMQ

출처

velog.io

 

다음엔 위의 블로그를 참고하여 메시지 큐 적용을 '정석적' 으로 해볼 것이다.

 

+ 폴더 정리도 다시 해야할 것 같다.

+ CI/CD 에서 메인 서버 Mysql 연결에 대한 처리 위한 배포 파일들을 다시 작성해야 한다. -> rabbitmq와 mysql 도입으로 인한...

 

728x90