HTTP vs WebSocket

heyhey·2022년 12월 19일
0

network

목록 보기
4/15

web socket

웹소켓을 알아보기 전에 http와의 차이를 알아야 한다.

HTTP

HTTP 통신이란?

HTTP 는 Hyper Text Transfer Protocol로 HTML 파일을 전송하는 프로토콜을 의미한다.
웹 브라우저에서 통신이 일어나며, 현재는 JSON, Image 파일 등도 전송 가능하다.

HTTP 통신 방식

클라이언트가 서버로 요청을 보내고 서버가 응답하는 방식으로 통신이 이루어진다. 응답에는 클라이언트의 요청에 따른 결과를 반환한다.
이로 인해 다음과 같은 특성을 갖는다.

클라이언트의 요청이 있을 때 서버가 응답하는 방식 = 단방향 통신
연결상태가 유지되지 않는다 (stateless)

HTTP는 비연결성의 특징을 갖고 있으므로 실시간 통신에 어울리지 않지만, 구현은 가능하다.

HTTP의 실시간 통신 방식

1. Polling

  • 브라우저가 일정한 주기마다 서버에 HTTP 방식으로 보내는 방식
  • 실시간 데이터의 업데이트 주기는 예측 불가능하므로, 불필요한 요청에 따라 서버의 부하가 늘어난다.
  • 실시간 야구 중계 (5~10초 간격으로 업데이트)

장점 :

  • 실시간성이 떨어져도, 여러대의 클라이언트와 통신을 할 때 사용
    • ex) facebook 온라인 친구 확인

단점 :

  • time ineterval 에 따라 서버의 부하가 올라간다.
  • 실시간성이 떨어지는 trade off 관계를 갖는다.

2. Long Polling

  • polling의 서버 부하를 줄이면서 실시간성을 높이는 방식
  • HTTP 요청 시 서버는 해당 연결을 해제하지 않고 일정시간 대기 시킨다. 대기 시간 중 업데이트가 일어날 경우 클라이언트에게 응답을 보내고 전달 받은 데이터를 처리한다. 응답받은 클라이언트는 바로 서버에 다시 연결을 보낸다.
  • 브라우저의 요청이 있어도 요청한 서버의 데이터 변경이 없으면 보내지 않는 것
  • 응답이 와서 연결이 끊기면 클라이언트가 서버에 다시 요청한다.

단점 :

  • 여러 클라이언트와 잦은 데이터 변경이 일어나면 부담이 크다.
    • 수천대의 클라이언트와 연결된 서버에서 한명이 채팅을 쓰면 데이터가 변경되어 server는 변경된 데이터를 연결된 모든 클라이언트에게 모두 response를 보내고, 다시 모든 clinet에게 request를 받으므로 순간적으로 queue가 쌓여서 서버에 부담이 된다.
  • 서버의 부하도 줄이고, 실시간성도 높이지만 대규모 클라이언트와 연결되어 있고 데이터가 자주 변경된다면 서버에 부담이 된다.
  • 웹 1:1 채팅, 10명 이하의 채팅에 유리

3. Streaming

  • long polling 서버의 부하를 줄일 수 있다.

  • 요청에 대한 응답을 완료하지 않은 상태에서 데이터를 계속 내려받는 형식
    -> 따라서 응답을 받더라도 연결을 끊고 다시 request요청을 보내는 과정이 없고 계속 응답을 받아 처리한다.

  • 서버에 연결 요청을 보내놓고 계속해서 응답 데이터를 다운받는다. 서버는 이벤트가 발생하면 응답을 보낸다.

소켓 통신

소켓이란 두 프로그램이 서로 데이터를 주고 받을 수 있는 양쪽에 생성되는 통신 단자이다.
즉 서버 역시 client에게 요청을 보낼 수 있는 통신이다.
Full - Duplex 방식 (동시에 송수신이 가능한 양방향 통신)

서버와 클라이언트 서로에게 데이터 전달이 이루어지는 통신이다. = 양방향 통신

클라이언트와 서버가 특정 포트를 통해 연결을 성립하고 있어, 실시간으로 양방향 통신을 할 수 있다.

스트리밍이나 실시간 채팅 등 실시간으로 데이터를 주고 받는 경우 많이 사용한다.
계속해서 연결이 유지되야하기 때문에 HTTP 통신에 비해 많은 리소스가 소모된다.

  • 최초 접속이 일반 http 요청을 이용한 handshaking으로 이뤄진다.
  • TCP socket은 바이트 스트림을 사용하지만, web socket은 UTP-8의 텍스트와 바이너리 둘다 가능하다.
  • TCP 라인을 통해 지속적으로 연결상태가 유지된다. (stateful)
    • 서버와 클라이언트가 한번 연결되면 계속 같은 라인을 사용해 통신하므로 HTTP 사용시 필요없이 사용하는 HTTP와 TCP 연결 트래픽을 피할 수 있다.
    • 웹소켓은 최초접속을 제외하면 헤더 정보를 보내지 않지만, HTTP 프로토콜은 요청을 할 때마다 헤더정보를 보내게 되므로 네트워크 비용에서 이득이다.
    • 80,443 포트를 그대로 사용가능하고, 모든 인증들을 기존과 동일하게 이용 가능하다.

작동원리

  • 웹소켓 연결을 위해 http 통신을 한다.
  • handshaking이 이루어지면 HTTP -> 웹소켓 프로토콜로 변경하는 프로토콜 스위칭이 이뤄진다.
  • 웹소켓을 위한 소켓이 생성되고 해당 소켓으로 전이중 통신을 한다.
  • https 와 마찬가지로 ws , wss 가 있다.

결론 : 웹에서 실시간 통신을 위해서 대부분 web socket방식을 이용하는 추세이다.

profile
주경야독

0개의 댓글