처음 방이 생성되고, 첫 게임에서는 준비 상태가 비디오 피드에 잘 반영되었습니다. 하지만 게임이 끝나고 다시 대기 상태로 넘어갔을 때, 새로운 준비 상태가 비디오 피드에 반영되지 않는 현상이 발생했습니다. 동시에 방장이 나갔을 때 새로운 방장이 제대로 반영되지 않는 문제가 있었습니다.
처음에는 전역 상태와 로컬 상태의 관리 방식에 문제가 있다고 판단했습니다. 여러 사용자가 동일한 게임 단계에서 같은 데이터를 공유해야 하므로, 어떤 데이터를 전역 상태로 관리하고, 어떤 데이터를 지역 상태로 유지할지 명확히 정리해야 했습니다.
readyUsers (모든 사용자의 준비 상태), isHost (방장 여부)처음에는 준비 상태(readyUsers)를 로컬 상태로 관리하고, 서버에서 브로드캐스트된 준비 상태를 기준으로 클라이언트의 UI를 업데이트하는 방식으로 설계했습니다. 이는 클라이언트가 준비 버튼을 누르면 서버가 모든 사용자의 준비 상태를 계산해 브로드캐스트하고, 이를 다시 클라이언트에서 받아와 로컬 상태를 업데이트하는 흐름을 따랐습니다. 이를 통해 준비 상태를 클라이언트별로 독립적으로 유지하며, 불필요한 전역 상태의 의존성을 줄이고자 했습니다.
하지만 준비 상태는 모든 참가자의 UI에 실시간으로 동기화되어야 하는 값이었기 때문에, 전역 상태로 관리하는 것이 더 적합하다는 점이 드러났습니다. 지역 상태로 관리할 경우 다음과 같은 문제가 발생할 가능성이 있었습니다:
결론적으로, 준비 상태처럼 공유된 상태는 전역으로 관리하여 클라이언트 간 동기화와 상태 업데이트의 일관성을 유지하는 것이 더 적합하다고 판단되었습니다.