ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [원격제어 서비스 준비 1-1편] WebSocket이란?
    회사 생활/모바일 원격제어 서비스 2023. 12. 4. 21:12

    WebSocket 예제 보러가기

     

    WebSocket을 알기 위해서는 먼저 HTTP에 대한 지식이 있다면 좀더 이해하기 쉬울 것이다.

    1. HTTP란 (HyperText Transfer Protocol)

    >>> 텍스트 기반의 통신 규약으로 인터넷에서 데이터를 주고받을 수 있는 프로토콜이다.  (단방향 통신)

     

    사용자가  http가 포함된 url을 통하여 요청(request)을 하면 서버에서는 해당 요청사항에 맞는 결과를 찾아서 사용자에게 응답(response)하는 형태로 동작한다.

     

    특징이라면 요청이 끝나면 연결되있는 것이 아니라 통신이 끊기게 되고 서버는 Client를 기억하지 않는다 (Stateless)

    Stateless와 Stateful의 의미 : 

    더보기

    Stateless는 클라이언트와 서버 관계에서 서버가 클라이언트의 상태를 보존하지 않음을 의미합니다.

    Stateful은 클라이언트와 서버 관계에서 서버가 클라이언트의 상태를 보존함을 의미한다.

     

    하지만!!!

    http 방식의 통신은 실시간 채팅과 같은 상황과는 별로 맞지 않다. 채팅을 할때마다 계속 보내고 끊어지고 보내고 끊어지면 요청하고 응답하는데 시간도 걸리고 짧은 시간에 너무 많은 task를 처리하다보면 서버에 과부하고 올수있기 때문이다.

     

    그래서 대안으로 나온 것이 WebSocket이다.

     

    2. WebSocket이란??

    >>>  WebSocket이란 양방향 통신을 위한 프로토콜로, 클라이언트와 서버 간의 지속적인 연결을 허용한다. (Stateful)

     

    HTTP 프로토콜은 클라이언트가 서버에게 요청을 보내고, 서버가 응답을 보내는 단방향 통신 방식이었습니다. 반면 WebSocket은 한 번의 연결을 통해 양방향 통신이 가능하도록 설계되었습니다.

     

    websocket의 특징은

    1. 양방향 통신: WebSocket은 양방향 통신을 지원합니다. 클라이언트와 서버 간에 언제든지 데이터를 주고받을 수 있습니다.
    2. 실시간성: WebSocket은 실시간 데이터 전송에 적합합니다. 서버에서 클라이언트로 또는 클라이언트에서 서버로 즉시 메시지를 보낼 수 있어, 실시간 채팅, 실시간 게임, 주식 시세 업데이트 등에 유용합니다.
    3. 지속적인 연결: WebSocket은 연결을 계속 유지할 수 있어서, HTTP와 달리 매번 새로운 연결을 맺을 필요가 없습니다. 이로 인해 더 효율적인 통신이 가능합니다.
    4. 낮은 오버헤드: WebSocket은 HTTP와 비교했을 때 더 적은 프로토콜 오버헤드를 가지고 있습니다. 이는 데이터를 전송할 때 불필요한 헤더가 적어지므로, 더 효율적인 통신이 가능합니다.

     

    1. Handshake (핸드셰이크): 클라이언트가 서버에게 웹소켓 연결을 요청하면, 서버는 HTTP를 통한 핸드셰이크를 수행합니다. 이 핸드셰이크 후에 클라이언트와 서버는 WebSocket 연결로 전환됩니다.
    2. 데이터 전송: 한 번 연결이 확립되면 클라이언트와 서버는 양방향으로 데이터를 교환할 수 있습니다. 이 데이터는 여러 프레임으로 나눠져 전송될 수 있으며, 텍스트나 이진 데이터 등 다양한 형태의 메시지를 전송할 수 있습니다.

    Client나 Server에서 종료 요청이 있어야 종료 된다.

     

     

    3. HTTP VS WebSocket

    HTTP 프로토콜과 WebSocket 프로토콜은 웹에서 데이터를 주고받는 데 사용되는 두 가지 다른 프로토콜입니다. 아래는 HTTP와 WebSocket의 주요 차이점을 설명한 것입니다:

    1. 통신 방식:
      • HTTP: HTTP는 클라이언트가 서버에게 요청을 보내고, 서버가 그에 대한 응답을 주는 단방향 통신 프로토콜입니다. 클라이언트는 서버에게 요청을 보내면, 서버는 응답을 보내고 연결이 끊어집니다.
      • WebSocket: WebSocket은 양방향 통신을 지원하는 프로토콜입니다. 클라이언트와 서버는 한 번의 연결을 맺고, 그 연결을 유지한 채 양방향으로 데이터를 주고받을 수 있습니다.
    2. 연결 설정 및 해제:
      • HTTP: 각 요청에 대해 새로운 연결을 설정하고, 응답 후에 연결을 해제합니다. 이는 "요청-응답" 모델을 따릅니다.
      • WebSocket: 한 번의 연결을 설정한 후에는 계속해서 해당 연결을 유지합니다. 이는 "full-duplex" 또는 양방향 통신을 가능케 합니다.
    3. 헤더 오버헤드:
      • HTTP: 각각의 요청과 응답에는 헤더 정보가 포함되어야 합니다. 이로 인해 작은 데이터를 주고받을 때도 상대적으로 많은 오버헤드가 발생할 수 있습니다.
      • WebSocket: WebSocket은 헤더의 오버헤드가 상대적으로 작습니다. 한 번의 연결 설정 후에는 추가적인 데이터 전송에 대한 헤더가 줄어듭니다.
    4. 용도:
      • HTTP: 주로 클라이언트가 서버에게 정보를 요청하고, 서버가 그에 대한 응답을 주는 데 사용됩니다. 주로 "요청-응답" 기반의 통신에 적합합니다.
      • WebSocket: 주로 실시간 통신이 필요한 상황에서 사용됩니다. 실시간 채팅, 온라인 게임, 주가 정보 실시간 업데이트 등과 같은 시나리오에 유용합니다.
    5. 보안:
      • HTTP: 기본적으로 암호화되지 않은 통신입니다. HTTPS를 사용하여 암호화를 추가할 수 있습니다.
      • WebSocket: 암호화를 위해 TLS/SSL을 사용할 수 있으며, 보안 통신을 제공합니다.

    웹에서 사용되는 다양한 프로토콜들은 각각의 특징과 용도에 따라 선택되어야 합니다. HTTP는 정적인 콘텐츠를 주고받는 데 유용하며, WebSocket은 실시간 양방향 통신이 필요한 경우에 사용됩니다.

Designed by Tistory.