서버 개발 가이드
이 문서는 서버의 폴더 구조, 중요 설정 파일, 데이터베이스 구조 및 서버 설치 및 게임 실행 과정에 대해 상세히 설명합니다.
폴더 구조
서버의 폴더 구조는 보안, 공통 사용 코드, 데이터, 및 외부 라이브러리 등으로 구분됩니다.
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: 캐릭터 정보를 저장합니다.
서버 설치 및 게임 실행 과정
ReadMe.txt를 참조하여 압축을 해제하고, 필요한 라이브러리를c:\Libs에 설치합니다.- MySQL을 설치하고
nextor_meta스키마를 생성합니다. - 최신 데이터베이스 백업 파일을 임포트합니다.
- MySQL 사용자를 생성하고 권한을 설정합니다.
- 서버 IP 설정을 확인하고, 필요한 추가 구성 요소를 설치합니다.
LoginServer->ZoneServer순으로 실행합니다.- Unity에서 서버 IP를 설정하고, 서버에 접속을 시도합니다.
이 가이드는 서버 개발 및 운영에 필요한 모든 기본 정보를 포함하고 있습니다. 필요에 따라 추가 정보를 마크다운 문서에 추가하여 관리할 수 있습니다.