[Part 4 게임 서버 - 개론]

<서버 OT>

1. 서버란 무엇인가?

: 다른 컴퓨터에서 연결이 가능하도록 대기 상태상시 실행중인 프로그램 

 

  1) Web Server (aka. HTTP Server)

      ex) 테이크아웃 포장 전문 식당: 손님이 음식을 받아서 떠나면, 그 후론 연락이 끊긴다. 

           -> 질의/응답 형태: request/response 형태

       * 사용하게 되는 경우 

        - 드물게 정보를 요청/ 갱신 한다.

        - 실시간 Interaction이 필요하지 않음: 실시간 채팅 등이 필요 x

        - 식당에서 손님한테 먼저 접근할 일이 없다

        - 주문 후 손님이 바로 떠나면, 손님의 상태를 당분간 잊고 지낸다(Stateless)

        => 게임 진행 후, 단순히 결과만을 저장할때 웹서버를 사용하면 편리 

  • 프레임워크를 하나 골라서 사용
    • ASP.NET
    • Spring(Java)
    • NodeJS(Javascript)
    • Django, Flask(Python)

   2) Game Server (aka. TCP Server ...)

      ex) 일반 식당: 서빙 직원이 와서 손님에게 물어볼 수도 있고, 손님이 추가 주문을 하기도 함 

           -> 실시간 Interaction이 있다. 

  • 사용하게 되는 경우
    • 요청/갱신 횟수가 많다.
    • 실시간 Interaction이 필요하다: 내가 게임에서 어떤 물체를 움직이면 실시간으로 움직이는 것을 다른 사용자에게도 확인 가능해야함.
    • 언제라도 직원이 손님한테 접근 가능해야한다.
    • 손님이 식당에 머무는 동안, 손님의 상태를 보며 최상의 서비스를 제공한다.(Stateful)
  • 게임/ 장르에 따라 요구사항이 너무나도 달라서 최적의 프레임워크라는 것이 존재하기 애매함
  • MMORPG 게임 서버 제작은 식당 운영에 비유 가능
    • 멀티쓰레드(Concurrency): 직원들 고용하고 운영하는 것
    • 네트워크: 직원들이 손님과 어떤 방식으로 대화를 할지
    • DB: 결제 및 장부 처리를 어떤 방식으로 할지
    • 게임 로직: 손님들의 주문을 신속하고 맛있게 요리하는 것
    • 서버 구조: 위에서 정한 정책에서 맞는 식당의 인테리어에 대해 고민하는 것 

[개발 환경 설정]

1. Visual Studio를 사용 -> 프로젝트 템플릿을 콘솔 앱(.NET Core)로 -> Server 프로젝트를 만든다. 

2. 솔루션에서 우 클릭하여 프로젝트를 두개 더 추가한다 -> ServerCore와 DummyClient

3. 솔루션 속성에서 여러개의 프로젝트를 실행할 수 있다. -> 서버와 클라이언트를 동시에 실행시켜 진행