← 목록
기타 2026-07-12 5KB 읽기 5분

crowny-class admin.html — CVF 자동인코딩 진행표시 UI

개요

class.crowny.org:9864 관리자 페이지(public/admin.html)의 영상 업로드 흐름을, "업로드 완료" 한 줄짜리 알림에서 서버 CVF 인코딩 잡(cvfStatus)을 폴링해 진행상태를 실시간으로 보여주는 UI로 개선. 서버(routes.js) 쪽 인코딩 판정/엔드포인트는 다른 세션(A) 담당 — 이 작업은 프론트(admin.html)만 수정, 서버 파일은 무접촉.

무엇을 했는지

  1. 영상 업로드 폼에 필드 추가
- 기존 제목/주차/레슨ID(자유입력)/파일 유지 - 레슨 배선 셀렉트 신규 추가(#vLessonWire, disabled) — GET /api/lesson/curriculum에서 videoId 없는 레슨만 옵션으로 채움(정보용). 실제 "레슨.videoId = 이 영상 id" 배선 엔드포인트가 아직 없어(admin/lesson 모듈 미구현) 서버 라우트를 임의로 추가하지 않고 비활성 상태 + 안내문구 ("인코딩 완료 후 레슨 배선은 추후 지원됩니다")로만 표시.

  1. 업로드 → CVF 인코딩 진행 폴링
- 기존 XHR 진행률(%) 업로드는 그대로 유지. - xhr.onload에서 응답 JSON에 cvfStatus가 있으면(encoding) "업로드 완료 → CVF 인코딩 중…" 표시 후 GET /api/video/encode-status/<id>를 2.5초 간격으로 폴링. - cvfStatus === 'ready' → "✅ CVF 재생 준비 완료" (폴링 중단) - cvfStatus === 'error' → "❌ 인코딩 실패: {cvfError}" (폴링 중단) - 그 외(encoding 등) → 계속 폴링, 최대 200회(≈8.3분) 상한 후 새로고침 안내로 전환(무한폴링 방지) - 네트워크/일시 오류는 5회까지 재시도 후 안내 전환 - 서버가 아직 cvfStatus를 안 내려주는 구버전 응답이면(A 배선 전) 기존처럼 "업로드 완료"만 표시 (하위호환 — 폴링 시작 안 함)

  1. 한선씨 동반(보너스): 한선씨/프론트카피.한선인코딩상태문구(상태) 함수 append —
admin.html의 encodeStatusLabel()과 동일 규칙(ready/error/encoding/미지 4상)의 개념 미러. 컴파일·실행 검증 완료(4개 케이스 전부 기대값 일치).

관련 파일

  • /Users/ef/crowny-class/public/admin.html — 유일하게 수정된 파일 (프론트 전용, 서버 무접촉)
  • /Users/ef/crowny-class/한선씨/프론트카피.한선인코딩상태문구() 함수 append (라인 끝부분)
  • /Users/ef/crowny-class/API-CONTRACT.md — 계약 SSOT (참조만, 미수정)
  • /Users/ef/crowny-class/modules/video/routes.js — 참조 확인(현재 /api/video/upload
cvfStatus를 안 내려줌, /api/video/encode-status/<id> 라우트도 아직 없음 — A 세션의 남은 작업)
  • /Users/ef/crowny-class/modules/lesson/routes.js — 참조 확인(videoId 배선 엔드포인트 없음)

검증

  • 태그 짝 검사(div/span/table/thead/tbody/tr/td/th/button/select/option/label/style/script 등) 전부 OK
  • 인라인 <script> 블록 node --check PASS
  • curl http://127.0.0.1:9864/admin.html → HTTP 200 (서버 재기동 없이 static 서빙 확인)
  • 프론트카피.한선 컴파일+실행 4상 검증 통과(cd /Users/ef/CrownyOS/crownyc && ./hanseonc_high ... && ./crownyc run ...)
  • 크라우니코드 학습: lookup HIT 0건 / MISS 1건(생성) / learn 추가 1건(cvf인코딩상태라벨)

잔여 이슈 (다음 세션/A 담당)

  • POST /api/video/uploadcvfStatus/cvf/cvfAudio 필드를 응답에 포함하도록 서버쪽 인코딩
잡 트리거(encode-upload.sh 배선) 필요 — 현재 이 필드 없이 응답하므로 프론트는 폴링 없이 "업로드 완료"만 표시 중 (하위호환 폴백 동작 확인됨, 실제 인코딩 파이프라인 배선 전이라 라이브 폴링은 아직 검증 불가 — cvfStatus 필드가 응답에 실리기 시작하면 자동으로 폴링 경로 동작).
  • GET /api/video/encode-status/<id> 라우트 자체가 아직 미구현 — A 배선 완료 후 admin.html 재확인 필요.
  • 레슨 배선(레슨.videoId 설정) 서버 엔드포인트 신설 시 #vLessonWire를 활성화하고 제출 로직 추가.
  • CrownyBrowser 전용 디자인대조.sh 훅(.tabbar/.omni/.bm/.ib 등)이 이 파일에도 발동해 FAIL을
냈으나, 이는 브라우저 크롬 UI 규격이라 crowny-class 관리자 페이지에는 적용 대상이 아님(오탐). 실제 적용 규격은 API-CONTRACT.md의 크라우니디자인.css + class-type.css(이미 준수, 미변경).