본문 바로가기

dev/스프링

Spring Boot WebSocket

웹 소켓은 웹 브라우저와 서버 사이에 양방향으로 데이터를 전송해 주는 통신 기술입니다.

 

스프링 부트에서 웹 소켓 연계 기능 추가하는 것은 어렵지 않습니다.

 

spring-websocket dependency 추가

 

pom.xml에 spring-websocket dependency를 추가합니다.

 

WebSocketHandler 추가

 

WebSocketHandler는 스프링에서 웹 소켓 통신을 담당하는 핸들러입니다.

 

텍스트 데이터를 전달하는 TextWebSocketHandler를 상속하여 WebSocketHandler를 구현했습니다.

 

클라이언트가 웹 소켓에 접속하면 로그를 남깁니다.(16~19라인)

 

클라이언트가 보낸 메시지에 "reply-"를 추가하여 다시 전달합니다.(21~33라인)

 

클라이언트가 웹 소켓 접속을 끊으면 로그를 남깁니다.(35~38라인)

 

WebSocketConfig 추가

 

웹 소켓 기능을 활성화하기 위해 WebSocketConfig를 추가합니다.

 

앞에서 구현한 WebSocketHandler를 등록하고, 클라이언트가 웹 소켓에 접속할 path를 설정합니다.(19~22라인)

 

Security 수정

 

특정권한이 있는 클라이언트만 웹 소켓을 사용할 수 있게 스프링 시큐리티에 등록합니다.

 

webSocket.js

 

클라이언트 화면에서 동작하는 webSocket.js입니다.

 

화면이 로드되면 바로 클라이언트가 웹 소켓 객체를 생성하고 웹 소켓 통신을 준비합니다.(12~20라인)

 

onClose 메소드의 initWebSocket 주석을 해제하면

 

웹 소켓 접속이 끊기더라도 다시 접속해서 계속 웹 소켓 통신을 할 수 있습니다.

 

그래도 initWebSocket을 주석처리 한 이유는 자원 낭비를 하지 않기 위해서입니다.

 

서버와 클라이언트가 계속 연결을 유지하기 위해서 서버의 자원과 네트워크 대역폭을 사용해야 하기 때문입니다.

 

따라서 실시간으로 통신하는 것이 아니라면 웹 소켓 연결을 유지할 필요 없습니다.

 

클라이언트 화면

 

input 입력창에 텍스트를 입력하고 전송 버튼을 클릭하면

 

해당 텍스트를 웹 소켓으로 전달합니다.

 

 

클라이언트로부터 받은 메시지와 서버가 전송한 메시지를 서버 로그로 확인할 수 있습니다.

 

 

마찬가지로 클라이언트로부터 받은 메시지와 서버가 전송한 메시지를 크롬 개발자 도구에서 확인할 수 있습니다.

 

주로 AJAX를 통해서 클라이언트와 서버가 통신하는 것 외에 웹 소켓이라는 것도 있다는 것을 알아두면 좋을 거 같습니다.

'dev > 스프링' 카테고리의 다른 글

Spring Boot Logback  (0) 2023.06.21
Spring Enum 활용  (0) 2023.06.05
Spring DI  (0) 2023.02.07
SSO 로그인 연동  (0) 2023.01.10
spring profile 설정  (0) 2022.09.29