프론트엔드/Vue

웹소켓과 devServer 설정 (Vue 3 기준)

0-SIK 2024. 5. 23. 18:52
728x90

웹소켓과 devServer 설정 (Vue 3 기준)


웹소켓 (WebSocket)

웹소켓은 클라이언트와 서버 간의 전이중 통신 채널을 제공하는 프로토콜입니다. HTTP와 달리, 웹소켓 연결은 초기 요청 후에 연결을 유지하며, 양방향 데이터 전송을 가능하게 합니다. 이는 실시간 애플리케이션(예: 채팅, 실시간 피드 업데이트 등)에 유용합니다.


웹소켓 설정 예시 (Vue 3 + Socket.IO)

클라이언트 측 (Vue 3 + Socket.IO)

// main.js
import { createApp } from 'vue';
import App from './App.vue';
import router from './routes';
import { io } from 'socket.io-client';
import SocketIO from 'vue-3-socket.io';

const socketConnection = io('wss://example.com'); // 보안된 WebSocket 연결

const app = createApp(App);

app.use(router);

app.use(new SocketIO({
  debug: true,
  connection: socketConnection,
}));

app.mount('#app');

 

서버 측 (Node.js + Socket.IO)

const http = require('http');
const socketIo = require('socket.io');

const server = http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'text/plain' });
  res.end('WebSocket server');
});

const io = socketIo(server, {
  cors: {
    origin: "http://example.com",
    methods: ["GET", "POST"]
  }
});

io.on('connection', (socket) => {
  console.log('a user connected');
  
  socket.on('disconnect', () => {
    console.log('user disconnected');
  });

  socket.on('message', (msg) => {
    console.log('message: ' + msg);
    io.emit('message', msg);
  });
});

server.listen(3000, () => {
  console.log('listening on *:3000');
});

 

 

devServer 설정

devServer는 주로 개발 환경에서 사용되는 로컬 서버로, 웹팩(webpack) 프로젝트를 위한 개발 서버를 설정하는 데 사용됩니다. devServer를 통해 HMR(Hot Module Replacement), 프록시 설정, 특정 포트 지정 등 여러 가지 개발 편의 기능을 설정할 수 있습니다.

 


devServer 설정 예시


vue.config.js에서의 설정 (Vue CLI)

const { defineConfig } = require('@vue/cli-service');

module.exports = defineConfig({
  transpileDependencies: true,
  devServer: {
    allowedHosts: 'all', // 모든 호스트를 허용합니다.
                 	 // 개발 중 다양한 도메인을 허용하기 위해 사용됩니다.
    port: 8080, // 개발 서버가 실행될 포트를 지정합니다. 기본값은 8080입니다.
    proxy: { // API 요청 및 웹소켓을 위한 프록시 설정입니다.
             // 예를 들어, /api로 시작하는 요청을 http://localhost:3000으로 프록시합니다.
      '/api': {
        target: 'http://localhost:3000', // 프록시할 서버의 주소입니다.
        changeOrigin: true, // 요청 헤더의 원본(origin)을 대상(target) 주소로 변경합니다.
      },
      '/socket.io': {
        target: 'http://localhost:3000',
        ws: true, // WebSocket을 위한 설정
                  // 웹소켓 프록시를 활성화합니다.
        changeOrigin: true,
      },
    },
  },
});
728x90