Spring & WebSocket

Haechan Kim·2023년 4월 3일
0

Spring

목록 보기
34/68

WebSocket

웹 소켓 -> 전이중 통신 채널 제공해 "실시간성" 보장할 수 있음

HTTP vs WebSocket

http에서도 실시간성 보장하는 듯한 기법 존재.
polling, streaming 등과 같은 기능.
클라이언트가 서버에게 지속적으로 요청을 보낸다던지, 한번 요청을 보낸 후 커넥션을 끊지 않는 식의 방법.

둘의 가장 큰 차이는 -> 수립된 커넥션을 어떻게 하는지?

HTTP

  • 비연결성 (클라가 요청 보낼때마다 연결 맺고 응답 단은 후 연결 끊음) -> 3 way handshake
    ㄴ 요청과 응답이 한 쌍을 이루는 구조 -> 항상 요청 보내야 함.

  • 탁구
    ㄴ http 프로토콜 사용 시 많은 정보 계속 왔다갔다 해야 함.

WebSocket

  • 연결 유지 (한번 연결 맺으면 한쪽에서 연결 끊으라는 요청 있기 전까지 계속 연결 유지) -> 매번 연결마다의 비용 줄일 수 있음

  • 양방향 통신

  • 전화
    ㄴ 걸기만 하고 연결된 채널 통해 그냥 듣고만 있으면 됨.
    한번 연결 맺은 뒤 유지, 간단한 메시지들만 오감.
    통신 또 와도 한줄, 경제적.

웹소켓 지원하지 않는 환경에서는 sockJs, socket.io 라이브러리 사용하면 됨. (streaming, polling 방식 사용)

Spring-WebSocket

스프링 웹 소켓 사용하려면
-> 클라가 보내는 통신 처리할 핸들러 필요
인자로 받아오는 웹소켓 세션. -> http 세션과는 다름.
웹 소켓이 연결될 때 생기는 연결 정보 담고 있는 객체

핸들러에서 웹 통신 처리 위해 세션 컬렉션으로 담아 관리하는 경우 많다.
커넥션 맺어질 떄 컬렉션에 세션 추가, 끊어질 때 제거

cors 설정도 가능.

Spring Messaging

STOMP 프로토콜 (Simple Text Oriented Messaging Protocol)

메시지 브로커 활용하여 pub/sub 방식으로 클라와 서버가 쉽게 메시지 주고 받을 수 있게 하는 프로토콜.

pub/sub (publish / subscribe) : 발신자가 메시지 발행하면 수신자(구독자)가 그것을 수신하는 메시징 패러다임.

pub(publisher)가 topic에 메시지를 보내면 해당 topic을 구독해놓은 sub(subscriber) 모두에게 메세지가 전송되면서 데이터 교환이 이루어지는 방법.

pub/sub 패턴은 비동기식 메시징 패턴 -> publisher가 연산해야 할 다른 topic(task)을 publish 하면 topic(task)를 가져갈 subscriber가 받아서 받은 task를 처리하고, 처리하는 시간 동안 publisher는 다른 작업을 수행할 수 있다는 장점이 있다.

메시지 브로커 : 발신자의 메시지 받아와서 수신자(구독자)들에게 메시지 전달하는 어떤 것.

웹소켓은 텍스트와 바이너리 타입의 메시지를 양방향으로 주고받을 수 있는 프로토콜 인데, 그 메시지를 어떤 형식으로 주고 받을 지는 따로 정해진게 없다. -> STOMP 사용하면 됨.

STOMP 사용 장점

  • 하위 프로토콜, 컨벤션 따로 정의할 필요 x
  • 연결 주소마다 새로 핸들러 구현, 설정할 필요 x
  • 외부 메시징 큐 (RabbitMQ, 카프카 등) 사용 가능
  • 스프링 시큐리티 사용 가능

https://www.youtube.com/watch?v=rvss-_t6gzg







0개의 댓글