본문 바로가기

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

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

실제 로블록스에서는 클라이언트와 서버는 어떻게 통신하나?

앞선 글에서 일반적인 클라이언트-서버 모델의 내용을 살펴봤다.

그럼 이제부터 로블록스에서는 위에서 말한 내용들을 어떻게 구현되어져 있는지에 대해 알아보자.

위의 내용은 일반적 프로그래밍에 대한 내용이라면 이제부터는 로블록스가 제공하는 방식에 대한 내용이다.

 

로블록스에서는 기본적으로 서버 스크립트와 로컬 스크립트를 다 작성해줘야 한다. 게임 내에서 어떤 행위는 서버에서만 처리되고 어떤 행위는 클라이언트에서만 처리된다. 양쪽 모두에서 처리가 필요한 행위도 있다. 예를 들어, 유저가 버튼을 눌렀고 그 행위가 게임 전반에 어떤 변화를 줘야 하는 것이라고 하자. 그럼 이제 로컬 스크립트와 서버 스크립트와의 통신이 필요하게 된다. 그때 사용되는 것이 RemoteEvent 와 RemoteFunction이다. 

 Remote Event 

RemoteEvent는 서버와 클라이언트간에 단방향 메시지를 제공한다. 서버 스크립트에서 로컬 스크립트의 코드를 호출 할 수 있게 하고, 그 반대로 로컬 스크립트가 서버 스크립트의 코드를 호출할 수 있게 한다. 서버, 클라이언트, 각각에서 직접 함수를 호출하는 것이 아닌, 메시지를 이용하는 방식을 사용하고 이떄, Remote Event라는 객체를 이용하게 된다.

서버와 클라이언트가 모두 RemoteEvent 를 활용하려면 RemoteEvent 객체 자체가 양쪽에서 접근이 가능해야 한다. 따라서 일반적인 경우에 RemoteEvent는 ReplicatedStorage 의 자식으로 저장한다.

경우에 따라 Workspace나 Tool에 저장하는 하기도 하는데 일반적이지는 않다.

 

Remote Event는 비동기적인(asynchronous) 방식을 사용하여 동기식의 Remote Function 보다 리소스 사용이 적어 사용이 권장된다.

 Remote Function 

RemoteFunction은 클라이언트와 서버가 서로 통신하는 상황에서 사용된다. 게임내 자주 사용되는 Bindable Function처럼, 클라이언트-서버 간의 호출의 결과가 필요할 떄, RemoteFunction을 사용해야 한다.

그냥 일방적으로 메세지를 보낼때는 Remote Event. 그 결과값을 받고 싶으면  Remote Function 이라고 생각하면 된다.

Remote Function는 트워크 트래픽 / 대기 시간을 길어지고 당연하지만 그 결과값을 기다리기 위한 코드가 만들어지므로 느리다.

결과값이 필요하지 않은 상황에서는 Remote Event를 써야 게임이 원활하고 스무스하게 유지된다. 

 ReplicatedStorage 

Replicated Storage 서비스내의 객체들은 서버 스크립트와 로컬 스크립트 양쪽에서 접근이 가능하다는 특징이 있다.

서비스를 싱글레톤처럼 로블록스 게임내에 어디서든 접근이 가능한 객체이다.

Remote Event 와 Remote Function 은 서버, 클라이언트 양쪽에서 사용하게 되므로 Replicated Storage 서비스안의 객체로 보관하고 사용할 때는 그 객체를 복제하고 그 복제 객체를 사용한다.

 

다음은 구체적인 구현방법에 대해 알아보자.

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