웹 소켓(Web Socket)

diense_kk·2023년 8월 16일
0

SpringBoot

목록 보기
4/10

이번 프로젝트에서 실시간 채팅 기능을 구현하기 위해 공부하던 중에 HTTP로 채팅기능을 구현하는것에 한계를 느껴 웹 소켓에 공부 한 내용을 정리해보겠다.

HTTP의 특징

http통신의 특징은

  • 단방향(비연결성)이다.
  • 클라이언트가 보낸 요청에 대해 서버가 응답을 마치면 연결을 끊어 버리는 비연결성 성질이 있다.
  • request - response 구조이다.
  • 서로 지속적으로 연결되어 있는 형태가 아닌 단방향 통신이기 때문에 통신이 이루어질 때마다 많은 양의 데이터가 오고 간다.

http 통신으로 실시간 채팅을 구현하려면 기존 방법으로는 한계가 존재한다.

실시간 채팅의 동작 과정으로는

  1. 사용자 1이 서버에 메시지를 전송
  2. 서버는 사용자 1로부터 받은 메시지를 사용자 2에게 전송
  3. 사용자 2는 자신에게 온 메시지를 확인

이렇게 동작하는데 http 통신의 문제는 사용자가 요청을 해야 서버가 응답을 하는 request - response 구조이기 때문에 서버가 사용자 2에게 사용자 1에게로부터 메시지가 왔다는 것을 알려주려고 해도 사용자 2가 요청을 보내지 않으면 서버는 혼자 응답을 해줄 수가 없다.

사용자 2도 자신에게 메시지가 왔는지 안 왔는지 알 수가 없기 때문에 언제 서버에게 메시지를 달라고 요청할 수가 없다.

WebSocket

웹소켓은 Web Browser와 Server 간에 메시지 교환을 위한 양방향 통신 규격이다.

웹소켓의 특징

  • 양방향 통신
    클라이언트가 요청을 보내야만 서버가 응답을 하는 단방향 통신과 달리 클라이언트와 서버가 서로 원할 때 데이터를 주고받을 수 있다.

  • Handshake
    WebSocket으로 통신을 하려면 최초 접속 시에 HTTP의 Upgrade 헤더 필드를 사용해서 프로토콜을 WebSocket이라는 프로토콜로 변경하는 핸드쉐이크를 실시한다.

WebSocket Handshake

WebSocket으로 통신하기 위해 클라이언트가 handshake 요청을 보낸다. (HTTP upgrade 헤더를 사용해 HTTP 내의 웹 소켓 프로토콜로 변경) Upgrade: websocket 헤더와 함께 랜덤 하게 생성한 키를 서버에 보내면 해당 요청에 따라 프로토콜을 바꾼다는 상태 코드인 [101 Switching Protocols]으로 반환한다.

맨 처음에 클라이언트가 handshake 요청을 보낸다.

이때 요청에는 Upgrade: websocket 헤더와 랜덤 하게 생성된 키가 담긴 채로 전송된다.

그러면 서버는 해당 요청에 따라 프로토콜을 바꾼다는 상태 코드인 101 Switching Protocols로 응답을 한다.

웹소켓을 이용해 통신을 하게 된다.

WebSocket vs HTTP

  • Http의 특징
    Client가 요청을 보내는 경우에만 Server가 응답하는 단방향 통신
    Server로부터 응답을 받은 후에는 연결이 바로 종료
    실시간 연결이 아니고, 필요한 경우에만 Server로 요청을 보내는 상황에 유리
    요청을 보내 Server의 응답을 기다리는 애플리케이션의 개발에 주로 사용

  • WebSocket의 특징
    Client와 Server가 계속 연결을 유지하는 양방향 통신
    Client와 Server가 실시간으로 데이터를 주고받는 상황이 필요한 경우에 사용 ex) 채팅, 주식

0개의 댓글