* 구조 정리

 

간단한 그림으로 나타내면 다음과 같이 구조로 사용하고 있다. (변경될 수 있음)

 

 

* 개선된 점

 

위와 같은 구조 변경으로 다음과 같은 점들을 개선할 수 있었다.

 

- RemoteFunction -> RemoteEvent 

 

현재 게임에서는 네트워크 통신에서 반환 값이 따로 필요 없어서 단방향 통신 기법인 RemoteEvent를 사용하였다. 

 

RemoteFunction은 사용하면 응답을 기다리는 스트립트를 내부적으로 생성하고(스크립트는 상황에 따라 새로운 스레드에서 돌아갈 수 있다.), RemoteEvent에 비해서 네트워크 지연시간과 트래픽이 크다. RemoteEvent를 사용함으로써 이에 대한 성능 향상효과를 기대할 수 있을 것 같다.

 

 

- 코드 분리

 

@ 공용

 

공용 데이터, ModuleScript는 ReplicatedStorage에 저장하여 서버와 클라이언트에서 같이 사용하도록 하였다. 공용되는 데이터 덕분에 기존에 매직 넘버로 해두었던 변수 값들과 중복으로 사용하던 스크립트를 적절하게 초기화할 수 있게 되었다.

 

또한 메시지를 포함한 모든 통신을 리플리케이션 변수를 통해서만 수행했던 부분을 필요한 정보만 RemoteEvent를 통해 넘겨줌으로써 네트워크 성능을 개선할 수 있었다.

 

추가로 참고할 정보 : ReplicatedStorage는 기본적으로 클라이언트에서 변경하더라도 서버로 리플리케이션되지 않기 때문에 서버는 염려 없이 해당 데이터를 사용할 수 있고 반대로 클라이언트는 리플리케이션된 값들을 읽어올 수 있다.

 

 

@ 서버

 

클라이언트로 노출되지 않아야할 정보들을 서버 전용 공간인 ServerStorage, ServerScriptService에 저장하고 있다. ServerScriptService에서는 메인 루프를 포함한 게임의 전반적인 로직과 플레이어의 초기화 로직을 담고 있고 ServerStorage에서는 서버에서만 사용되는 데이터들을 담고 있다.

 

 

@ 클라이언트

 

현재 클라이언트에서 돌아가는 스크립트(LocalScript)는 Gui을 컨트롤하는 스크립트로 클라이언트 공간인 StarterGui에 존재하고 있다. 이 스크립트는 ReplicatedStorage에 있는 여러 데이터들을 읽거나 콜백을 등록하여(RemoteEvent) 그 정보들을 기반으로 Gui를 갱신한다.

 

 

 

+ Recent posts