1. 서버란 무엇인가?
서버(Server)는 다른 컴퓨터(클라이언트, Client)와 연결을 유지하며 특정 서비스를 제공하는 프로그램을 의미합니다. 단순히 하드웨어를 지칭할 수도 있지만, 일반적으로 서버 소프트웨어를 뜻합니다.
서버의 역할을 식당 운영에 비유
서버의 개념을 이해하기 쉽게 영업 중인 식당과 비교할 수 있습니다.
- 식당을 열고 손님을 기다리는 상태 → 서버가 실행되며 클라이언트 요청을 대기하는 상태
- 손님이 주문하면 메뉴에 따라 서비스를 제공 → 클라이언트의 요청에 맞는 데이터를 처리하고 응답 제공
즉, 서버는 항상 실행되어 있으며, 클라이언트의 요청을 기다리고 응답하는 시스템입니다.
2. 게임 서버의 종류
게임 서버는 크게 웹 서버(Web Server)와 게임 서버(Game Server, TCP Server) 로 나뉩니다.
① 웹 서버 (Web Server, HTTP Server)
웹 서버는 "테이크아웃 전문 식당"과 같습니다.
- 주문을 받으면 해당 요청을 처리하고 바로 응답을 보냅니다.
- 한 번 요청이 끝나면 클라이언트와 연결을 유지하지 않음 (Stateless).
- 주문이 끝난 후 손님과 연락이 끊기는 형태와 같습니다.
- 예: 구글 검색, 쇼핑몰, 뉴스 사이트 등
📌 특징
- Request-Response(요청-응답) 패턴 사용 → 클라이언트가 요청하면 서버는 응답을 보냄.
- 실시간 상호작용 없음 → 서버는 먼저 클라이언트에게 데이터를 보내지 않음.
- Stateless(상태를 유지하지 않음) → 클라이언트와 연결을 유지하지 않고, 요청이 끝나면 새로운 요청을 기다림.
📌 웹 서버 개발 프레임워크 예시
| 언어 | 프레임워크 |
|---|
| C# | ASP.NET |
| Java | Spring |
| JavaScript | Node.js |
| Python | Django, Flask |
② 게임 서버 (Game Server, TCP Server, Stateful Server)
게임 서버는 "일반 식당"과 유사합니다.
- 서버와 클라이언트가 지속적으로 연결을 유지하며 상호작용을 합니다.
- 서버가 클라이언트에게 먼저 접근할 수도 있음 → NPC AI가 먼저 이벤트를 발생시키거나, 유저가 접속하면 바로 데이터를 전송.
- 클라이언트 상태를 기억해야 함 (Stateful) → 유저의 위치, 경험치, 아이템 등을 지속적으로 저장하고 관리.
📌 특징
- 실시간 상호작용 (Real-time Interaction) → 주기적으로 데이터 요청 및 응답.
- 서버가 클라이언트에게 먼저 접근 가능 → 이벤트 발생 시 자동 알림.
- Stateful(상태 유지) → 유저의 진행 상황, 인벤토리, 위치 등을 유지해야 함.
📌 예시
- MMORPG (월드 오브 워크래프트, 로스트아크)
- FPS (배틀그라운드, 카운터 스트라이크)
- MOBA (리그 오브 레전드, 도타2)
3. 웹 서버 vs 게임 서버 비교
| 특징 | 웹 서버 | 게임 서버 |
|---|
| 클라이언트 요청 | 클라이언트가 요청할 때만 응답 | 클라이언트가 요청하지 않아도 서버가 데이터 전송 가능 |
| 실시간 상호작용 | 없음 (Stateless) | 있음 (Stateful) |
| 연결 유지 | 요청-응답 후 연결 종료 | 지속적인 연결 유지 |
| 서버 역할 | 요청이 있을 때만 응답 | 지속적으로 클라이언트와 상호작용 |
| 예시 | 쇼핑몰, 뉴스 사이트 | MMORPG, FPS |
4. 게임 서버 설계 시 고려해야 할 요소
게임 서버는 웹 서버보다 훨씬 복잡하며, 다양한 요소를 고려해야 합니다.
| 고려 요소 | 게임 서버에서의 의미 |
|---|
| 최대 접속자 수 | 한 서버에 동시에 접속할 수 있는 유저 수 |
| 채널 및 세션 관리 | 한 방(Room)에 최대 몇 명이 들어갈 수 있는지 |
| 서버 역할 구분 | 게임 로직, 네트워크 처리, 데이터 저장 기능 분리 |
| 멀티스레드 처리 | 동시에 처리할 수 있는 요청량과 작업 관리 |
| 네트워크 모델 | TCP(지속 연결), UDP(빠른 데이터 전송) 선택 |
| 반응 속도 | FPS(빠른 반응 필요) vs MMORPG(데이터 동기화 중요) |
| 데이터 저장 | DB 구조 및 저장 방식 (SQL vs NoSQL) |
5. MMORPG 서버는 ‘식당 운영’과 같다
게임 서버 설계는 식당을 운영하는 것과 유사합니다.
| 식당 운영 요소 | 게임 서버의 유사 요소 |
|---|
| 손님 수용 한도 | 최대 동시 접속자 수 |
| 테이블 인원 제한 | 한 게임 방(Room)에 들어갈 수 있는 인원 제한 |
| 직원 역할 분담 | 게임 로직(요리사), 네트워크(서빙), DB(결제) |
| 직원 수 조정 | 멀티스레드 및 서버 확장성 |
| 주문 방식 | 패킷 전송 및 네트워크 모델 |
| 손님 대기 시간 | 서버 응답 속도 및 로딩 시간 |
| 결제 시스템 | 데이터베이스 및 트랜잭션 처리 |
6. 게임 서버 설계 시 주요 개념
1) 멀티스레드 (Multi-threading)
- 서버가 동시에 여러 작업을 처리하는 방식.
- 싱글스레드: 한 번에 하나의 요청만 처리 (성능 저하).
- 멀티스레드: 여러 요청을 동시에 처리하여 성능 향상.
2) 네트워크 모델
- TCP (Transmission Control Protocol): 안정적인 데이터 전송 (MMORPG, MOBA).
- UDP (User Datagram Protocol): 빠른 데이터 전송 (FPS, 실시간 액션 게임).
3) 데이터베이스 설계
- SQL (MySQL, PostgreSQL): 관계형 DB, 트랜잭션 보장.
- NoSQL (MongoDB, Redis): 빠른 데이터 저장, 비정형 데이터 처리.
4) 게임 로직 처리
- 서버가 게임 룰을 제어하여 핵 방지 및 공정성 유지.
- 실시간 동기화를 통해 클라이언트 간 데이터 불일치 방지.