Web Socket에 대하여

Y39·2023년 4월 8일
0

toBeProgrammer

목록 보기
82/88

웹소켓

: 두 프로그램 간의 메시지를 교환하는 통신 방법

1. 개념

  • 현재 인터넷 환경(HTML5)에서 많이 사용되고 있다.

2. 특징

  • 양방향 통신
    • 데이터 송수신을 동시에 처리가능
    • 클라이언트와 서버가 서로가 원할 때 데이터 교환
    • 통상적인 Http 통신: 단방향(client의 요청)
  • 실시간 네트워킹에 유용
    • 웹 환경에 빠르게 데이터를 계속해서 갱신해야하는 경우
      • 채팅, 주식, 비디오
    • 여러 단말기에 빠르게 데이터 교환

3. 이전의 통신

  • Polling
    • 서버에 일정 주기마다 요청 송신
      • 언제 통신이 발생할지 예측이 불가능해서 계속 요청을 보내는 것
  • Long polling
    • 요청 후에 응답을 받을 때까지 연결 종료 x
      • 응답을 받으면 연결 종료 후 다시 재요청
    • 많은 양의 데이터를 다룰 때는 polling과 비슷한 성능
  • streaming
    • 서버에 요청을 보내고 연결을 유지하면서 데이터 수신을 함
    • 단점: 클라이언트에서 서버로 데이터 송신이 어려워짐

결론:

모든 방법이 HTTP를 통해 통신을 함

⇒ Request, Response 모두 Header가 불필요가 커짐

4. 동작 방법

  • 핸드 쉐이킹
    • HTTP의 헤더로 서로간의 연결을 보장
    • 프로토콜이 WS(또는 WSS)로 변경됨
      • 단위는 messge, frame이 모여 구성됨
      • frame: 작은 헤더를 갖고 있음
      • 원하는 데이터를 송수신
      • 송수신이 완료되면 연결을 종료

5. 특징

  • 최초 접속할 때에만 Http 프로토콜 사용
    • http header을 이용해서 handshaking 시작
  • 웹소켓을 위한 별도의 포트는 없고, 기존 포트 사용(http-80, https-443)
  • 프레임으로 구성된 메시지라는 논리적 단위로 송수신
  • 메시지에 포함될 수 있는 교환 가능한 메시지는 텍스트와 binary

6. 한계

  • HTML5 이전의 기술로 구현된 서비스에서는?
    • Socket.io, SockJS 를 사용해서 소켓처럼 구현가능하게 도움
    • 브라우저와 웹 서버의 종류와 버전을 파악 → 가장 적절한 기술로 소켓처럼 구현
  • 문자열을 주고 받을 뿐 그 이상의 기능은 없음
    • 문자열 해석은 모두 애플리케이션에게 맡김
  • STOMP
    • 채팅 통신을 하기 위한 형식을 정의
    • HTTP처럼 해석하기 편한 프로토콜
    • 일반적으로 웹소켓 위에서 사용됨
profile
System.out.print("Bold")

0개의 댓글