마지막 업데이트 2026-07-22
아동이 수업 링크로 들어와 디바이스를 고르고 네트워크 품질을 확인한 뒤, 로그인·입장 검증을 거쳐 호스트 승인을 받고 리소스를 캐싱하기까지의 게스트측 진입 플로우. 호스트측 승인·세션 라이프사이클은 #15.
enumerateDevices로 audioinput/audiooutput/videoinput 분류, devicechange 이벤트로 재열거.PROBLEMATIC_CAMERAS(가상 카메라 등) 라벨 포함 기기 제외.PermissionValidationFailed).use-video-device-validator.useNetworkQuality(latency 기반 quality) → NetworkQualityIndicator로 표시. 약한 망 사전 경고. (관련: httpbin 네트워크 품질 체크 분석)use-kakao-browser-redirect로 인앱 브라우저 감지 시 외부 브라우저 유도(WebRTC/권한 제약 회피).tryV2Flow(roomId)) — 처리되면 V1 requestEntry로 안 넘어감(중복 입장 방지).requestEntry → 소켓으로 호스트에 입장 요청 → waitingApproval.resourceFileNames 동봉): 저사양 판정(initLowPerformanceDevice) 후 cacheResources로 blocking 캐싱(진척 표시) → entered.handleWaitingRoomComplete) 후 자동 재요청 → 호스트가 잠시 못 본 경우 복구.can-enter 게이트: 입장 가능 여부(스케줄/상태)는 /api/lessons/:userId/:index/can-enter·/api/validate-lesson으로 검증(#15). 통과해야 입장 요청 진행.
| 파일 | 역할 |
|---|---|
| components/pages/guest-entry.tsx | 입장 페이지·플로우 오케스트레이션(952L) |
| hooks/use-device-manager.ts | 디바이스 열거·필터·권한 |
| hooks/use-guest-entry-socket.ts | requestEntry·승인·캐싱 |
| hooks/use-kakao-browser-redirect.ts, use-video-device-validator.ts | 브라우저/디바이스 가드 |
| shared/lib/use-network-quality.ts | 네트워크 품질 |
| api/lessons/[userId]/[index]/can-enter, api/validate-lesson | 입장 검증(#15) |