서버 없이, 웹RTC(WebRTC)로 실시간 협업 게임을 만들다!
P2P 아키텍처(Peer-to-Peer Architecture)를 활용하여 서버 없이 두 명의 사용자가 실시간으로 게임 상태를 동기화하는 모델을 제시
상태(State)와 이벤트(Event)를 조합하여 실시간 상호작용을 구현하고, 데이터 미저장 정책(Zero-Retention Policy)을 통해 단순성을 유지
웹RTC(WebRTC)를 사용하여 피어 간 직접 통신을 구현하고, 호스트 권한(Host Authority)을 통해 게임 상태의 일관성을 유지
실시간 협업(Real-time Collaboration)을 위한 다양한 게임 예시를 제시하며, 성능 및 보안(Performance and Security)에 대한 트레이드오프(Trade-offs)를 분석
P2P 아키텍처(Peer-to-Peer Architecture) 설계
저자는 P2P 아키텍처(Peer-to-Peer Architecture)를 채택하여 서버 없이 두 사용자가 직접 통신하는 방식을 구현했다. 웹RTC(WebRTC)를 사용하여 피어 간 연결을 설정하고, 호스트 권한(Host Authority)을 부여하여 게임 상태의 일관성을 유지했다. 특히, 호스트(Host)가 게임 상태를 관리하고, 비호스트(Non-host)는 호스트의 상태를 따르는 방식으로 설계하여 복잡성을 줄였다. 댓글에서는 이러한 접근 방식이 데이터 격리 아키텍처(Data Isolation Architecture)를 통해 보안을 강화할 수 있다고 평가한다.
상태(State)와 이벤트(Event) 기반 동기화
저자는 게임의 실시간 상호작용을 위해 상태(State)와 이벤트(Event)를 혼합하여 사용했다. 상태(State)는 게임의 핵심 정보를 담고, 이벤트(Event)는 즉각적인 시각 효과나 임시적인 메시지를 전달하는 데 사용된다. 예를 들어, 검을 휘두르는 동작은 이벤트로 처리하고, 체력 감소는 상태를 변경하는 액션으로 처리한다. 이러한 방식은 실시간 반응성(Real-time Responsiveness)을 높이면서도 게임 상태의 일관성을 유지하는 데 기여한다.
호스트 기반의 데이터 동기화(Data Synchronization)
저자는 호스트(Host)를 중심으로 게임 상태를 동기화하는 방식을 채택했다. 비호스트(Non-host)는 호스트에게 액션을 전송하고, 호스트는 해당 액션을 처리한 후 변경된 상태를 비호스트에게 전달한다. 이러한 방식은 데이터 미저장 정책(Zero-Retention Policy)을 통해 서버 측 복잡성을 줄이고, 단순성(Simplicity)을 유지하는 데 기여한다. 하지만, 호스트의 연결이 끊어질 경우 게임 상태를 복구하는 메커니즘이 필요하다.
성능 및 보안(Performance and Security) 트레이드오프(Trade-offs)
저자는 P2P 아키텍처(Peer-to-Peer Architecture)의 장점과 단점을 분석하며, 성능(Performance)과 보안(Security) 간의 트레이드오프(Trade-offs)를 제시했다. 특히, P2P 통신(Peer-to-Peer Communication)은 서버의 부하를 줄여 응답 속도(Response Time)를 향상시키지만, 데이터 미저장 정책(Zero-Retention Policy)으로 인해 부정 행위에 취약할 수 있다. 또한, 웹RTC(WebRTC)의 특성상, 두 명 이상의 사용자를 지원하는 데 한계가 있다.