출처 : Rookiss님의 인프런 [C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] 강의를 수강 후 정리한 내용입니다.
서버 OT
웹서버? 게임 서버? 서버 운영?
서버란?
- 다른 컴퓨터에서 연결이 가능하도록 대기 상태로 상시 실행중인 프로그램
- 영업중인 식당과 유사함
- 손님이 올 수 있도록 식당을 열고 대기중인 상태
- 손님이 오면 식당 메뉴/정책에 따라 서비스 제공
게임 서버의 종류
- Web Server (aka. HTTP Server)
- 테이크아웃 포장 전문 식당
- 손님이 음식을 받아서 떠나면, 그 이후론 연락이 끊긴다.
- 질의/응답 형태
- Game Server (aka. TCP Setver, Binary Server, Stateful Server…)
- 일반 식당
- 서빙 직원이 와서 손님에게 물어볼 수도 있고
- 손님이 추가 주문을 하기도 하고
- 실시간 Interaction이 있다
Web Server
- 드물게 정보를 요청/갱신 한다
- 실시간 Interaction이 필요하지 않다.
- 게임 랭킹 정보
- 식당에서 손님한테 먼저 접근할 일은 없다. (물 따라드릴까요? ← NO)
- 주문 후 손님이 바로 떠나면, 손님의 상태를 당분간 잊고 지낸다. (Stateless)
Web Server 제작?
- Web Server는 단순히 게임에 국한되지 않고, 웹 서비스를 만드는데 사용.
- 구글, 아마존, 네이버 등등
- 처음부터 만드는 경우는 사실상 없고, 프레임워크를 하나 골라서 사용
- ASP.NET (C#)
- Spring (JAVA)
- NodeJS (Javascript)
- Djangdo, Flask (Python)
- PHP
Game Server
- 요청/ 갱신 횟수가 많다.
- 실시간 Interaction이 필요하다.
- 언제라도 직원이 손님한테 접근 가능해야 한다.
- 손님이 식당에 머무는 동안, 손님의 상태를 보며 최상의 서비스를 제공한다. (Stateful)
Game Server 제작?
- 게임/장르에 따라 요구사항이 너무나도 다르다.
- 최적의 프레임워크라는 것이 존재하기 애매함.
- EX) 회전 초밥/ 삼겹살/ 호텔뷔페/ 국밥
- 메뉴가 다른데 식당 인테리어와 채용 직원 수가 동일할 수 없다.
- 그럼 무엇을 고려해야 할까?
고려할 대상 | 게임 서버의 유사성 |
손님 한도 (몇 명까지 받을 수 있는지) | 최대 동시 접속자 |
한 방에 들어갈 수 있는 손님의 일행 한도 (인테리어) | 게임 장르 및 채널링 |
직원 역할 구분 (겸직 가능) | 게임 로직(요리사), 네트워크(서빙), DB(결제) |
직원은 몇 명을 둘지? | 쓰레드 개수 |
요리사/ 서빙/ 결제 직원 비율을 어떻게? | 쓰레드 모델 |
손님이 기다릴 수 있는 시간 한도 (패스트 푸드? 고급?) | 반응성 (FPS, MMORPG, …) |
장부 및 결제는 어떻게? | 데이터베이스 |
- MMORPG 게임 서버 제작은, 식당 운영에 비유 가능
- 멀티쓰레드(Concurrency) : 직원들 고용하고 운영하는 것
- 네트워크 : 직원들이 손님과 어떤 방식으로 대화를 할지
- DB : 결제 및 장부 처리를 어떤 방식으로 할지
- 게임 로직 : 손님들의 주문을 신속하고 맛있게 요리하는 것
- 서버 구조 : 위에서 정한 정책에 맞는 식당의 인테이어에 대해 고민하는 것