#include "DatabaseManager.h" #include "Logger.h" #include "NetworkService.h" #include int main() { try { uint16_t port = 30000; uint32_t threadCount = std::thread::hardware_concurrency(); if (threadCount == 0) threadCount = 1; boost::asio::io_context main_context; // 환경 변수에서 DB 설정 읽기 const char *env_db_host = std::getenv("DB_HOST"); const char *env_db_port = std::getenv("DB_PORT"); const char *env_db_user = std::getenv("DB_USER"); const char *env_db_pass = std::getenv("DB_PASSWORD"); const char *env_db_name = std::getenv("DB_NAME"); std::string db_host = env_db_host ? env_db_host : "127.0.0.1"; uint16_t db_port = env_db_port ? static_cast(std::stoi(env_db_port)) : 33306; std::string db_user = env_db_user ? env_db_user : "root"; std::string db_pass = env_db_pass ? env_db_pass : "root_password"; std::string db_name = env_db_name ? env_db_name : "socket_server"; if (!DatabaseManager::GetInstance().Init(main_context, db_host, db_port, db_user, db_pass, db_name)) { Logger::Log("DB 연결에 실패했습니다."); return 1; } NetworkService server(port, threadCount); server.Run(); boost::asio::signal_set signals(main_context, SIGINT, SIGTERM); Logger::Log("서버가 실행 중입니다. (종료: Ctrl+C)"); signals.async_wait( [&server, &main_context](const boost::system::error_code &error, int signal_number) { if (!error) { Logger::Log("\n종료 시그널 수신 (", signal_number, "). 서버를 중지합니다..."); server.Stop(); main_context.stop(); } }); main_context.run(); } catch (std::exception &e) { Logger::Log("Exception: ", e.what()); } return 0; }