WebSocket가 없을 때 어떤식으로 통신을 했을까?

웹소켓이 등장하기 전, 우리는 실시간 통신을 흉내 내기 위해 Polling 방식을 사용했습니다.
Polling은 클라이언트가 일정 주기로 서버에 데이터를 요청하고, 서버가 그때마다 응답하는 구조입니다.
이때 요청을 보낼 때 사용하는 도구로 fetch, axios가 활용됩니다.
setInterval(async () => {
const response = await fetch('/api/notifications/latest');
const data = await response.json();
if (data.hasNew) {
console.log('📢 새로운 알림:', data.message);
}
}, 5000); // 5초마다 알림 확인
Polling의 가장 큰 단점은 실시간성 부족과 서버 부하 증가입니다.
예를 들어, 채팅 시스템에서 매번 새로운 메시지가 있는지 확인하기 위해 주기적으로 서버에 요청을 보내면 대부분 "변경 없음" 응답을 받게 되어 불필요한 트래픽이 발생합니다.
이로 인해 서버와 네트워크에 큰 부담이 생기며, 많은 사용자가 몰릴 경우 서버가 과부하로 느려질 수 있습니다.
그렇다면 Polling은 어떤 시스템에서 활용을 하게될까?
예를 들면 알림이 될 수 있습니다. 메시지 알림처럼 상태 변화 체크가 필요한 시스템에서는 Polling을 통해 5초마다 서버에 응답이 있는지 확인하고 없으면 응답없음 만약 있다면 응답을 하면 확인을 했습니다. 하지만 최근에 WebSocket이 생기며 안쓰는 추세입니다.
Polling은 설정한 시간에 따라 계속 요청을 보냅니다. 응답이 없어도 요청을 계속 보내 알림이 있는지 확인합니다. 이러한 점이 Polling의 단점이자 한계라 볼 수 있습니다.

Polling의 단점을 개선하면서 생긴게 Long Polling입니다.
Long Polling은 Polling과 달리 주기적으로 요청을 보내지 않습니다.
Long Polling은 클라이언트가 요청을 보내면, 서버는 새로운 데이터가 생길 때까지 기다렸다가 응답을 보내는 방식입니다.
만약 서버가 새로운 데이터를 기다리지 않고 바로 응답하게 되면, 결국 일반 Polling처럼 불필요한 요청과 응답이 반복됩니다. 그리고 많은 수의 사용자가 동시에 요청한다면 수 많은 요청을 한번에 응답해야해서 서버에 과부하가 올 수 있습니다.
Long Polling도 WebSocket이 지원되지 않을 때 Polling과 동일하게 알림 또는 초기 채팅 서비스에서 활용되었습니다.
Polling에 비해 개선된 점도 있지만 아직까지는 한계가 뚜렷합니다.

Polling과 Long Polling의 한계를 극복하기 위해 등장한 것이 바로 WebSocket입니다.
WebSocket은 한번의 요청과 응답으로 연결하여 실시간으로 데이터를 처리할 수 있습니다.
WebSocket은 클라이언트와 서버가 한 번 연결을 맺으면, 별도의 요청 없이도 서로 실시간으로 데이터를 주고받을 수 있습니다.
서버와 클라이언트가 지속적으로 연결을 유지해야 하기 때문에 서버 리소스가 많이 필요합니다.
프록시, 방화벽 등에서 WebSocket 트래픽을 제대로 처리하지 못하는 경우가 있어 네트워크 환경에 따라 제약이 있을 수 있습니다.
WebSocket은 실시간 채팅, 실시간 알림, 온라인 게임, 주식 거래 시스템, 실시간 스트리밍 등
실시간 데이터 전송이 중요한 시스템에서 널리 활용됩니다.
이전 Polling, Long Polling에 비해 확실히 좋다는게 느껴지는게 WebSocket입니다. 하지만WebSocket에 대해 알아봤지만 아직은 어떻게 사용해야하는지 감을 못잡았습니다. 이번주는 채팅기능을 계속 만지면서 익숙해지는 시간을 갖겠습니다.