인터넷에서 사용자들로 하여금 창작자가 정보를 만들어내는 즉시 수신할 수 있도록 하는 기술을 말한다.
- 웹은 HTTP 요청-응답 모델을 기반으로 구축됐다.
- HTTP는 무상태 프로토콜이며, 클라이언트와 서버 간의 통신은 각깍의 독립적인 요청과 응답의 쌍으로 구성된다.
- 웹 브라우저에서 폼을 채우고 이를 웹 서버로 제출하는 하나의 요청으로 웹 서버는 요청된 내용에 따라서 데이터를 가공하여 새로운 웹 페이지를 작성하고 응답으로 되돌려준다.
- 사용자 인터페이스 나머지 부분을 방해하지 않고 비동기로 데이터를 송/수신 할 수 있도록 구현됐다.
- 전체 페이지를 다시 로딩하는 것이 아닌 일부분만 변경하기 때문에 빠른 화면 전환이 가능하여 사용자 경험의 증가
전송할 데이터의 유무에 관계 없이 주기적으로 요청을 수행하는 방법
- 클라이언트는 지정된 시간 간격에 맞춰 서버에 지속적인 요청을 보낸다.
- 서버는 각 요청마다 가용 데이터 혹은 데이터가 없은 경우 빈 데이터를 보내거나 실패와 같은 적절한 응답을 보낸다.
- 데이터 유무에 관계 없이 요청하기 때문에 불필요한 네트워크 비용이 발생한다.
- 클라이언트와 서버 자원을 많이 낭비하게 된다.
- 요청 간격이 길면 실시간성이 떨어지게 되고, 반대로 간격이 짧으면 많은 자원을 소비하게 된다.
- 폴링은 서버 이벤트가 일정한 주기로 발생하면 효율적이다.
서버 이벤트가 발생 할 때 까지 응답을 미루는 방법으로, 폴링과 다르게 클라이언트의 요청에 대해 서버가 전송할 데이터가 있거나 타임아웃 될 때 까지 연결을 끊지 않고 지속한다. 서버로부터 응답을 받는 즉시 롱 폴링 요청을 다시 수행한다.
- 폴링과 다르게 불필요한 네트워크 비용이 덜 발생하며, 서버 이벤트가 발생하는 즉시 응답하기 때문에 실시간성이 높다.
- 반대로 서버 이벤트가 빈번하게 발생하면 폴링보다 더 많은 요청을 수행하여 비효율적이다.
HTTP를 사용하여 서버 푸시를 구현하는 방법으로, HTTP 스트리밍 방식이라고도 하며 SSE 사야에 따라 구현한 방법이다.
- 클라이언트가 요청을 보내면 서버는 무기한 연결을 유지하고, 준비가 되면 데이터를 보낸다.
- 서버 이벤트가 발생하면 응답을 완료하여 연결을 끊는게 아니라 응답 스트림에 청크 단위 데이터를 계속 보낸다.
- HTTP를 사용하기 때문에 기존 개발 방식과 다르지 않고, HTTP 헤더로 인한 오버헤드가 거의 없다.
- 응답 / 요청시에만 헤더를 사용하고 나머지는 청크 단위 데이터를 보내기 때문이다.
- 연결이 유지되기 때문에 실시간성이 매우 높으며, 연결이 끊긴 경우 재접속 처리를 자동으로 해준다.
- 서버->클라이언트로의 단방향 통신만 가능하다.
HTTP가 아닌, 웹 소켓을 사용하여 실시간 양방향 통신을 지원하는 방법이다. HTTP를 통해 웹 소켓 프로토콜로 전환하는 handshake과정이 필요하며, 이 후 웹소켓을 통해 통신이 이루어진다.
- HTTP를 사용하지 않아 전체 메시지 크기가 줄어들고, 클라이언트와 서버의 자원을 최소화 할 수 있다.
- 양방향으로 빠른 요청,응답이 가능하다.
- 서버 개발을 할 수 없는 상황
- 외부 API가 서버 푸시를 지원하지 않는 상황
- 새로운 데이터를 즉시 수신만해도 되는 상황
- ex) 알림, 실시간 댓글
- 네트워크 지연을 최소화 해야하는 상황
- 채팅, 게임과 같이 사용자간 빠른 피드백이 이루어져야 하는 상황