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