Skip to content

Latest commit

 

History

History
30 lines (16 loc) · 2.23 KB

File metadata and controls

30 lines (16 loc) · 2.23 KB

Server Push

Server Push는 HTTP/2에 추가된 기능으로 클라이언트 요청 없이 서버에서 미리 클라이언트로 데이터를 보내주는 기능입니다. 기존에는 클라이언트가 서버에 요청을 보내면, 서버가 클라이언트로 응답해 주는 구조로 되어 있습니다. 클라이언트 요청 없이는 서버의 응답을 받을 수 없으므로 Server Push를 사용해서 해결할 수 있습니다.

서버가 클라이언트에게 어떤 기준으로 미리 응답을 해줘야 할지 이에 대한 기준이 모호합니다. 또한 클라이언트가 이미 로드한 리소스가 무엇인지 알 수 없으므로 서버가 중복 응답을 보낼 수도 있습니다. 이런 현실적인 문제로 대부분의 웹서버에는 Server Push 스펙이 구현돼 있지 않고 Nginx에 있던 Server Push 기능도 1.25.1 버전부터 삭제됐습니다.

실제 크롬을 사용하는 유저 중 Server Push를 사용하는 비율은 0.05%에 안 되며 이에 따라 현재 크로미움에서는 Server Push를 지원하지 않고 있습니다.


HTTP/2 Server Push 스펙과 별개로 서버에서 클라이언트로 데이터를 보내기 위해 아래와 같은 방법을 사용할 수 있습니다.

Polling

클라이언트에서 서버로 요청을 보내 Event가 있는지 확인하고 존재한다면 데이터를 받아오는 방법입니다.

클라이언트 주도 하에 구현되기 때문에 클라이언트 부하가 커지는 문제가 발생하고 실시간이 아니라는 단점이 존재합니다.

Long Polling

기존 Polling 방식에서 HTTP 커넥션 유지 시간을 길게 늘인 방법입니다. HTTP 커넥션을 생성할 때 드는 비용을 절약할 수 있습니다.

Streaming

클라이언트에서 요청이 들어오면 이 커넥션을 끊지 않고 계속 재사용하는 방법입니다. 실시간 전송이 가능하지만, 커넥션 유지가 되어야 하므로 서버 리소스를 소모하는 단점이 있습니다.

WebSocket

WebSocket 프로토콜을 사용해 서버의 Event 발생 여부를 확인합니다. 실시간 구현이 가능하고 클라이언트, 서버 간의 양방향 통신이 가능합니다.