본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.




패스트캠퍼스의 '9개 도메인 프로젝트로 끝내는 백엔드 웹 개발 (Java/Spring) 초격차 패키지 Online' 강의 수강 43일차!
오늘은 Websocket을 활용한 실시간 메시징 도메인 서버 개발 강의의 웹소켓 이론에 대한 학습을 진행하였다.
Spring Framework의 WebSocket 지원
1. Web Socket API
: 웹소켓 메세지를 다룰 수 있는 api 제공
- WebSocketHandler: 이진 데이터 또는 텍스트 데이터를 다루기 위한 바이너르 웹소켓 핸들러 또는 텍스트 웹소켓 핸들러를 상속받아 구현하는 것만으로 간단한 웹소켓 서버를 만들 수 있다.
- WebSocket Handshake: 웹소켓의 http 핸드쉐이크를 커스터마이징할 수 있는 핸드쉐이크 인터셉터를 제공. 핸드쉐이크 인터페이스의 beforeHandshake, afterHandshake 메소드를 제공하는데, 이를 구현함으로써 핸드쉐이크 과정 중에 일어나는 인증, 서브 프로토콜 협상 등의 부가적인 작업들을 제어할 수 있다.
- 웹소켓 서버 설정을 자바코드로 제어할 수 있는 기능을 제공한다. 이를 통해 웹소켓의 메세지 버퍼 사이즈, 타임아웃과 같은 설정을 제어할 수 있다.
2. SockJS Fallback
: 웹소켓이 정상적으로 작동하지 않는 환경을 위한 SockJS 프로토콜 지원
- 브라우저상의 SockJS 클라이언트가 웹소켓, 스트리밍, 롱폴링 등의 통신 방법 중에서 적절한 방식을 선택하기 위해서는, 서버로 요청을 보내서 세션/쿠키의 사용 여부 등 여러가지 기본적인 정보들을 받아야 한다. 또한, 프록시에서 연결이 끊기는 것을 방지하기 위해서 서버에서는 프록시로 heartbeat 요청을 지속적으로 보내줘야 한다. 이렇게 SockJS가 작동하기 위한 서버 사이드의 역할들에 대한 지원을 해주는 기능을 한다.
3. STOMP
: STOMP 브로커 기능을 제공
- 웹소켓을 직접 사용하는 것보다 더 풍부한 기능을 제공한다. (메세지 포맷 정의 / 파싱 로직 구현 불필요, 하나의 웹소켓 핸들러에서 처리하던 것을 다수의 컨트롤러에서 처리 가능(@MessageMapping), Spring Security 이용 가능 등)
- @Configuration, @EnableWebSocketMessageBroker 어노테이션을 선언하고, WebSocketMessageBrokerConfigurer 인터페이스를 구현하면 된다.
저번 강의에서 웹소켓에 대한 개념만 학습했을 때는 너무 복잡해 보여서 이걸 어떻게 구현할 수 있을지 상상이 되지 않았는데, 스프링상에서 제공하는 웹소켓 관련 기능이 굉장히 많은 것을 알게 되어 다행이다~