Information
멀티플레이 서버

서버 개발 가이드

이 문서는 서버의 폴더 구조, 중요 설정 파일, 데이터베이스 구조 및 서버 설치 및 게임 실행 과정에 대해 상세히 설명합니다.

폴더 구조

서버의 폴더 구조는 보안, 공통 사용 코드, 데이터, 및 외부 라이브러리 등으로 구분됩니다.

Private 폴더

보안이 필요하거나 서버 전용 문서를 저장하는 폴더입니다.

  • bin_x64: 빌드 결과 생성되는 실행 파일과 필요한 dll 파일이 저장되는 폴더입니다.
  • Common: 모든 서버 프로젝트에서 공통으로 사용되는 클래스들을 포함합니다.
    • MemoryPool: 메모리 재사용을 위해 개발된 풀로, 멀티 스레드 환경을 고려하여 설계되었습니다.
    • My~Define.h: 서버에서 사용되는 공통 데이터를 정의하는 헤더 파일입니다.
    • PxPacketDefine.h: 클라이언트와 서버 간의 패킷 타입을 정의합니다.
    • THGUIDFactory: 고유한 64비트 GUID를 발급하기 위한 클래스입니다.
    • THMySqlAccessor: MySQL C API를 사용하는 래퍼 클래스입니다.
    • THMySqlConnector: MySQL 데이터베이스 초기화 및 접속 처리를 담당합니다.

Data 폴더

서버에서 로드하는 게임 관련 데이터를 저장합니다. 이 데이터는 클라이언트와 동일하며, 서버 실행 파일 폴더에도 포함되어야 합니다.

DBDump 폴더

MySQL 데이터베이스의 백업 파일(dump)을 보관합니다. 데이터 복구 시 사용됩니다.

lib 폴더

서버에서 참조하는 외부 라이브러리를 포함합니다.

서버 프로젝트 폴더

  • LoginServer_JM: 로그인 처리 및 계정 생성 등의 기능을 담당합니다.
  • ServerMonitoring_JM: 서버의 상태를 모니터링하며, 문제 발생 시 재기동을 담당합니다.
  • ZoneServer_JM: 게임 로비 이후의 모든 처리를 담당합니다.

IOCPEngine 폴더 구조

네트워크 통신 처리를 위한 핵심 엔진 폴더입니다.

  • PxAdmin: 키-오브젝트 매핑을 위한 래퍼 클래스입니다.
  • PxMemory: 객체 재활용을 위한 풀 관련 클래스입니다.
  • CrashRpt: 프로그램 크래시 시 dump 파일을 저장하기 위한 라이브러리입니다.

서버 설명

서버는 분산 서버 구조로 개발되어 있으며, 서버 간 및 클라이언트와의 패킷 송수신 구조에 대해 설명합니다. 서버 엔진 개발의 주안점은 스레드 간의 lock 최소화, 데이터 복사 최소화, 및 최적화에 집중되었습니다.

DB 테이블 설명

  • 1_serverip: 서버 간 접속 정보를 저장합니다.
  • 2_guidtimechunk: GUID 발급 관련 정보를 저장합니다.
  • client_info: 클라이언트 버전 및 유지보수 정보를 저장합니다.
  • errorlog: Unity 에러 로그를 서버에 저장합니다.
  • accounts: 계정 및 캐릭터 생성 정보를 저장합니다.
  • characters: 캐릭터 정보를 저장합니다.

서버 설치 및 게임 실행 과정

  1. ReadMe.txt를 참조하여 압축을 해제하고, 필요한 라이브러리를 c:\Libs에 설치합니다.
  2. MySQL을 설치하고 nextor_meta 스키마를 생성합니다.
  3. 최신 데이터베이스 백업 파일을 임포트합니다.
  4. MySQL 사용자를 생성하고 권한을 설정합니다.
  5. 서버 IP 설정을 확인하고, 필요한 추가 구성 요소를 설치합니다.
  6. LoginServer -> ZoneServer 순으로 실행합니다.
  7. Unity에서 서버 IP를 설정하고, 서버에 접속을 시도합니다.

이 가이드는 서버 개발 및 운영에 필요한 모든 기본 정보를 포함하고 있습니다. 필요에 따라 추가 정보를 마크다운 문서에 추가하여 관리할 수 있습니다.