sword_game/README.md
2026-02-07 02:22:00 +00:00

71 lines
1.9 KiB
Markdown

# C++20 Sword Game Server
Boost.Asio와 MySQL을 활용한 간단한 소켓 게임 서버 프로젝트입니다.
## 주요 기능
- C++20: jthread, stop_token, 코루틴(co_await) 사용
- 네트워크: Boost.Asio 기반 비동기 I/O 처리
- 데이터베이스: MySQL 연동을 통한 유저 데이터 영속성 관리
- 동기화: strand 및 비동기 락을 이용한 자원 보호
- 도커: Docker Compose를 이용한 서버 및 DB 환경 자동 구성
## 사전 요구 사항
- g++ 14 or higher (C++20 support)
- CMake 3.20+
- Boost 1.83+
- OpenSSL
- MySQL/MariaDB Client
## 실행 방법
### Docker 사용
데이터베이스와 서버를 한 번에 실행합니다.
```bash
docker compose up -d
```
클라이언트를 실행하여 서버에 접속합니다.
```bash
docker run --rm -it --network sword_game_network -e SERVER_HOST=game_server sword_game-server build/Client
```
### 로컬 빌드
```bash
# 빌드 환경 설정
./setup.sh
# 컴파일
cmake --build build
# 서버 실행
./build/Server
# 클라이언트 실행
./build/Client
```
## 아키텍처 구성
- NetworkService: io_context 이벤트 루프 관리
- Session: 개별 클라이언트 비동기 수신/송신 처리
- PacketHandler: 패킷 ID별 로직 디스패칭
- SessionManager: 글로벌 세션 관리 및 브로드캐스팅
- DatabaseManager: 비동기 데이터베이스 작업 및 락 제어
- Packet: Protobuf 기반 직렬화 프로토콜 (proto/Protocol.proto)
## Python GUI 클라이언트
`CustomTkinter``Protobuf`를 사용한 현대적인 GUI 클라이언트입니다.
### 요구 사항
```bash
pip install customtkinter protobuf
```
### 실행 방법
```bash
python3 python_client/main.py
```
## TODO: 개선 사항
- 현재 서버 메모리에만 유지되는 검 강화 상태를 DB에 저장하여, 재접속 시에도 이전 상태가 그대로 복구되도록 구현.
- Connection Pool 도입
- 웹(WebSocket) 클라이언트 대응을 위한 Boost.Beast 적용