WebSocket

조예빈·2024년 5월 13일
0

Spring

목록 보기
10/19

웹소켓

  • 하나의 TCP(전송 제어 프로토콜) 접속에 전이중(쌍방향 통신) 통신 채널을 제공하는 컴퓨터 통신 프로토콜

    출처

  • 서버가 내용을 클라이언트에 보내는 표준화된 방식 제공 -> 연결이 유지된 상태에서 메시지들이 오갈 수 있게 허용

  • 반드시 http 프로토콜을 기반으로 생성됨

  • 웹 브라우저와 웹 서버 간의 양방향 통신을 지원하는 프로토콜

  • 클라이언트에서 서버로 요청을 보내고 서버는 그에 대한 응답을 보내는 단방향 통신 모델(http 프로토콜의 단점)을 극복하기 위해 개발됨

특징

  • 실시간으로 데이터를 주고받을 수 있음
  • 서버 또는 클라이언트 측에서 데이터를 보낼 때 지연 시간을 최소화하고 효율적인 양방향 통신을 구현할 수 있음
  • 실시간 채팅, 온라인 게임, 주식 시장의 실시간 데이터 전송에서 활용
  1. 양방향 통신 : 서버는 클라이언트로부터 요청 없이도 데이터를 전송할 수 있음
  2. 지속적 연결 : 연결을 계속 유지하기 때문에 데이터를 전송하거나 수신하기 위해 매번 새로운 연결을 설정할 필요가 없음
  3. 낮은 지연 시간 : 헤더 정보의 크기를 최소화하고, 연결 설정과 해제에 드는 시간을 줄여 실시간 통신에서 높은 성능을 제공함
  4. 프레임워크 지원 : 많은 프레임워크와 라이브러리에서 웹소켓을 지원하고 있어 상대적으로 쉽게 구현하고 사용할 수 있음
  5. 이벤트 기반 : 서버와 클라이언트 간의 데이터 전송은 이벤트 기반으로 이루어짐

동작 원리

  1. Handshake : 웹소켓 연결은 http를 통해 시작됨(클라이언트가 서버에게 웹소켓 연결을 요청하면 클라이언트와 서버 간에 핸드쉐이크 과정 발생). 클라이언트 : http Upgrade 요청 헤더를 사용하여 웹소켓 연결로 업그레이드. 서버 : 승인하여 101 Switching Protocols 응답을 보냄
  2. 연결 유지(Keeping Connection) : 핸드쉐이크 이후에는 TCP 기반의 연결이 설정되며, 이 연결은 지속적으로 유지됨 -> 양방향 데이터 전송 가능
  3. 데이터 교환(Data Exchange) : 데이터를 메세지의 형태로 주고받으며, 메세지는 이벤트 기반으로 동작. 클라이언트와 서버는 언제든지 메세지를 보낼 수 있음
  4. 연결 종료(Connection Termination) : 클라이언트, 서버가 종료 프레임을 보내면 연결이 명시적으로 닫힘. 만약, 연결이 비정상적으로 종료되면 네트워크 등의 문제로 연결이 끊어진 것으로 판단.
  5. 프로토콜과 데이터 형식(Protocol and Data Format) : 메세지는 프레임 단위로 나눠지며, 각 프레임은 데이터를 포함하거나 컨트롤 명령을 전송하는 데 사용

연결법

  1. 클라이언트가 서버에 http로 웹소켓 요청을 보냄(웹소켓을 열어달라고 부탁하는 코드를 보냄. ws://~)
  2. 클라이언트가 보낸 메세지를 받으면 서버가 허락하며 http 요청을 웹소켓으로 업그레이드 해 줌 -> 양방향 시작
  3. 서버가 유저에게 메세지를 보냄
profile
컴퓨터가 이해하는 코드는 바보도 작성할 수 있다. 사람이 이해하도록 작성하는 프로그래머가 진정한 실력자다. -마틴 파울러

0개의 댓글