- 프로젝트: MYCE (Museum Your Culture Events) 박람회 관리 플랫폼
- 구조: React + Vite 프론트엔드, Spring Boot 백엔드
- 데이터베이스: MySQL (기본), MongoDB (채팅)
- 문제: WebSocket 연결 실패 (error code 1006)
- 해결:
vite.config.js에define: { global: 'window' }추가- @stomp/stompjs + sockjs-client로 라이브러리 변경
- SockJS fallback 프로토콜 사용
- JWT 토큰 구조:
memberId클레임 사용 (기존sub대신) - 인증 로직: CustomUserDetails에서 멤버 ID 추출 패턴 적용
- 변경:
/api/chat/rooms→/api/chats/rooms - 이유: CHAT_SYSTEM_README.md 문서 명세에 맞춤
- 파일:
/myce-server/src/main/java/com/myce/chat/controller/ChatWebSocketController.java - 변경사항:
- DTO 캐스팅 제거,
Map<String, Object>파라미터 사용 - 메시지 엔드포인트:
/app/message→/app/chat.send - 에러 처리 및 로깅 개선
- CHAT_SERVICE_ARCHITECTURE 패턴 준수
- DTO 캐스팅 제거,
- 파일:
/myce-client/src/api/service/chat/ChatWebSocketService.jsx - 개선사항:
- JSDoc 문서화 추가
- 메시지 페이로드 문서 명세 준수
- 에러 처리 강화
- 연결 상태 관리 개선
- ✅ WebSocket 연결 성공 ("STOMP CONNECTED" 로그 확인)
- ✅ 백엔드/프론트엔드 코드 정리 완료
- ✅ 문서 명세에 맞춘 구현 완료
// vite.config.js
export default defineConfig({
plugins: [react()],
define: {
global: 'window' // 핵심: sockjs-client 에러 해결
}
});{
"roomId": "admin-123-456",
"senderId": 456,
"senderName": "사용자명",
"message": "메시지 내용",
"sentAt": "2024-01-01T10:00:00Z"
}# 백엔드 실행
cd /Users/g1/Desktop/MYCE/myce-server
./gradlew bootRun
# 프론트엔드 실행
cd /Users/g1/Desktop/MYCE/myce-client
npm run dev- 백엔드 WebSocket:
/myce-server/src/main/java/com/myce/chat/controller/ChatWebSocketController.java - 프론트엔드 WebSocket:
/myce-client/src/api/service/chat/ChatWebSocketService.jsx - 채팅 컨테이너:
/myce-client/src/mainpage/components/chatcontainer/ChatContainer.jsx - 문서:
/Users/g1/Desktop/MYCE/document_chat/CHAT_SYSTEM_README.md
- 유저가 파일을 일부 되돌려서 API 엔드포인트가 다시
/api/chat/rooms로 변경됨 vite.config.js에서define: { global: 'window' }제거됨- 이 설정들은 WebSocket 연결에 필수적이므로 복구 필요
- API 엔드포인트 일치성 확인 (백엔드
/api/chats/rooms, 프론트엔드 동일) vite.config.js에 global 정의 추가- 실제 메시지 송수신 테스트
- MongoDB 연동 및 메시지 저장 기능 구현
작업자: Claude Code
마지막 업데이트: 2025-08-07