Node.js 게임Server개발 강의

게임 개발의 흐름

기획 단계

  1. PD(Project Director)가 게임 프로젝트의 기획안을 문서화하여 AD(Art Director) / TD(Technical Director) 에게 전달한다.

  2. 기획안을 보고 AD는 컨셉아트를, TD는 프로토타입 게임을 여러 시안으로 제안한다.

  3. 기획안과 프로토타입의 가능성을 보고 폐기 또는 새로운 프로젝트로 승격시킨다.

개발 단계

백엔드(Server) 개발 입장에선 인프라 구성, 팀원 모집, Server 로직 개발 등을 진행하지만 전체적으로 업무강도가 강하지 않다.

  1. 인프라 구성

    • 대규모 트래픽처리를 위한 분산 Server 구성

    • 업데이트 방식 설계

    • Server관리, 모니터링 툴 적용

    • NAS(네트워크 결합 스토리지), 내부망, 클라우드 세팅

  2. 팀원 모집

    • 인프라, 클라우드, DBA, 웹, 게임Server 관련 인력 모집
  3. Server 로직 개발

    • 오픈 컨텐츠 개발 대응

    • 더미테스트, 부하테스트

    • 내/외부 QA 대응

라이브 단계(Server 오픈)

오픈 초기에만 여러 이슈대응 및 Server 관리를 위한 로그 모니터링의 업무강도가 좀 되나, 이후에는 점점 줄어들게 된다.

  • 초반 이슈 대응

  • 게임 컨텐츠 개발

  • 각종 이벤트 대응

게임 Server의 역할

Server는 개발자의 입장에서 검증(Verification)하는 역할을 한다.

  • 예시

Log : 플레이어1 이 포션을 사용하여 HP을 100 회복 하였다.

  1. 포션이 실제하는 아이템인가?
  2. 플레이어의 HP가 100 증가 되었는가?

=> 이러한 검증을 하여 실패할 경우 버그, 이슈로 간주함

HTTP와 TCP, WebSocket

HTTP (1.1 기준)

  1. HTTP 형식은 Request가 발생할 때만 Response가 반환되기에, 비연결성이라는 특징을 가지고 있다.

    => 이러한 특징으로 연결 유지에 필요한 리소스가 적으며 처리가 빠르다.

  2. stateless(무상태)란 이전의 사용자가 무슨행동을 하였는지와 상관없이 동일한 행동을 하는 것을 의미한다.

    => 기존의 사이트들은 유저 경험을 위해 세션,쿠키,DB를 이용하여 state(상태)를 저장한다.

  3. HTTP 메세지 구조

    구조

    • 위의 구조에 따르면 Header에 General Header 와 Req/Res에 따라 헤더를 추가로 더하고 바디까지 합쳐 주고 받는데..

    req

    res

    => 구조상 데이터가 많다..

  4. 통신 방식

    위의 데이터를 OSI 7계층을 거쳐 주고 받기에 느려 연결성이 좋지 못하다.

    OSI7계층

    => 이러한 계층을 줄여서 연결지향성 특징을 가진 프토로콜이 TCP!

    => 또한 TCP를 기반으로 구현해 HTTP와 호환가능하게 만든 프로토콜이 WebSocket!
    (하지만 대부분은 성능최적화로 인해 TCP가 더 빠르다네요)

TCP(Transmission Control Protocol)

HTTP의 비연결성과 다르게 TCP는 연결지향성을 갖는 프로토콜이다

아래는 TCP의 대표적 특징을 나타낸다.

  1. 3-way-handshake

    TCP로 통신하기 전, 이를 위해 상호 연결을 만드는 과정을 뜻한다.

    3WH

    Server는 열려있는 포트로 LISTEN 상태이고 Client에서는 Closed 상태!

    1. Client에서 Server에 연결 요청을 하기위해 SYN(요청) 패킷을 보내며 SYN_SENT 상태가 된다.

    2. Server는 SYN(요청) 패킷을 받고 SYN_RCV(Received)로 상태 변경!

      => 그리고 요청을 정상적으로 받아 승인(ACK)과 Client도 포트를 열어달라는 SYN(요청) 을 같이 보낸다.

    3. Client에서는 SYN+ACK 를 받고 ESTABLISHED(확립)로 상태를 변경하고 Server에 요청을 잘 받았다는 ACK 를 전송!

      => ACK를 받은 Server도 상태가 ESTABLISHED(확립)로 변경되며 연결이 정상적으로 이어지게 된다

  2. 양방향 통신(Full-Duplex)

    두 통신기기는 동시에 데이터를 주고 받을 수 있으며, 일방적으로 데이터를 보낼 수 있다.

WebSocket

HTTP나 TCP보다 Header에서 주고받는 데이터가 더욱 적어 오버헤드가 낮다.

  • 주요 특징

    1. 실시간 통신

    2. 양방향 통신(Full-Duplex)

    3. 지속적 연결

    4. 낮은 오버헤드

    5. HTTP와의 호환성

Server검증 구조

  1. 로직에 필요한 DATA들을 Server와 Client가 각각 소유한다.

  2. Client가 자신이 소유한 DATA를 보내며, Server에게 요청을 한다.

  3. Client가 보낸 DATA를 Server가 소유한 DATA로 검증(verification)한 후, 요청한 값을 반환하거나 저장한다.

CDN(콘텐츠 전송 네트워크)을 이용해 ClientServer에게 동일한 DATA를 제공하도록 설계할 수 있다.
=> (이 때 Client/Server 역할에 따라 주어지는 정보의 종류,정보량은 다를 수 있다.)

Reference

스파르타코딩클럽
Daily Tech Notes
THE WEBMASTER
Nossi.DEV
파시스트