# HTTP, SSE, Polling 알아보기

채팅 서비스를 HTTP로 구현한다면 메시지를 받기 기능을 구현하기 위해 일정 시간마다 계속해서 request 요청을 서버에 보내고 response를 서버로부터 받아야 한다. (Polling) 방식

하지만 WebSocket 통신 구조를 이용한다면 클라이언트와 서버 간의 **실시간 양방향 통신**을 가능하게 해주는 통신 프로토콜이다. 클라이언트 -> 서버로의 요청이 아닌 , 클라이언트의 요청 없이도 서버가 클라이언트에게 실시간으로 정보를 보내줄 수 있다.

HTTP 통신이 아니기 때문에 ws\:// url을 가진 웹소켓 프토토콜을 이용한다.

HTTP는 기본적으로 비연결형 프로토콜로, 클라이언트가 매번 서버에 요청을 보내 새롭게 TCP 연결을 시도하며, 요청 처리 후 연결을 끊는다.

* 매번 요청을 통해 연결을 맺고 끊어야 하고, 그때마다 http 메시지를 보내야 하므로 지속적 통신에 있어서 성능저하가 발생한다.

웹소켓은 연결형 프로토콜로 , 최초 1번만 연결이 성공적으로 이루어지면 WebSocket 프로토콜로 업그레이드하여 TCP 연결을 유지한다.

* 한번만 연결을 맺고 나면 그 뒤엔 별도의 http 메시지 없이 통신이 가능해 빠른 성능 보장
* 웹소켓도 최초 한번의 연결시 HTTP 헤더를 통해 token과 같은 인증 정보를 보낼 수 있고, 이때에 이를 통해 인증처리를 할 수 있다.&#x20;

일정 주기마다 http를 통해 request를 보내는 것이 바로 Polling 방식이다. 마치 메시지가 실시간으로 오는 것처럼 보이게 만들 수 있다.

Websocket의 경우는 클라이언트와 서버 간 지속적인 연결을 유지해야하긴 하지만 메시지를 직접 주고 받음으로써 불필요한 request 요청이 필요가 없다.

HTTP 프로토콜이 아니기 때문에 메시지가 더 가벼움(HTTP 헤더 등이 필요 없음)

다만 커넥션 유지를 위한 메모리 필요

SSE(Server-sent Events) 기능은 **HTTP 기반**의 클라이언트와 서버 간의 실시간 단방향 통신을 가능하게 한다.

* sse 프로토콜을 사용한 통신방식은 방향이 서버 -> 프론트엔드로의 **단방향 통신**이다.
* 프론트에서 서버로의 데이터 전송은 일반적인 HTTP 통신이다.
* 서버는 클라이언트에게 지속적으로 데이터를 전송할 수 있다. 사용자에게 알림을 구현하기 위해 사용함.'
