본문 바로가기

로블록스 개발에 필요한 전반적인 내용들

로블록스의 클라이언트 서버 통신에 대하여 (1)

클라이언트-서버 모델

로블록스는 많은 유저가 동시에 같이 플레이할 수 있는 멀티 플레이어 게임을 쉽게 만들 수 있게 해준다. 클라이언트-서버 모델을 채택하고 있는 로블록스는 수많은 클라이언트가 있고 그 클라이언트를 제어하는 서버가 있는 구조이다. 클라이언트는 피씨가 될 수도 있고, 모바일폰, 태블릿, 엑스박스나 플스같은 콘솔도 될 수 있다. 이런 여러 클라이언트들이 로블록스 서버에 연결되어서 동시에 여러 유저들이 같이 놀고 싸우고 탐험하는 경험을 제공해준다.

개인적인 생각엔 약간 스타크래프트의 유즈맵을 만드는 과정과 비슷하지 않는가? 하는 느낌을 받았다. 너무 고전 게임 얘기를 꺼내서 모르는 사람도 있을거라고 보지만... 유명하니깐~ 스타는 서버 클라이언트 모델은 아니지만. 어쨋든 느낌은 비슷하다.

클라이언트 서버 모델에 대해 조금만 알아보자.

 

그림(클라이언트-서버 모델)

클라이언트-서버 모델

그럼, 클라이언트와 서버는 어떤 식으로 연결되어 있나?

유저가 보이는 것은 결국 클라이언트 밖에 없다. 서버에서 계~~~속 클라이언트에게 필요한 정보를 업데이트 해서 보내준다. 모든 정보를 다 보내지는 않겠지만, 단순히 생각해봐도 다른 유저의 위치, 하고 있는 애니메이션(행동), 다른 유저들의 HP같은 정보, 순위 리스트, 아이템 정보... 게임오바 신호 등등, 다 서버에서 데이터를 받아서 클라이언트가 화면에 뿌려주는 역할을 한다. 

예를 들어 서버안에서 타이머가 동작한다고 생각해보자. 서버가 타이머를 동작시킬거고, 그와 동시에 모든 클라이언트에게 자동적으로 타이머의 시간을 알려준다.

혹은 유저의 위치 정보에 대해서 생각해보자. 내가 게임내 유저를 이동시키면 그 즉시 그 정보는 서버로 보내지게 되고, 그 정보는 다시 각각의 클라이언트들에게 되보내지게 된다.

클라이언트 스크립트(Local Script) 와 서버 스크립트(Script)

게임 내의 로직이나 중요한 요소의 대부분은 그냥 서버 스크립트겠거니... 생각하면 속 편하다.

일반적으로 로컬 스크립트는 주로 메뉴 버튼 같은 UI, 혹은 캐릭터의 이동이나 행동같은 유저의 Input 이벤트를 받는 역할에 쓰인다. 물론 이런 것들도 결국은 서버로 보내져서 게임내 모든 다른 클라이언트들에게 다시 보내지게 되겠지만, 어쨋든 처음 처리되고 화면에 보여주는 곳은 로컬 스크립트가 담당한다.

조금만 이해가 쉽도록 얘기해 보자면, 게임내 "댄스"버튼이 있다고 해보자. 그 댄스 버튼을 누르면 내 캐릭터는 춤을 추게 되고 다른 유저들은 내 캐릭터가 춤을 추는 모습을 보게 될 것이다.

로컬 스크립트는 유저가 댄스 버튼을 눌렀나 안 눌렀나를 계속 확인하다가 누르면 캐릭터에 춤 애니메이션을 실행하라고 할 것이다.

그리고, 서버에 춤을 추기 시작했다고 알리면, 

서버 스크립트가 다른 모든 클라이언트에게 해당 캐릭터가 춤을 추고 있음을 알려주고,

각 다른 클라이언트들은 그 정보를 받으면, 그 유저의 캐릭터의 애니메이션을 댄스로 바꿔주게 된다.

 

정리하자면,

  • 서버 스크립트는 게임 로직같은 것, 게임 진행 상태 저장, 점수 업데이트, 아이템 관련, 블럭 생성같은 모든 유저가 공유해야 하는 정보를 담당한다. 
  • 로컬 스크립트( LocalScript) 는 모든 유저가 공유 안해도 되는 것, 버튼이 눌러 졌나 안됐나같은 류를 담당한다.

그럼 다음은 로블록스 안에서 클라이언트와 서버의 통신이 실제 어떻게 이루어지는지 알아보자.

 

2021.04.23 - [로블록스 개발에 필요한 전반적인 내용들] - 로블록스의 클라이언트 서버 통신에 대하여 (2)