Spring WebSocket에 대하여

강동현·2025년 4월 19일
0

Spring Websocket

목록 보기
1/9
post-thumbnail

이번엔 웹소켓에 대해서 처음부터 공부를 해보려고 한다. websocket이 뭘까 어떻게 연결되고 사용되는지 여기서 나오는 개념들이 뭔지 하나씩 파헤쳐 보자.

spring websocket Architecture

간략하게 전체적인 구성을 보고 한번 개념에 대해서 알아보자. spring boot에서 사용하는 웹소켓 아키텍처는 다음과 같다. 음 일단 흐름만 봤을 때는 보내는 방식이 2가지가 있고 내부에 simple broker라는 걸 통해서 메시지가 전달된다는 걸 확인할 수 있다.

웹소켓 연결 방식은 어떻게 될까??

웹소켓은 클라이언트와 서버간의 하나의 TCP 연결을 통해서 실시간으로 데이터를 주고받을 수 있게 하는 통신 프로토콜이다.

특징

  • 전이중(Full-duplex) 통신 : 한번 연결이 되면, HTTP처럼 요청-응답 구조가 아니라 양쪽 모두 원할 때 언제든지 독립적으로 데이터를 보낼 수 있다.
  • 단일 TCP 연결 : 최초 연결 시 핸드셰이크 과정을 거친 후 동일한 TCP 연결을 계속 유지한다.

프로토콜 스키마 -> 일반은 ws:// 보안 연결은 wss:// 스키마 사용

HTTP와의 차이점

  • HTTP : 클라이언트가 요청을 보내야만 서버가 응답을 보낼 수 있는 단방향성 구조
  • Websocket : 한번 연결되면 그 연결이 계속 유지되고 클라이언트 요청이 없어도 푸시해줄 수 있다.

Websocket으로 만들 수 있는 프로젝트

오버헤드가 적고 빠른 응답 시간을 요구하는 프로젝트들을 다 한번쯤을 고려해볼 만한 기술이다.
채팅, 알림, 데이터 시각화, 게임 등등

Websocket 기능을 사용하기 위한 핵심 요소

  • spring-websocket : 웹소켓 프로토콜 자체에 대한 핵심 자원을 제공한다.
  • spring-messaging : 메시징 처리 추상화를 제공하고 websocket과 긴밀하게 연동된다.
    그래서 웹소켓을 메시지 큐처럼 처리할 수 있는 것이다.

저수준 API 사용

spring websocket을 저수준에서 관리하고 사용할 수 있는데 WebsocketHandler 라는 핸들러를 사용하면 된다.

이는 웹소켓 연결의 생명 주기(연결, 메시지 수신, 연결 종료 등) 이벤트를 직접 처리하고, 개별 메시지를 바이트 단위까지 제어하고 싶을 경우 사용된다.

WebSockerHandler 인터페이스를 구현하고 WebSocketConfigurer를 통해서 이 핸들러를 등록하는 방식으로 구현하면 된다.

고수준 메시징 STOMP

STOMP는 웹소켓 위에서 동작하는 메시징 프로토콜이다. 마치 구독 발행 모델처럼 메시지를 보내거나 구독하는 방식으로 동작한다.
@EnableWebSocketMessageBroker 어노테이션과 @MessageMapping, @SendTo 같은 어노테이션으로 간단하게 구현할 수 있다.

보통의 경우 STOMP를 활용한 고수준의 메시징 방식이 더 개발 생산성이 높다. 이해가 필요하지만..

만약에 웹소켓을 지원하지 않는 환경이라면?

모든 웹 브라우저나 네트워크 환경이 웹소켓을 지원하지 않을 수 있다. 그런 경우 SockJS라는 라이브러리를 제공한다. 이를 가지고 처음에 websocket 연결을 우선 시도하고 실패할 경우 HTTP 스트리밍이나 롱 폴링 같은 기술을 사용하여 최대한 유사하게 경험을 제공해 줄 수 있다.

마무리

이렇게 간단하게 처음에는 기본 개념에 대해서 알아보게 되었는데 간단하게 전체적으로 어떻게 동작하는지에 대해서 느낌이 왔다면 성공이다. 처음부터 깊에 알 순 없다. 처음엔 간단하게 이해하고 그 뒤로 가면서 더 깊이있는 내용을 공부하는게 효율이 좋은 것 같다.

profile
스스로에게 질문하고 답을 할 줄 아는 개발자

0개의 댓글