서버-클라 통신
Last updated
Last updated
오버데어의 월드는 서버와 클라이언트 간의 통신을 기반으로 동작합니다.
서버는 게임의 전역 상태를 관리하며, 모든 클라이언트(플레이어)와의 통신을 처리하는 중앙 시스템 역할을 합니다.
클라이언트는 개별 플레이어의 디바이스에서 실행되는 로컬 환경으로, 플레이어의 조작, 시각적 효과, UI 등을 처리합니다.
서버와 클라이언트는 독립적으로 동작하는 환경이기 때문에, 멀티플레이 게임에서 게임 로직, 카메라 제어, 플레이어 입력 처리 등의 기능을 구현하고 통신하기 위해서는 RemoteEvent를 활용해야 합니다.
서버와 클라이언트는 각각 사용할 수 있는 기능이 다르기 때문에, 서로 간의 상호작용을 구현하려면 RemoteEvent를 이용한 통신이 필요합니다.
예를 들어, 버튼과 같은 GUI 요소는 클라이언트에서만 처리되며, 게임 로직은 서버에서 처리해야 합니다. 따라서 클라이언트에서 버튼 클릭이 발생했을 때, 서버로 스킬 사용에 대한 이벤트를 발송하여 서버가 해당 로직을 처리하도록 요청해야 합니다.
RemoteEvent는 서버와 클라이언트 간의 역할을 연결해주며, 멀티플레이 게임에서 핵심적인 상호작용을 가능하게 합니다.
서버에서 모든 클라이언트에게 이벤트 발송
Server
Client
게임 종료
서버에서 특정 클라이언트에게 이벤트 발송
Server
Client
레벨업시 레벨업 UI 표시
클라이언트에서 서버로 이벤트 발송
Client
Server
스킬 버튼 클릭
RemoteEvent는 서버와 클라이언트 간의 이벤트를 처리하기 위해 제공되는 객체로 단방향 통신을 지원합니다.
서버와 클라이언트 간의 통신을 위해 RemoteEvent 객체는 서버와 클라이언트 양쪽에서 접근할 수 있어야 합니다. 이를 위해 RemoteEvent는 서버와 클라이언트가 데이터를 공유할 수 있는 스토리지인 ReplicatedStorage에 배치됩니다. ReplicatedStorage는 서버와 클라이언트 간에 객체를 안전하게 동기화하며, RemoteEvent가 두 환경에서 모두 접근 가능하도록 보장합니다.
RemoteEvent로 이벤트 발송시 인자(Arguments)를 함께 전송할 수 있습니다. 인자는 FireServer, FireClient, FireAllClients 메서드 호출 시 전달되며, 수신 측에서 해당 데이터를 콜백 함수로 받을 수 있습니다.
서버에서 모든 클라이언트로 이벤트를 발송합니다. 이 방식은 게임의 전역 상태를 동기화하거나 모든 플레이어에게 동일한 정보를 전달할 때 유용합니다.
Script에서
LocalScript에서
서버에서 특정 클라이언트로 이벤트를 발송하는 방식입니다. 이 방식은 개별 플레이어와 관련된 작업을 처리할 때 사용됩니다.
Script에서
LocalScript에서
클라이언트에서 서버로 이벤트를 발송합니다. 이 방식은 사용자의 입력이나 특정 이벤트(예: 버튼 클릭, 스킬 사용 요청)를 서버가 처리해야 할 때 사용됩니다.
LocalScript에서
Script에서
클라이언트에서 전송된 데이터는 신뢰할 수 없으므로, 항상 서버에서 검증해야 합니다.
필요한 정보만 서버로 보내어 네트워크 부하를 줄입니다. (클라이언트에서 최소 데이터만 전송)
너무 많은 RemoteEvent를 생성하지 않도록 설계합니다. 동일한 맥락에서 처리 가능한 작업은 하나의 RemoteEvent로 처리합니다.
RemoteEvent의 연결은 필요할 때만 생성하고, 사용이 끝나면 연결을 해제하여 메모리 누수를 방지합니다. (Disconnect()
함수)
하나의 RemoteEvent로 여러 작업을 처리할 때는 작업 유형을 나타내는 첫 번째 인자(EventType)를 추가합니다. (EventType 예 : PlayerActionType과 ActionID )
💡 Tip. RemoteEvent의 용도가 서버에서 클라이언트로의 통신인지(Server to Client), 클라이언트에서 서버로의 통신인지를(Client to Server) 명확히 구분하기 위해, 이름에 접두어로 S2C_ 또는 C2S_를 사용하는 것을 권장합니다. 이는 이벤트의 역할을 직관적으로 이해할 수 있게 하여 코드의 가독성과 유지보수성을 높입니다.