You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
서비스의 Phase 전개에 따른 UI 전환이 소켓 메시지 url에 따른 Room 컴포넌트 내부 상태 플래그들의 변화에 의존하고 있음
방 입장(Phase 1) → 대기 화면 출력(isIntroViewActive: true) → 방장의 시작 대기 → 방장이 시작 → 소켓서버로부터 질문 목록 수신 → isIntroViewActive: false → 질문에 대한 응답 입력 및 표시(Phase 2) → 마지막 질문이 끝나면 isResultView: true → 소켓서버로부터 관심사 분석결과 수신 → isContentShareVisible: true → 통계 및 컨텐츠 공유 화면 표시(Phase 3)
Room 컴포넌트에서 관리하고 있는 페이지 전환 관련 플래그가 너무 많아서 책임이 커 보임
페이지 분리가 직관적이지 않고 새로운 기능(Phase 단위) 추가에 대한 확장성이 떨어짐
지금 구조에서 새 기능을 추가하려면 또다른 플래그를 추가해야 함
결합도가 높은 컴포넌트들이 존재함
RoomIntroView가 호스트, 참여자별 대기 페이지(Phase 1)와 QnA 페이지(Phase 2) 모두에 대한 렌더링 책임을 지고 있음
개선 사항
Phase 전환을 트리거하는 소켓 메시지를 수신할 때 Room 플래그를 변경시켜 UI를 변화시키는 대신, 일치하는 Phase에 해당하는 URL로 내비게이션하도록 Routing 설정하여 확장성 개선
전체 Phase에 공통으로 존재하는 Header, ParticipantContainer를 React Router의 children, <Outlet> 으로 공통 레이아웃 처리
Room 컴포넌트에서 UI 전환을 위해 관리하던 많은 플래그 상태들을 제거
결과
기존에는 /rooms/roomId URL 페이지 하나에서 모든 페이즈가 단방향으로 진행되었으나, 이번 리팩토링으로 페이즈별 URL과 일치하는 UI를 표시하게 되어 추후 페이즈 추가, 페이즈 간 이동, 재연결 등을 구현함에 있어 용이함
여러 컴포넌트들이 수많은 상태 플래그에 의존하며 서로 결합되어 있던 로직을 분리하여 코드 가독성과 확장성, 유지보수성을 높임