Moongate – .NET 10 기반 Ultima Online 서버 에뮬레이터

2 weeks ago 10

  • Ultima Online 서버를 .NET 10과 C#으로 완전 새로 구현한 오픈소스 프로젝트, AOT(사전 컴파일) 기반으로 높은 성능과 안정적 실행을 목표로 함
  • 모듈형 아키텍처정확한 게임 루프 처리, 패킷 툴링을 갖추고 있으며, Lua 스크립팅을 통해 게임 내 상호작용과 AI 제어를 지원
  • MessagePack-CSharp 기반 영속성 시스템, TCP 네트워킹, HTTP 관리 엔드포인트, Docker 및 모니터링 스택을 포함한 완전한 서버 인프라 제공
  • Lua 기반 명령어, NPC AI, 시각 효과, UI(Gump) 시스템 등 스크립트 확장 기능을 통해 커스터마이징 가능한 게임플레이 구현 가능
  • 오픈소스로 공개되어 있으며, 고성능 MMO 서버 개발과 레거시 게임 복원 연구에 유용한 현대적 .NET 서버 프레임워크로 평가됨

프로젝트 개요

  • Moongate v2는 .NET 10으로 작성된 현대적 Ultima Online 서버 프로젝트로, 모듈형 구조AOT 컴파일을 통해 높은 성능과 유지보수성을 확보
  • 패킷 정의 자동 생성, 결정적 게임 루프, 테스트 커버리지를 갖춘 구조로 설계됨
  • ModernUO, RunUO, ServUO 등 기존 서버의 코드를 복제하지 않고, 이들로부터 영감을 받아 새롭게 구축됨

주요 목표

  • 정확성과 반복 속도에 중점을 둔 유지보수 가능한 서버 기반 구축
  • 네트워킹과 게임 루프 경계의 명확화 및 스레드 안전성 확보
  • 타입 기반 패킷 모델링소스 생성 등록 방식 적용
  • AOT 친화적 구조를 유지하면서도 로컬 개발 효율성 보장

현재 개발 상태

  • TCP 서버, 패킷 파싱, 이벤트 버스, 세션 관리, HTTP 관리 인터페이스, Lua 런타임 등 핵심 기능 구현 완료
  • Lua 메타데이터 자동 생성, 콘솔 UI, 타이머 기반 게임 루프, A 경로 탐색*, 조명 및 날씨 제어, 이메일 발송 기능 포함
  • MessagePack 기반 영속성 모듈을 통해 스냅샷 및 저널 파일로 게임 상태를 저장
  • Docker 이미지Prometheus/Grafana 모니터링 스택을 제공하여 운영 환경 배포 용이

스크립팅 및 명령 시스템

  • Lua 스크립팅 엔진(MoonSharp 기반) 을 내장하여 NPC AI, 아이템 동작, 시각 효과, UI(Gump) 등을 제어 가능
  • C# 명령어 등록 시스템Lua 동적 명령어 등록을 병행 지원
  • 예시: .teleport, .add_item_backpack, .set_world_light 등 GM 명령어 제공
  • 아이템 ScriptId 디스패치를 통해 Lua 테이블 기반 클릭 이벤트 처리 가능

성능 및 벤치마크

  • BenchmarkDotNet을 이용한 성능 측정 결과, 주요 패킷 파싱 및 직렬화 작업이 수십 나노초 단위로 처리됨
  • AOT vs JIT 비교에서 일부 작업은 최대 5~6배 속도 향상을 보임
  • SpatialWorldServiceItemService 등 게임 핵심 경로의 처리 효율이 상세히 측정되어 있음

배포 및 실행

  • .NET SDK 10.0.x 필요
  • 기본 실행 절차: dotnet restore dotnet build dotnet run --project src/Moongate.Server
  • 환경 변수 기반 설정(MOONGATE_*) 을 통해 HTTP 포트, 게임 루프, 이메일, 스크립팅 등 세부 설정 제어 가능
  • Docker Compose 예시 제공, 기본 포트는 2593(게임)과 8088(HTTP)

라이선스 및 기여

기술적 특징 요약

  • C# + .NET 10 + NativeAOT 기반 MMO 서버 프레임워크
  • Lua 스크립트 통합, MessagePack 영속성, Prometheus/Grafana 모니터링 지원
  • Docker 배포 및 자동화 스크립트 포함
  • 고성능, 모듈형, 테스트 중심 설계로 현대적 서버 개발에 적합한 구조

Read Entire Article