데브허브 | DEVHUB | Unreal Engine as the Heart of a Real-time, Web-controlled Simulator | Unreal Fest Stockholm 2025Unreal Engine as the Heart of a Real-time, Web-controlled Simulator | Unreal Fest Stockholm 2025
- 실시간 차량 시뮬레이션 (탱크)을 통해 승무원 훈련 시스템을 구축하여 역할 간 조정 및 의사 결정 능력 향상. 🎮
- 2D 웹 기반 및 3D 언리얼 기반 강사 콘솔을 통해 시뮬레이션 제어 및 모니터링이 가능하며, 동일한 시뮬레이션을 동시에 관리. 🖥️
- 2D 웹 앱에서 언리얼 서버로 데이터 전송 후 클라이언트에 복제되는 데이터 흐름을 가지며, 모든 구성 요소는 동일 세션 유지 필수. 🔄
- 실시간 세션 관리는 클라이언트 추적, 연결 안정성 유지, 교육 시뮬레이터의 성과 보고서 생성에 핵심적인 역할 수행. 📊
- 강사 콘솔로 웹 애플리케이션을 선택한 이유는 쉬운 유지보수, 빠른 개발 주기, 낮은 비용, 넓은 개발자 풀, 원격 및 다중 PC 관리 용이성 때문. 🌐
- 효율적이고 확장 가능한 양방향 이벤트 기반 통신을 위해 Pub/Sub 메시징 인프라를 채택하여 데이터 흐름을 최적화. 📮
- Redis를 중앙 메시지 브로커로 활용하여 초고속, 안정적인 실시간 Pub/Sub 통신을 구현하고 아키텍처를 단순화. 🚀
- Redis 채널을 통한 이벤트 기반 업데이트로 실시간 상태 메시징 및 효율성을 증대하며, 불필요한 폴링 감소. 📡
- Unreal Engine에 hiredis C 라이브러리를 외부 모듈로 통합하여 개발 복잡성을 줄이고 컴파일 속도 향상. 🧩
- 불필요한 라이브러리 내부 기능을 추상화하고 복잡한 Redis 기능을 캡슐화하는 어댑터 레이어를 구축하여 개발자에게 간결하고 안전한 API 제공. 🛡️
- 게임 스레드 블로킹 방지를 위해
FRunnable을 활용한 비동기 통신 처리 구현으로 시뮬레이션 반응성 유지. ⚡
FRunnable 스레드의 적절한 생명주기 관리 (고유 이름 부여, 생성/소멸 로깅)로 스레드 충돌 및 누수 방지. 👻
AsyncTask를 사용하여 FRunnable에서 게임 스레드로 안전하게 통신하여 충돌, 프리즈, 레이스 컨디션 회피. 💬
TWeakPtr와 Pin()을 활용한 스마트 포인터로 비동기 작업 중 객체 소멸로 인한 유효하지 않은 메모리 접근 오류 방지. 🧠