마지막 업데이트 2026-07-22
진행자(치료사)가 모니터링 중인 모든 세션(1:1 + 그룹)을 한눈에 보는 화면. 대시보드 홈 → 카드뷰(그리드) → 포커스뷰(단일 세션) 3계층. @handover-monitor-dashboard/@handover-card-view/@handover-focus-view 영역.
docs/handover/jacob/{monitor-dashboard,card-view,focus-view}.md. 기획 의도(왜 통합했나 등)는 기획자 리지 담당. 본 문서는 코드 흐름 + 그 md의 개발 의도를 인용한다. Jacob 평가: "2주 더 있어도 손볼 거 없음"(안정적).
| 경로 | 역할 |
|---|---|
/monitor-dashboard (page.tsx) | 홈 — 전체 세션 목록(통합 모니터링) |
/monitor-dashboard/[group] | 카드뷰 — 그룹 내 여러 아동 동시 모니터링(그리드) |
/monitor-dashboard/[group]/[roomId] | 포커스뷰 — 단일 세션 집중 |
세션 분류: oneOnOne / multi(group) / test 3종(useGroupMonitoring + useScheduledSessions 응답으로 판정, #614). 1:1은 바로 포커스뷰, 그룹은 카드 그리드 경유. 카드 UI는 1:1·그룹 공통(#496). 출처: monitor-dashboard.md#5분
#578, #622).use-monitor-data-store(rooms/sessions/toasts/alerts), use-monitor-ui-store(패널 토글 등).#554/#569).카드 한 장 = 한 룸(roomId)에 진입한 아동 1명의 라이브 수업. useMonitorSession이 WebRTC 세션 연결·상태를, useHostSocket이 호스트-게스트 소켓을 담당.
| 기능 | 동작 | 커밋 |
|---|---|---|
| 청취 토글 + 볼륨 | 해당 아동 핑퐁이 음성, 카드별 독립 슬라이더 0~300% | #581/#596/#638 |
| 포커스뷰 진입 | 카드 청취 자동 OFF(의도된 동작) — 포커스뷰에서 다시 ON | #436 |
| 자동 응답('응') | 핑퐁이 무응답 시 진행자 대신 자동 발송(카드별 수동 모드). 이후 수동 발송만 허용으로 정책 변경 | #399→#455 |
| 누적 시간 | useCumulativeElapsed — lessonStartedAt 기반 + 폴백 타이머 | #630 |
| 스텝 네비/개입 폼/이슈 스탬프 | 카드에서 직접 제어 | #462/#454/#555 |
features/session/ui/*, 현 코드에 session-card.tsx 잔존)는 작업 대상 아님. V2(widgets/monitor-dashboard/)만 카드뷰 인수인계 대상. card-view.md#핵심-파일-맵카드 썸네일은 저화질(mediasoup spatialLayer 0, #10). 특정 아동을 확대하면 expandVideo(peerId, ...) → setConsumerLayer(peerId, 2)로 고화질(L2) 요청, 축소 시 복귀. "보이는 것만 고화질"(SFU selective forwarding). 상세 → #10.
헤드셋 모드(far/near field)·환경소음 토글은 Redis settings-store에 저장된다(PPI-879/PPI-962, #636). 다중 인스턴스에서 cross-instance hydration fallback 있음(id-006). 저장 순서·롤백 규칙은 #5 Router 매니저 및 redis-infra.md.
id-019), ack 실패 시 UI 롤백(id-033). 낙관적 업데이트 금지./api/scheduled-lessons → use-today-scheduled-sessions(today-scheduled/ 위젯).use-session-checker. 게스트 미접속 5/10분 시 알림톡 자동 발송.#554), 발송 버튼 포함(#421).#378→revert #381은 QA 오류). 임시 회피는 진행자 수동 발송(#421). monitor-dashboard.md#결정과-거절된-대안, known-gaps.md| 파일 | 역할 |
|---|---|
| app/monitor-dashboard/{page,[group]/page,[group]/[roomId]/page}.tsx | 홈/카드뷰/포커스뷰 라우팅 |
| widgets/monitor-dashboard/{session-card,live-sessions,today-scheduled,headset-selector}/ | V2 위젯 |
| stores/use-monitor-data-store.ts, use-monitor-ui-store.ts | 전역 상태 |
| entities/monitor-session/use-monitor-session.ts | WebRTC 세션 연결·상태 |
| features/monitor/video-expansion/use-video-expansion.ts | 확대 시 layer 2 |
| features/monitor/hooks/{use-scheduled-sessions,use-today-scheduled-sessions}.ts | 예약 세션 |
| docs/handover/jacob/{monitor-dashboard,card-view,focus-view}.md | 설계 의도·결정·함정 원본 |