📌 게임 서버는 세 개의 주요 모듈로 구성됩니다.
GameServer/ -> 게임 서버 실행 파일
Client (Dummy)/ -> 테스트용 클라이언트
ServerCore/ -> 서버의 핵심 기능을 담은 정적 라이브러리 (.lib)
| 프로젝트 | 설명 |
|---|---|
| GameServer | 서버 실행 프로그램, ServerCore 라이브러리를 사용 |
| Client (Dummy) | 더미 클라이언트, 서버와의 네트워크 테스트 용도 |
| ServerCore | 서버의 핵심 기능이 포함된 정적 라이브러리 (.lib), GameServer 및 Client에서 참조하여 사용 |
📌 목표
ServerCore는 정적 라이브러리(.lib) 로 만들어서 GameServer와 DummyClient에서 공용으로 사용하도록 구성합니다.C++에서는 라이브러리를 크게 정적 라이브러리(.lib) 와 동적 라이브러리(.dll) 로 구분합니다.
📌 장점
📌 단점
.dll 파일을 공유하여 사용 가능.📌 장점
.dll을 공유할 수 있어 메모리 절약 가능.📌 단점
.dll 파일을 별도로 관리해야 함.📌 서버 프로젝트에서 선택한 방식
ServerCore는 정적 라이브러리(.lib)로 제작하여 GameServer와 Client에서 링크하여 사용.📌 새로운 프로젝트 생성
1. Visual Studio에서 새로운 솔루션 생성
GameServer (콘솔 앱)DummyClient (콘솔 앱) ServerCore (정적 라이브러리)솔루션 폴더 정리
Binary/ → 실행 결과물 저장Libraries/ → 정적 라이브러리(.lib) 저장Debug/Release/각 프로젝트의 폴더 정리
ServerCore/ 내부Network/Utils/ GameServer/Main/Utils/DummyClient/Main/Utils/📌 디렉터리 구조
Server/
│── Binary/
│── Libraries/
│ ├── Debug/
│ ├── Release/
│── ServerCore/
│ ├── Network/
│ ├── Utils/
│── GameServer/
│ ├── Main/
│ ├── Utils/
│── DummyClient/
│ ├── Main/
│ ├── Utils/
📌 출력 디렉터리 변경 (정적 라이브러리 .lib 생성)
1. ServerCore 우클릭 → 속성 → 일반
2. 출력 디렉터리 변경
$(SolutionDir)Libraries\$(Configuration)\
Libraries/Debug/ServerCore.lib 또는 Libraries/Release/ServerCore.lib 에 생성됨.📌 PCH (Precompiled Header)란?
📌 ServerCore에서 PCH 설정
ServerCore/pch.h#pragma once
#define WIN32_LEAN_AND_MEAN // 불필요한 Windows 헤더 제외
#include "CorePch.h"
ServerCore/CorePch.h#pragma once
#include "Types.h"
#include <vector>
#include <list>
#include <queue>
#include <map>
#include <set>
#include <unordered_map>
#include <iostream>
using namespace std;
void HelloWorld();
ServerCore/CorePch.cpp#include "pch.h"
#include "CorePch.h"
void HelloWorld() {
cout << "Hello Server!" << endl;
}
📌 GameServer, DummyClient에서도 PCH 설정
1. pch.h 생성 후 CorePch.h 포함.
2. C/C++ > 미리 컴파일된 헤더 옵션 활성화.
📌 GameServer에서 ServerCore.lib 사용하도록 설정
1. VC++ 디렉터리에서 포함 디렉터리 및 라이브러리 디렉터리 추가
$(SolutionDir)ServerCore\
$(SolutionDir)Libraries\
링커 > 입력 > 추가 종속성에 ServerCore.lib 추가.또는 자동으로 라이브러리 링크
#ifdef _DEBUG
#pragma comment(lib, "Debug\\ServerCore.lib")
#else
#pragma comment(lib, "Release\\ServerCore.lib")
#endif
📌 GameServer 실행 테스트
#include "pch.h"
#include <iostream>
int main()
{
HelloWorld(); // ServerCore의 라이브러리 함수 호출
}
📌 DummyClient도 동일하게 설정
1. VC++ 디렉터리에서 포함 및 라이브러리 디렉터리 설정.
2. ServerCore.lib 링크 후 HelloWorld(); 호출.
📌 빌드 후 Binary/Debug/ 폴더에서 실행
Hello Server!