ch0. 서버 개요 및 환경 설정
카테고리: Server1
인프런에 있는 Rookiss님의 [C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버 강의를 듣고 정리한 필기입니다. 😀
🌜 강의 들으러 가기 Click
🚀 서버란?
서버
👉 다른 컴퓨터에서 연결이 가능하도록 대기 상태로 상시 실행 중인 프로그램
- 영업 중인 식당과 유사하다.
- 손님이 올 수 있도록 식당 열고 대기하다가 손님 오면 서비스 제공
✈ 서버의 종류
1️⃣ Web Server
1️⃣ Web Server ex) HTTP
- 질의/응답 형태
- 정보 요청/갱신이 드물다.
- 한번만 질의 응담 받고 떠남 단순히 한번만 교류
- 간단한 요청과 그에 대한 응답을 할 때 많이 사용한다.
- 예를 들어 로그인, 랭킹 시스템 불러오기 같은 단발성으로 불러오고 말 것들은 웹서버를 사용하는 것이 좋을 것 같다.
- 실시간 상호 교류가 필요하지 않다.
- 식당에서 직원이 손님에게 먼저 접근하는 일이 없다.
- 즉, 서버가 먼저 클라에게 접근하는 일이 없다.
- 테이크 아웃 식당
- 손님이 테이크 아웃 해가지고 음식 갖고 떠나면 연락 끊김.
- 클라가 떠나고나면 클라의 상태를 당분간 잊고 지낸다. (
Stateless
)
- 클라가 떠나고나면 클라의 상태를 당분간 잊고 지낸다. (
- 손님이 테이크 아웃 해가지고 음식 갖고 떠나면 연락 끊김.
- 게임 뿐만 아니라 웹 서비스를 만드는데에도 사용된다.
- 구글, 아마존, 네이버 등
- 보통 처음부터 서버를 만드는 경우는 없고 프레임워크(구현되어져 있는 뼈대)를 사용하여 제작한다.
- ASP.NET (C#), Spring (Java), Node JS (Javascript), Django(Python), Flask(Python), PHP,..
- 각 언어마다 자기만의 프레임워크가 있다.
- ASP.NET (C#), Spring (Java), Node JS (Javascript), Django(Python), Flask(Python), PHP,..
2️⃣ Game Server
2️⃣ Game Server ex) TCP, Binary, Stateful
- 실시간 상호작용
- 정보 요청/갱신이 많다.
- 게임 할 때 내가 뭘 움직이면 상대방 컴퓨터에서도 똑같이 내가 움직인게 보여야 하고 등등 계속해서 정보가 갱신되므로 질의응답 횟수가 어마어마하다. 서버는 계~~속 클라들과 실시간으로 교류해야 한다.
- 실시간 상호 교류가 많이 필요하므로 언제라도 직원(서버)이 손님(클라)한테 접근이 가능해야 한다.
- 손님이 식당에 머무는 동안, 직원은 계속 손님의 상태를 확인하면서 최상의 서비스를 제공해야 한다. (
Stateful
)
- 정보 요청/갱신이 많다.
- 일반 식당
- 서빙 직원이 와서 손님에게 물어볼 수도 있고 손님이 추가로 주문을 할 수도 있음.
- 즉, 서버-클라 서로 상호적인 교류가 잦음
게임 서버의 제작에 있어서 웹서버처럼 최적화된 프레임워크가 존재하기가 어렵다. 게임 장르마다 요구 사항이 다양하고 다르기 때문이다. 식당마다 메뉴와 인테리어, 직원 수 등등 전부 다 다르듯이!
손님은 몇 명 받을지는 최대 동시 접속자와 연관지을 수 있겠고, 직원을 총 몇명 돌릴지는 쓰레드가 되겠다. 이렇게 서버와 식당은 많이 유사해서 서버를 식당에 비유하기 적합하다.
- 멀티 쓰레드 👉 직원들 고용하고 운영
- 네트워크 👉 직원들이 손님과 어떤 방식으로 대화를 할지
- DB 👉 결제 및 장부 처리를 어떤 방식으로 할지
- 게임 로직 👉 손님들의 주문을 신속하고 맛있게 요리하는 것
- 서버 구조 👉 위에서 정한 정책에 맞는 식당의 인테리어를 고민하는 것
🚀 환경 설정
C#
콘솔 앱(.NET Core)
으로 프로젝트 생성
- 프로젝트
- 📘DummyClient
- 얘 하나가 다수의 클라이언트 역할을 하도록 할 것
- 📘Server
- 나중에 올릴 그 서버
- 📘ServerCore
- 서버에 필요한 핵심 기능들
- 📘DummyClient
솔루션 우클 - 속성 해보면 이렇게 프로젝트들도 동시에 실행시킬 수 있다는 것을 확인할 수 있다. 한 프로젝트만 실행할 경우 시작 프로젝트로 설정해서 하면 되고, 여러 프로젝트를 실행할 경우라면 이렇게 솔루션 속성에 들어와서 실행할 프로젝트들을 동시에 실행하도록 설정해줄 수 있다.
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글 남기기