Files
goldenChart/frontend/vite.config.ts
T
2026-05-23 15:11:48 +09:00

58 lines
2.2 KiB
TypeScript

import { defineConfig, createLogger } from 'vite';
import react from '@vitejs/plugin-react';
// WebSocket proxy 재연결/종료 시 발생하는 ECONNRESET·EPIPE 는 정상 TCP 이벤트이므로 로그 억제
const SUPPRESS = ['ECONNRESET', 'EPIPE', 'ws proxy socket error'];
const logger = createLogger();
const _origError = logger.error.bind(logger);
logger.error = (msg, opts) => {
if (SUPPRESS.some(s => msg.includes(s))) return;
_origError(msg, opts);
};
export default defineConfig({
customLogger: logger,
plugins: [react()],
resolve: {
dedupe: ['lightweight-charts'],
},
optimizeDeps: {
include: ['react', 'react-dom'],
},
server: {
proxy: {
// ── GoldenChart Backend API 프록시 ───────────────────────────
'/api': {
target: 'http://localhost:8080',
changeOrigin: true,
ws: true, // STOMP SockJS (/api/ws/trading)
},
// ── REST API 프록시 (CORS 우회) ──────────────────────────────
'/upbit-api': {
target: 'https://api.upbit.com',
changeOrigin: true,
rewrite: (path) => path.replace(/^\/upbit-api/, ''),
headers: { Accept: 'application/json' },
},
// ── WebSocket 프록시 (Origin 차단 우회) ──────────────────────
// 브라우저 → ws://localhost:PORT/upbit-ws → wss://api.upbit.com/websocket/v1
'/upbit-ws': {
target: 'wss://api.upbit.com',
changeOrigin: true,
ws: true,
rewrite: () => '/websocket/v1',
// ECONNRESET 은 Upbit 서버가 연결을 정상 종료할 때 발생하는 TCP 이벤트
// (페이지 새로고침/재연결 시 정상 현상) → 로그 억제
configure: (proxy) => {
proxy.on('error', (err: Error & { code?: string }) => {
if (err.code === 'ECONNRESET' || err.code === 'EPIPE') return; // 정상 종료 → 무시
console.error('[upbit-ws proxy]', err.message);
});
},
},
},
},
});