게임 서버 개발자가 되기 위해 우선 게임을 기반으로 Client, Server가 무엇인지 알아보자.
클라이언트(Client)와 서버(Server)
클라이언트(Client)
- 클라이언트는 게임을 플레이하는 유저들의 모바일이나 PC, 또는 해당 기기에서 개별적으로 돌아가는 프로그램을 의미한다.
주로 유저의 입력을 처리하거나, 서버가 보내온 정보를 처리하여 유저에게 가시적으로 출력하는 역할을 수행하게 된다.
서버(Server)
- 서버는 다수의 클라이언트가 연결된 단일 컴퓨터 혹은 여러 컴퓨터에서 돌아가는 프로그램을 의미한다.
일반적으로 각 클라이언트에서 보내온 요청에 대한 응답을 주기도 하지만, 게임 진행에 대한 주요 기능과 시스템을 서버에 구축함으로써 모든 클라이언트가 동일한 진행 상황이 될 수 있도록 할 수 있다.
클라이언트-서버(CS) 모델
- 클라이언트-서버(CS) 모델에서 클라이언트는 다른 클라이언트와는 통신하지 않으며, 오직 서버하고만 정보를 주고 받는다. 보통 클라이언트는 유저의 입력을 받고, 입력된 정보에 따라 서버에게 요청을 하거나 현재 클라이언트의 상황을 서버에게 알린다.
서버는 받은 정보로부터 클라이언트에게 다시 보내주거나, 정보를 토대로 게임 진행 상황을 업데이트시키고, 업데이트된 내용을 다른 모든 클라이언트들에게 전송함으로 모든 유저가 동일한 상황이 될 수 있도록 한다.
- 위의 이미지는 User A라는 클라이언트가 몬스터를 처치해 레벨업을 했을 때,
클라이언트와 서버가 무슨 일을 하는지 보여준다.
- 클라이언트
- 서버
- 클라이언트로부터 받은 입력값을 토대로 다음과 같은 로직을 수행한다.
몬스터 공격 -> 몬스터 사망 -> UserA 경험치 증가 -> UserA 레벨업
- UserA의 레벨업 연출 정보를 다른 모든 클라이언트에게 전송한다.
- 이처럼 CS 구조는 게임의 전반적인 로직과 시스템을 서버에서 구현함으로써
악의적인 해킹을 방지할 수 있어 안전한 게임을 만들 수 있다.
하지만, 그만큼 서버의 부하가 심하다는 단점도 있다!