Skip to content

Repository files navigation

Server-Dash

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/               # 소셜 기능 및 채팅 기록 관리

🛠️ 개발 스크립트 및 도구

프로젝트 루트에는 개발 생산성 및 빌드 파이프라인 자동화를 위한 다수의 유틸리티 스크립트가 포함되어 있습니다.

1. MessagePack Resolver 생성 (generate-messagepack-resolver)

MessagePack 컴파일러(mpc.exe)를 사용하여 Lib-Dashserver-dash 프로젝트의 MessagePack 타입에 대한 Resolver를 자동 생성합니다.

  • Windows: generate-messagepack-resolver.bat
  • Linux/macOS: ./generate-messagepack-resolver.sh

2. DB 스키마 모델 제너레이터 (generate-schema-models)

RDS(MySQL/MariaDB) 데이터베이스 스키마로부터 Entity Framework Core 모델 객체를 역공학(Scaffolding)합니다.

  • Windows (PowerShell): generate-schema-models.ps1
  • Linux/macOS: ./generate-schema-models.sh

3. 서버 실행 쉘 스크립트 (run.sh)

Linux 컨테이너 환경 등에서 실행 환경 변수를 로드하고, 인스턴스의 IP/ID 등을 AWS 메타데이터 서버(IMDS)에서 획득해 환경 변수를 주입한 후 특정 서버를 실행합니다.

# 로비 서버 실행 예시
./run.sh lobby

# 매치 서버 실행 예시
./run.sh match

📊 서버 모니터링 (ServerMonitor)

ServerMonitor.NET Diagnostics Client API를 이용해 가볍게 동작하는 사이드카 프로세스 모니터링 툴입니다.

  • 주요 성능 지표인 CPU 사용량, GC 힙 크기, 스레드 풀 할당량 등을 타겟 server-dash 프로세스로부터 10초 간격으로 실시간 수집합니다.
  • 수집된 성능 지표는 콘솔 화면에 실시간 출력되는 동시에 MonitorData.txt 파일에 누적 기록됩니다.

⚙️ 실행 및 배포 방법

1. 서브모듈 동기화

프로젝트가 Git 서브모듈(Lib-Dash, Data-Dash)에 의존하므로 저장소를 클론한 후 서브모듈을 먼저 동기화해야 합니다.

git submodule update --init --recursive

2. 환경 변수 및 설정 파일 조정

  • 로컬 개발 환경에서는 server-dash/Config/config.dev-local.json 파일을 필요에 따라 설정합니다. (AWS AccessKey, DB Connection String, Redis IP 정보 등)
  • 보안 주의: config.json 내에 하드코딩된 AWS 키(AKIAUF...) 등은 프로덕션 배포 시 환경 변수나 AWS IAM Role을 통해 안전하게 대체해야 합니다.

3. 빌드 및 로컬 실행

# 의존성 빌드 및 전체 솔루션 컴파일
dotnet build server-dash.sln

# 로컬에서 lobby 서버 실행 (Config 설정이 켜져 있을 시)
dotnet run --project server-dash/server-dash.csproj

4. 도커(Docker) 빌드 및 배포

Dockerfile을 통해 빌드된 결과물을 포함하여 즉시 배포할 수 있는 초경량 컨테이너 이미지를 생성할 수 있습니다.

# 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

About

클라이언트의 비즈니스 로직을 모두 구현한 게임 서버

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages