게스트 입장 플로우 (디바이스·네트워크·can-enter) — 코드레벨 동작 흐름 P2코드레벨

마지막 업데이트 2026-07-22

작성일: 2026-06-14 대상: 개발자 — 아동 입장 게이트/디바이스 파악 핵심 파일: components/pages/guest-entry.tsx, hooks/use-device-manager.ts, use-guest-entry-socket.ts

개요 · 범위

아동이 수업 링크로 들어와 디바이스를 고르고 네트워크 품질을 확인한 뒤, 로그인·입장 검증을 거쳐 호스트 승인을 받고 리소스를 캐싱하기까지의 게스트측 진입 플로우. 호스트측 승인·세션 라이프사이클은 #15.

전체 흐름

[입장 페이지] 카카오 인앱 브라우저 가드(리다이렉트) → 디바이스 선택(useDeviceManager) + 네트워크 품질 표시(useNetworkQuality) → 로그인/저장된 유저 → 권한 검증(getUserMedia) → V2 flow 시도(tryV2Flow) ─ 처리되면 끝 └ 아니면 V1: requestEntry(socket) → 승인 대기(WaitingRoom, 카운트다운 auto-retry) → onApproved → 리소스 캐싱(blocking, #22) → entered (거부 denied / 강제퇴장 forceKicked 분기)

디바이스 관리 use-device-manager.ts

네트워크 품질 · 브라우저 가드

입장 · 승인 use-guest-entry-socket.ts

  1. 권한 검증 통과 후 V2 flow 우선 시도(tryV2Flow(roomId)) — 처리되면 V1 requestEntry로 안 넘어감(중복 입장 방지).
  2. V2 미처리면 V1: requestEntry → 소켓으로 호스트에 입장 요청 → waitingApproval.
  3. onApproved(resourceFileNames 동봉): 저사양 판정(initLowPerformanceDevice) 후 cacheResourcesblocking 캐싱(진척 표시) → entered.
  4. denied(거부) / forceKicked(강제퇴장) 분기 처리.
WaitingRoom 자동 재시도: 승인 대기 중 카운트다운(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.tsrequestEntry·승인·캐싱
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)

관련 문서