Server-Dash는 실시간 액션 RPG Lunia: Dungeon Rush를 위해 설계된 고성능, 다기능 게임 서버 백엔드 애플리케이션입니다. 하나의 코드베이스 내에서 설정에 따라 로비(Lobby), 배틀(Battle), 매칭(Match), 릴레이(Relay), 소셜(Social) 서버 역할을 개별 프로세스로 실행하거나 단일 프로세스 내에서 다중으로 활성화할 수 있는 멀티롤(Multi-role) 아키텍처를 채택하고 있습니다.
- 멀티롤 서버 아키텍처: 구성 파일(
config.json) 설정을 통해 필요에 따라 서비스(Lobby, Match, Battle, Relay, Social)를 독립적으로 구동하거나 하나의 프로세스에 결합하여 호스팅할 수 있습니다. - 고성능 소켓 통신 (Battle/Relay): 실시간 동기화가 중요한 배틀 및 릴레이 엔진은 비동기 이벤트 루프 기반의 **DotNetty (TCP Socket)**를 사용하여 패킷 멀티플렉싱 및 저지연 처리를 지원합니다.
- 유연한 API 인프라 (Lobby/Match): 계정, 캐릭터, 상점, 우편과 같은 콘텐츠 및 로직은 ASP.NET Core Web API 구조를 사용하여 안정적이고 확장에 강한 구조를 띠고 있습니다.
- 하이브리드 데이터베이스 시스템:
- RDB (MySQL/MariaDB): 관계형 데이터 관리를 위해 엔티티 프레임워크 코어(EF Core) 및 Pomelo MySql Provider를 이용합니다.
- DynamoDB (AWS): 1대1 대화(소셜 채팅), 결제 영수증 내역, 배틀 리플레이 데이터와 같은 고속·대용량 데이터를 분산 저장합니다.
- 이중 캐시 구조 (Redis): 게임 플레이 데이터 캐싱(
Game Cache)과 모니터링 지표 수집용 캐시(Monitor Cache)를 물리적으로 분리하여 Redis 병목을 최소화합니다. - 초고속 직렬화 (MessagePack): 네트워크 대역폭 및 성능을 극대화하기 위해 이진 직렬화 기술인 MessagePack을 적용했으며, MPC(MessagePack Compiler)를 통해 직렬화 코드를 자동 생성합니다.
server-dash/
├── Data-Dash/ # [Git Submodule] 기획 정적 데이터 및 리소스 정보
├── Lib-Dash/ # [Git Submodule] 공통 코드 라이브러리 및 모델 정의
│ ├── Common/ # 공통 유틸리티 및 커스텀 로깅
│ └── Dash/ # 게임 핵심 비즈니스 로직, 데이터 모델, DB 스키마
├── Libraries/ # 외부 DLL 종속성 (예: Unity.Mathematics.dll)
├── MessagePack.Generator/ # MessagePack Resolver 자동 생성용 컴파일러 (win/osx)
├── ServerMonitor/ # Diagnostics Client 기반의 서버 모니터링 도구
└── server-dash/ # 메인 ASP.NET Core 게임 서버 프로젝트
├── AWS/ # AWS 서비스 클라이언트 (S3, DynamoDB, CloudWatch) 초기화
├── Battle/ # 실시간 배틀 서버(DotNetty TCP 소켓 통신)
├── Config/ # 환경별 구성 파일 (config.json, NLog.config 등)
├── Internal/ # 게임 핵심 콘텐츠 비즈니스 서비스 로직
├── Lobby/ # 로비 서버 및 Web API 컨트롤러 (Account, Mail, Shop 등)
├── Match/ # 매칭 관리 및 프록시 서비스
├── Middleware/ # HTTP 미들웨어 및 예외 처리기
├── Net/ # 소켓 핸들러 및 네트워크 유틸리티
├── Relay/ # 실시간 패킷 릴레이 컴패니언 서버
└── Social/ # 소셜 기능 및 채팅 기록 관리
프로젝트 루트에는 개발 생산성 및 빌드 파이프라인 자동화를 위한 다수의 유틸리티 스크립트가 포함되어 있습니다.
MessagePack 컴파일러(mpc.exe)를 사용하여 Lib-Dash 및 server-dash 프로젝트의 MessagePack 타입에 대한 Resolver를 자동 생성합니다.
- Windows:
generate-messagepack-resolver.bat - Linux/macOS:
./generate-messagepack-resolver.sh
RDS(MySQL/MariaDB) 데이터베이스 스키마로부터 Entity Framework Core 모델 객체를 역공학(Scaffolding)합니다.
- Windows (PowerShell):
generate-schema-models.ps1 - Linux/macOS:
./generate-schema-models.sh
Linux 컨테이너 환경 등에서 실행 환경 변수를 로드하고, 인스턴스의 IP/ID 등을 AWS 메타데이터 서버(IMDS)에서 획득해 환경 변수를 주입한 후 특정 서버를 실행합니다.
# 로비 서버 실행 예시
./run.sh lobby
# 매치 서버 실행 예시
./run.sh matchServerMonitor는 .NET Diagnostics Client API를 이용해 가볍게 동작하는 사이드카 프로세스 모니터링 툴입니다.
- 주요 성능 지표인 CPU 사용량, GC 힙 크기, 스레드 풀 할당량 등을 타겟
server-dash프로세스로부터 10초 간격으로 실시간 수집합니다. - 수집된 성능 지표는 콘솔 화면에 실시간 출력되는 동시에
MonitorData.txt파일에 누적 기록됩니다.
프로젝트가 Git 서브모듈(Lib-Dash, Data-Dash)에 의존하므로 저장소를 클론한 후 서브모듈을 먼저 동기화해야 합니다.
git submodule update --init --recursive- 로컬 개발 환경에서는
server-dash/Config/config.dev-local.json파일을 필요에 따라 설정합니다. (AWS AccessKey, DB Connection String, Redis IP 정보 등) - 보안 주의:
config.json내에 하드코딩된 AWS 키(AKIAUF...) 등은 프로덕션 배포 시 환경 변수나 AWS IAM Role을 통해 안전하게 대체해야 합니다.
# 의존성 빌드 및 전체 솔루션 컴파일
dotnet build server-dash.sln
# 로컬에서 lobby 서버 실행 (Config 설정이 켜져 있을 시)
dotnet run --project server-dash/server-dash.csprojDockerfile을 통해 빌드된 결과물을 포함하여 즉시 배포할 수 있는 초경량 컨테이너 이미지를 생성할 수 있습니다.
# 1. 빌드 아티팩트를 app/ 디렉토리에 복사/배포 준비 후
docker build -t server-dash:latest .
# 2. 로비 서버 모드로 컨테이너 구동 예시
docker run -d -e ASPNETCORE_ENVIRONMENT=live -e SERVICE=lobby -p 8082:8082 server-dash:latest