🔷 실시간, 양방향 통신을 가능하게 하는 기술
소켓(Socket)
의 정의엔드포인트(EndPoint)
클라이언트가 서버에 요청을 보내고, 서버가 이에 대한 응답을 보낸다.
이 방식은 웹 페이지를 처음 불러올 때는 효율적이지만, 실시간으로 데이터를 교환해야 하는 웹 애플리케이션에는 적합하지 않다. 예를 들어, 채팅 애플리케이션에서는 사용자 간의 메시지가 실시간으로 전송되어야 하며, 이를 위해서는 서버와 클라이언트 간에 지속적인 연결이 필요하다.
이러한 필요성으로 인해 웹 소켓이 개발되었다. 웹 소켓은 한 번의 핸드셰이크(Handshake)
를 통해 연결을 맺은 후, 서버와 클라이언트 간에 양방향 통신을 지속적으로 유지할 수 있다. 이는 데이터를 실시간으로 교환할 수 있게 해주며, HTTP 폴링(polling)
이나 롱 폴링(long-polling)
과 같은 기존의 방법들보다 훨씬 효율적이다.
💡 핸드셰이크 (Handshake)
클라이언트와 서버 간에 초기 연결을 설정하는 과정. 웹소켓 프로토콜에서는 클라이언트가 서버에 연결 요청을 보내고, 서버가 이를 수락함으로써 양방향 통신 채널을 열게 된다.
💡 HTTP 폴링 (HTTP Polling)
클라이언트가 정기적으로 서버에 요청을 보내어 새로운 데이터가 있는지 확인하는 방식. 이 방식은 실시간 통신이 필요한 애플리케이션에서 종종 사용되지만, 서버에 부담을 줄 수 있다.
💡 롱 폴링 (Long Polling)
폴링의 변형으로, 클라이언트의 요청에 대해 서버가 새로운 데이터가 생길 때까지 응답을 지연시키는 방식. 즉, 클라이언트는 요청을 보내고 서버는 새로운 데이터가 준비될 때까지 이 요청을 유지한다.
🔷 2008년 웹 애플리케이션에서 실시간 통신을 구현하기 위한 실험적인 프로젝트로 시작
이후 2011년에 웹 소켓 프로토콜(WebSocket Protocol)이 IETF(Internet Engineering Task Force)에 의해 RFC 6455로 공식화되었다.
같은 해, W3C(World Wide Web Consortium)는 웹 소켓 API를 표준으로 채택했다.
양방향 통신
클라이언트와 서버가 동시에 데이터를 주고받을 수 있다.
지속적인 연결
한 번의 연결로 지속적인 데이터 교환을 가능하게 한다.
낮은 오버헤드
초기 핸드셰이크 후에는 데이터 페이로드에만 초점을 맞춰 통신한다.
실시간성
데이터가 생성되는 즉시 전송이 가능하다, 이는 실시간 웹 애플리케이션에 이상적이다.
🔷 실시간 웹 애플리케이션을 위한 JavaScript 라이브러리
💡 폴백 옵션
기본 기술이나 방법이 사용할 수 없거나 적합하지 않을 때 대체로 사용되는 기술이나 방법을 의미한다. IT와 프로그래밍에서 폴백은 일반적으로 호환성이나 접근성을 보장하기 위해 사용된다.
실시간 양방향 통신
Socket.IO는 클라이언트와 서버 간에 실시간 데이터 교환을 가능하게 한다.
자동 재연결 지원
네트워크 연결이 끊어진 후 자동으로 재연결을 시도한다.
방(Room) 기반의 브로드캐스팅
특정 그룹의 사용자에게만 메시지를 브로드캐스트하는 기능을 제공한다.
다양한 트랜스포트 지원
웹소켓 뿐만 아니라 AJAX 롱 폴링 등 여러 트랜스포트 메커니즘을 지원한다.
이진 데이터 지원
이미지나 비디오 같은 이진 데이터의 전송이 가능하다.
채팅, 음성 대화, 실시간 보드 협업 반영 등 계속해서 실시간으로 서버와의 통신이 이루어진다. 실시간 양방향 통신이 필수적인 기술이라는 것.
socket.io의 방 기반의 브로드캐스팅 덕에 프로젝트 및 채팅 공간을 같은 팀원끼리만 공유할 수 있다.
결정적으로 이미 Node.js를 경험한 내 입장에서 쉽다.
const http = require('http').createServer();
const io = require('socket.io')(http);
io.on('connection', (socket) => {
console.log('A user connected');
socket.on('chat message', (msg) => {
io.emit('chat message', msg);
});
socket.on('disconnect', () => {
console.log('User disconnected');
});
});
http.listen(3000, () => {
console.log('Listening on *:3000');
});
웹 소켓은 현대 웹 애플리케이션에서 빼놓을 수 없는 중요한 기술이다. 실시간 채팅, 게임, 금융 서비스 등 다양한 분야에서 웹 소켓의 장점이 활용되고 있다. 양방향 소통의 꽃, 채팅은 물론이고 실시간 협업 보드의 구현을 통해 웹 소켓 기술을 완전히 마스터할 생각이다.