Playcloud8
실시간/채팅

웹소켓과 폴링, 실시간 채팅은 왜 다른 방식을 쓸까

2026-07-11  ·  조회 35
채팅처럼 "누가 언제 메시지를 보낼지 알 수 없는" 기능을 구현할 때, 가장 먼저 떠오르는 단순한 방법은 클라이언트가 몇 초마다 서버에 "새 메시지 있어요?"라고 반복해서 물어보는 폴링(polling) 방식입니다. 폴링은 구현이 간단하다는 장점이 있지만, 근본적인 한계가 있습니다. 새 메시지가 없을 때도 매번 요청과 응답을 주고받아야 하므로 불필요한 트래픽이 계속 발생하고, 요청 주기보다 짧은 간격으로 메시지가 오면 그만큼 지연이 생깁니다. 주기를 짧게 잡을수록 실시간에 가까워지지만 서버 부하는 그만큼 커지는 트레이드오프가 생깁니다. 웹소켓은 이 문제를 다른 방식으로 해결합니다. 처음 한 번 HTTP 요청으로 연결을 맺은 뒤(핸드셰이크), 이후에는 이 연결을 계속 열어둔 채로 서버와 클라이언트가 양방향으로 언제든 메시지를 주고받을 수 있는 통로를 만듭니다. 새 메시지가 도착하면 서버가 클라이언트에게 그 즉시 데이터를 "밀어(push) 보내는" 것이 가능해지므로, 불필요한 반복 요청 없이도 즉각적인 반응이 가능합니다. 다만 웹소켓 연결은 계속 유지되는 상태(stateful)이기 때문에, 일반적인 무상태(stateless) HTTP 요청과는 서버 구조상 다르게 다뤄야 합니다. 연결이 얼마나 유지되고 있는지, 연결이 끊겼을 때 어떻게 재연결할지 같은 것들을 별도로 관리해야 하는 복잡성이 따릅니다. 이 사이트의 실시간 채팅은 웹소켓 기반으로 동작하기 때문에, 채팅방에 새 메시지가 도착하면 새로고침 없이도 바로 화면에 반영됩니다.

바로 직접 체험해보세요

🚀 실시간 채팅 사용해보기