Node.js 게임Server개발 강의
게임 개발의 흐름
기획 단계
-
PD(Project Director)가 게임 프로젝트의 기획안을 문서화하여 AD(Art Director) / TD(Technical Director) 에게 전달한다.
-
기획안을 보고 AD는 컨셉아트를, TD는 프로토타입 게임을 여러 시안으로 제안한다.
-
기획안과 프로토타입의 가능성을 보고 폐기 또는 새로운 프로젝트로 승격시킨다.
개발 단계
백엔드(Server) 개발 입장에선 인프라 구성, 팀원 모집, Server 로직 개발 등을 진행하지만 전체적으로 업무강도가 강하지 않다.
-
인프라 구성
-
대규모 트래픽처리를 위한 분산 Server 구성
-
업데이트 방식 설계
-
Server관리, 모니터링 툴 적용
-
NAS(네트워크 결합 스토리지), 내부망, 클라우드 세팅
-
-
팀원 모집
- 인프라, 클라우드, DBA, 웹, 게임Server 관련 인력 모집
-
Server 로직 개발
-
오픈 컨텐츠 개발 대응
-
더미테스트, 부하테스트
-
내/외부 QA 대응
-
라이브 단계(Server 오픈)
오픈 초기에만 여러 이슈대응 및 Server 관리를 위한 로그 모니터링의 업무강도가 좀 되나, 이후에는 점점 줄어들게 된다.
-
초반 이슈 대응
-
게임 컨텐츠 개발
-
각종 이벤트 대응
게임 Server의 역할
Server는 개발자의 입장에서 검증(Verification)하는 역할을 한다.
- 예시
Log : 플레이어1 이 포션을 사용하여 HP을 100 회복 하였다.
- 포션이 실제하는 아이템인가?
- 플레이어의 HP가 100 증가 되었는가?
=> 이러한 검증을 하여 실패할 경우 버그, 이슈로 간주함
HTTP와 TCP, WebSocket
HTTP (1.1 기준)
-
HTTP 형식은 Request가 발생할 때만 Response가 반환되기에, 비연결성이라는 특징을 가지고 있다.
=> 이러한 특징으로 연결 유지에 필요한 리소스가 적으며 처리가 빠르다.
-
stateless(무상태)란 이전의 사용자가 무슨행동을 하였는지와 상관없이 동일한 행동을 하는 것을 의미한다.
=> 기존의 사이트들은 유저 경험을 위해 세션,쿠키,DB를 이용하여 state(상태)를 저장한다.
-
HTTP 메세지 구조
- 위의 구조에 따르면 Header에 General Header 와 Req/Res에 따라 헤더를 추가로 더하고 바디까지 합쳐 주고 받는데..
=> 구조상 데이터가 많다..
-
통신 방식
위의 데이터를 OSI 7계층을 거쳐 주고 받기에 느려 연결성이 좋지 못하다.
=> 이러한 계층을 줄여서 연결지향성 특징을 가진 프토로콜이 TCP!
=> 또한 TCP를 기반으로 구현해 HTTP와 호환가능하게 만든 프로토콜이 WebSocket!
(하지만 대부분은 성능최적화로 인해 TCP가 더 빠르다네요)
TCP(Transmission Control Protocol)
HTTP의 비연결성과 다르게 TCP는 연결지향성을 갖는 프로토콜이다
아래는 TCP의 대표적 특징을 나타낸다.
-
3-way-handshake
TCP로 통신하기 전, 이를 위해 상호 연결을 만드는 과정을 뜻한다.
Server는 열려있는 포트로 LISTEN 상태이고 Client에서는 Closed 상태!
-
Client에서 Server에 연결 요청을 하기위해 SYN(요청) 패킷을 보내며 SYN_SENT 상태가 된다.
-
Server는 SYN(요청) 패킷을 받고 SYN_RCV(Received)로 상태 변경!
=> 그리고 요청을 정상적으로 받아 승인(ACK)과 Client도 포트를 열어달라는 SYN(요청) 을 같이 보낸다.
-
Client에서는 SYN+ACK 를 받고 ESTABLISHED(확립)로 상태를 변경하고 Server에 요청을 잘 받았다는 ACK 를 전송!
=> ACK를 받은 Server도 상태가 ESTABLISHED(확립)로 변경되며 연결이 정상적으로 이어지게 된다
-
-
양방향 통신(Full-Duplex)
두 통신기기는 동시에 데이터를 주고 받을 수 있으며, 일방적으로 데이터를 보낼 수 있다.
WebSocket
HTTP나 TCP보다 Header에서 주고받는 데이터가 더욱 적어 오버헤드가 낮다.
-
주요 특징
-
실시간 통신
-
양방향 통신(Full-Duplex)
-
지속적 연결
-
낮은 오버헤드
-
HTTP와의 호환성
-
Server검증 구조
-
로직에 필요한 DATA들을 Server와 Client가 각각 소유한다.
-
Client가 자신이 소유한 DATA를 보내며, Server에게 요청을 한다.
-
Client가 보낸 DATA를 Server가 소유한 DATA로 검증(verification)한 후, 요청한 값을 반환하거나 저장한다.
CDN(콘텐츠 전송 네트워크)을 이용해 Client와 Server에게 동일한 DATA를 제공하도록 설계할 수 있다.
=> (이 때 Client/Server 역할에 따라 주어지는 정보의 종류,정보량은 다를 수 있다.)
Reference
스파르타코딩클럽
Daily Tech Notes
THE WEBMASTER
Nossi.DEV
파시스트