즉, WebSocket을 사용하면 서버에서 클라이언트로 데이터를 푸시하거나, 클라이언트에서 서버로 데이터를 전송하는 등의 실시간 상호작용을 쉽게 구현할 수 있어, 이를 통해 실시간 채팅, 주식 시세 업데이트, 게임 등의 애플리케이션을 개발할 수 있다.
오버헤드
가 줄어든다.오버헤드(overhead)는 시스템이나 프로토콜을 실행하기 위해 필요한 추가적인 부하나 자원이다.
HTTP와 같은 기존의 요청-응답 방식에서는 클라이언트가 서버에 요청을 보낼 때마다 새로운 연결을 맺어야 하는데 이는 매 요청마다 TCP/IP 연결을 설정하고 해제하는 과정을 거쳐야 함을 의미한다.
하지만 WebSocket은 "지속적인 연결"을 유지하며, 서버와 클라이언트 간에 데이터를 주고받을 수 있다.
이렇게 연결을 유지하는 것은 매번 새로운 연결을 설정하는 오버헤드를 줄일 수 있다는 의미이다.
즉, 연결 설정과 해제를 반복하는 비용이 사라지기 때문에, WebSocket을 사용하면 효율적인 통신이 가능해진다..
Socket.IO: Socket.IO는 실시간 양방향 통신을 위한 JavaScript 라이브러리이다.
클라이언트 측 JavaScript 라이브러리와 서버 측 Node.js 모듈로 구성되어 있으며, WebSocket을 포함한 다양한 전송 프로토콜을 사용할 수 있다.
SignalR: SignalR은 ASP.NET 기반의 실시간 웹 애플리케이션 개발을 위한 라이브러리이다.
WebSocket을 기반으로 한 실시간 통신 외에도, 기존의 폴링이나 Long Polling과 같은 대체 전송 방식을 지원한다.
SockJS: SockJS는 웹 브라우저와 서버 간에 WebSocket을 포함한 실시간 통신을 제공하는 JavaScript 라이브러리이다. SockJS는 WebSocket이 지원되지 않는 환경에서는 폴링과 같은 폴백 기술을 사용하여 실시간 통신을 대체할 수 있다.
Spring WebFlux: Spring WebFlux는 Spring Framework의 리액티브 웹 개발을 위한 모듈 중 하나로, WebSocket을 포함한 리액티브 웹 애플리케이션을 개발할 수 있다.
Spring WebFlux는 Netty와 같은 비동기 I/O 런타임을 기반으로 작동하여 높은 성능과 확장성을 제공한다.
Django Channels: Django Channels는 Python 웹 프레임워크인 Django를 확장하여 WebSocket을 지원하는 라이브러리이고 Django Channels를 사용하면 Django 애플리케이션에서 비동기 및 실시간 기능을 추가할 수 있다.
Vue.jsdptj WebSocket을 지원하는 프레임워크는 Vue.js 자체의 공식 라이브러리인 Vue-WebSocket이다.
Vue-WebSocket은 Vue.js 애플리케이션에서 WebSocket 통신을 쉽게 구현할 수 있도록 도와준다.
Vue-WebSocket은 Vue 컴포넌트에서 WebSocket 연결을 설정하고 이벤트를 처리하는 기능을 제공하여 실시간 양방향 통신을 구현할 수 있다.
npm install vue-websocket
<!-- index.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Vue WebSocket Example</title>
</head>
<body>
<div id="app">
<h1>WebSocket Example</h1>
<div v-if="message">{{ message }}</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.2.0/socket.io.js"></script>
<script src="main.js"></script>
</body>
</html>
import Vue from 'vue';
import VueWebSocket from 'vue-websocket';
Vue.use(VueWebSocket, 'ws://localhost:8000');
new Vue({
el: '#app',
data: {
message: ''
},
websocket: {
message: {
handler(data) {
this.message = data;
}
}
}
});
new Vue({
// ...
}).$mount('#app');
위의 코드에서는 Vue.js와 Vue-WebSocket을 사용하여 간단한 웹 페이지를 구성하고, WebSocket 서버로부터 메시지를 수신하여 화면에 표시하는 예제이다.
Vue.use()를 사용하여 VueWebSocket을 전역적으로 사용할 수 있도록 설정하고 Vue 인스턴스의 websocket 속성에 WebSocket 이벤트 핸들러를 정의한다.
이 예제에서는 'message' 이벤트를 수신하여 데이터를 받아와 화면에 표시하는 예제코드이다.
또한 WebSocket 서버 주소로 'ws://localhost:8000'을 사용하고 있다.
당연, 해당 주소는 실제 WebSocket 서버의 주소로 변경해야 한다.
또한, WebSocket 서버와의 통신에 사용되는 Socket.IO 라이브러리도 script 태그를 통해 로드되어야 한다.
이렇게 구현된 예제는 WebSocket 서버로부터 메시지를 수신하고, 해당 메시지를 Vue 인스턴스의 데이터에 바인딩하여 동적으로 화면에 표시하는 간단한 기능을 제공합니다.
<template>
<div>
<button @click="sendMessage">Send Message</button>
</div>
</template>
<script>
export default {
methods: {
sendMessage() {
this.$socket.send('Hello WebSocket!');
}
}
}
</script>
위의 코드는 Vue.js 컴포넌트에서 WebSocket을 사용하여 메시지를 서버로 보내는 예제이다.
$socket을 사용하여 WebSocket 객체에 접근하고 send() 메서드를 호출하여 메시지를 전송할 수 있다.
위의 예제 코드는 Vue.js와 Vue-WebSocket을 사용하여 WebSocket 통신을 구현하는 간단한 방법을 보여준다. WebSocket 서버 주소 및 통신 로직을 프로젝트에 맞게 수정하면 된다.
<template>
<div>
<button @click="sendMessage">Send Message</button>
</div>
</template>
<script>
import { ref } from 'vue';
import { useWebSocket } from 'vue-websocket';
export default {
setup() {
const message = ref('');
const { send } = useWebSocket('ws://localhost:8000'); // WebSocket 서버 주소로 변경 필요
const sendMessage = () => {
send('Hello WebSocket!');
};
return {
message,
sendMessage
};
}
};
</script>
useWebSocket 함수를 사용하여 WebSocket 연결을 설정하고, send 함수를 통해 메시지를 전송할 수 있다.
message라는 ref 변수를 사용하여 수신한 메시지를 저장하고 화면에 바인딩한다.
sendMessage 함수는 버튼 클릭 시 WebSocket을 통해 메시지를 전송한다.
WebSocket 서버 주소와 통신 로직을 프로젝트에 맞게 수정해야 한다.