diff --git a/README.md b/README.md index e7619d9..7431282 100644 --- a/README.md +++ b/README.md @@ -1,62 +1,53 @@ -# C++20 게임 서버 (SocketServer) +# C++20 Sword Game Server -## 개요 -이 프로젝트는 Modern C++ (C++20)와 Boost.Asio를 사용한 게임 서버 코어를 보여줍니다. -비동기 I/O, 멀티스레딩, 패킷 직렬화 및 글로벌 세션 관리 시스템을 특징으로 합니다. +Boost.Asio와 MySQL을 활용한 간단한 소켓 게임 서버 프로젝트입니다. ## 주요 기능 -- C++20: std::span, std::jthread, std::format (준비됨) 및 Concepts 활용. -- Boost.Asio: 확장 가능한 네트워킹을 위한 Proactor 패턴 적용. -- 패킷 처리: 효율적인 헤더/바디 분리 및 디스패칭. -- 스레드 안전성: 뮤텍스(mutex)를 사용한 공유 자원 보호. -- 글로벌 세션 관리: 모든 접속자를 한곳에서 관리하고 브로드캐스팅하는 시스템. -- 검 키우기 컨텐츠: MySQL 연동을 통한 유저 데이터 영속성 및 강화 로직 +- C++20: jthread, stop_token, 코루틴(co_await) 사용 +- 네트워크: Boost.Asio 기반 비동기 I/O 처리 +- 데이터베이스: MySQL 연동을 통한 유저 데이터 영속성 관리 +- 동기화: strand 및 비동기 락을 이용한 자원 보호 +- 도커: Docker Compose를 이용한 서버 및 DB 환경 자동 구성 -## 사전 요구 사항 (로컬 작동 확인한 환경, debian 13) -- g++ 14.2.0 -- CMake 3.31.6 -- Boost Libraries 1.83.0 -- OpenSSL 3.5.4 -- MariaDB Client Library 11.8.3 - -## Docker 실행 - -```bash -docker compose up -d - -# 서버에 연결 - docker run --rm -it --entrypoint /app/build/Client --network sword_game_network -e SERVER_HOST=game_server sword_game-server -``` - - - -## 환경 설정 - -```bash -./setup.sh -``` - -## 빌드 - -```bash -cmake --build build -``` +## 사전 요구 사항 +- g++ 14 or higher (C++20 support) +- CMake 3.20+ +- Boost 1.83+ +- OpenSSL +- MySQL/MariaDB Client ## 실행 방법 -1. 서버 시작: - ```bash - ./build/Server - ``` -2. 클라이언트 실행: - ```bash - ./build/Client - ``` -## 아키텍처 -- NetworkService: io_context 및 스레드 풀 관리. -- Session: 개별 클라이언트 연결 및 비동기 읽기/쓰기 루프 처리. -- PacketHandler: 패킷 ID에 따른 로직 디스패칭. -- SessionManager: 연결된 모든 클라이언트를 글로벌하게 관리하고 메시지를 브로드캐스팅하는 싱글톤 관리자. -- DatabaseManager: Boost.MySQL을 사용한 비동기 데이터베이스 연동 및 데이터 영속화 관리. -- Logger: 멀티스레드 환경에서 안전한 로그 출력을 위한 스레드 세이프 로거. -- Packet: #pragma pack(1)을 사용한 효율적인 바이너리 프로토콜 정의. +### 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: 바이너리 프로토콜 정의 (pragma pack(1))