ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Web] WebSocket과 SSE의 차이점 정리
    SpringBoot Meteor 2021. 10. 5. 20:47

    저번 주말동안 스프링부트 웹 플럭스(Flux)와 몽고DB를 이용한 채팅서버 구현을 공부하면서

    SSE에 대한 키워드를 알게되었고, 웹 소켓과 어떤식으로 다른지 또 SSE가 어떤건지 정리를 해보려고한다.

     

    웹 플럭스에 대한 공부를 좀 더 진행하고 Spring Web Flux에 대한 정리글 도 올리겠다

    우선 간단하게 SpringWebFlux에 대해 설명을 적어놔야겠다 SpringWebFlux비동기서버개념으로 이해를 하면된다.

    기존 서블릿 기반의 스프링서버는 사용자 request 요청시 마다  스레드가 만들어진다

    이렇게 많은 스레드가 만들어지면 이 스레드를 돌리는동안 컨텍스트 스위칭 비용이 발생하게 된다.

     

    컨텍스트 스위칭이란? 간단하게 정리를... (더 공부가 필요함)

    • 멀티프로세스 환경에서 CPU가 어떤 하나의 프로세스를 실행하고 있는 상태에서 프로세스의 상태 또는 레지스터
       값을 교체하는 작업 컨텍스트 스위칭이라고한다.
       쉽게 예를 들어서 A,B 두개의 팔레트가있으면 A팔레트에 색을 칠하다가 B팔레트로 후다닥 달려가서 B팔레트에
       색을 조금 칠하고 다시 A팔레트로 후다닥 돌아와 칠하고 이런 작업을 반복하면서 하는것이다. 이 과정에서
       색을 칠하는 화가의 체력이 소모되는데 이를 컨텍스트 스위칭 비용이라고 생각하면 되지않을까 싶다.

    그런데 SpringWebFlux Server는 하나의 스레드를 가진다. (즉, 컨텍스트 스위칭 비용이 발생하지 않는다.)

    SpringWebFlux 비동기 서버를 사용하려면 DB또한 비동기DB로 사용해야한다는 점을 주의하자. 

    (나는 몽고DB를 사용했다.)

     

    우선 웹 소켓과 SSE(Server Sent Event)의 가장 큰 차이점은 양방향과 단방향 차이라고 한다.

     

    웹 소켓은 양방향(bidirectional)으로 데이터를 주고 받을 수 있다. 즉 클라이언트에서 서버로 요청이 들어가게되면

    request요청선과 response연결선이 계속 연결되어있다고 생각하면 될 것같다.

     

    SSE(Server Sent Event) 클라이언트에서 서버로부터 데이터를 받을 수만 있다.(mono-directional)

     

    웹 소켓과 , SSE는 필요에 따라 어떤 걸로 구현할지 선택을 하면 될 듯 하다.

     

    웹 소켓

    통신 방향            : 양방향(bidirectional)

    데이터 형태         : binary, urf-8

    최대 동시 접속 수 : 연결한도는 제한이 없다고한다, 하지만 서버셋업에 따라서 차이가 난다.

    프로토콜             : 웹 소켓

    배터리 소모량      : 크다

    SSE(Server Sent Event)

    통신 방향            : 일방향(mono-directional)

    데이터 형태         : urf-8

    최대 동시 접속 수 : HTTP를 통해 연결시 브라우저당 최대 6개, HTTP2를 통해 연결 시 기본 100개

    프로토콜             : HTTP

    배터리 소모량      : 작다.

     

    * SSE(Server Sent Event)란 ?

    서버의 데이터를 실시간으로, 지속적으로 Streaming 하는 기술

    SSE는 웹 표준으로써 IE를 제외한 모든 브라우저에서 지원 (IE는 polyfill을 통해 지원)

    일반적인 HTTP는 TCP를 기반으로 1회성으로 데이터를 주고받은 뒤 response를 한 후 연결을 종료한다.

    하지만 SSE는 첫 연결시에 데이터를 주고받은뒤 request요청은 끊어버리고 response선을 계속 들고있다.

    그 후 서버에서 데이터변화, 또는 데이터를 응답해주는 이벤트가 발생하게 되면 서버가 일방적으로 데이터를

    전송한다.

     

    참고 자료 출처 : https://boxfoxs.tistory.com/403

Designed by Tistory.