← 목록
기타 2026-07-17 6KB 읽기 6분

크라우니 홀(Crowny Hall) 1차 구축 — hall.crowny.org:9606

개요

공연장/다목적홀 운영 통합도구. ~/Downloads/design_handoff_crowny_hall 하이파이 핸드오프(README + dc.html 7종 + 전체설계 1a~1j 스펙)를 숙지해 구현. 6모듈: 관제·대관 예약·공연기획·큐시트(쇼컨트롤)·홀 제어·스태프. Office/ERP/Space/Today와 동일 UX 문법(⌘1–6, ⌘K, ? 가이드, 토스트+되돌리기, 감사로그).

무엇을 했는지

  • 프론트엔드 앱.html (단일파일 바닐라 JS, 110KB): 셸+6모듈 픽셀 충실 재현. ⌘K 팔레트, Space=GO(큐시트), 모드 토글(리허설↔본공연), 큐 점프, E-STOP 상시, AI 카드 2단 패턴(제안→적용→✓+되돌리기), 모바일 하단 탭바, 해시 라우팅(#cue 등 딥링크). 외부 CDN 없음. 동반 앱.한선(상태전이 로직) 컴파일 검증.
  • 백엔드 서버.한선 (포트 9606, hanseonc_high 컴파일 0에러): crowny-today 패턴. GET /api/state, POST /api/action(deal_stage/go/lx_set/estop 등 18타입), Space 목 어댑터 /space/env·/space/interlock, 이벤트버스 수신 POST /bus, /health. 앱은 파일소켓전송 스트리밍 서빙(65535자 캡 회피). PSV append-log(딜/상태/감사) + 재기동 복원 검증 PASS.
  • 연동: 대관 확정·콜시트 팬아웃 시 ERP(:9938)·Today(:9604) 가용성 확인(curl -m 2, 60초 캐시) 후 감사로그 기록 — best-effort, 부분 실패가 GO 흐름 안 끊음(설계 1i). Space/빌딩 서비스는 미존재 → 설계서대로 이벤트버스 인터페이스 {source,type,entityRef,ts} + 목 어댑터로 추상화, 실제 Space 서비스 생기면 어댑터만 교체.
  • 배포: 포트 레지스트리 등록(hall.crowny.org→9606, gateway.yaml SSOT), LaunchAgent org.crowny.hall(KeepAlive), 게이트웨이 경유 HTTP/HTTPS 라이브 확인. 크라우니디자인 중앙 CSS 적용(디자인적용대상.psv 등록 + data-crowny) 후 육안 무손상 확인.
  • 검증: 서버 경유 6모듈 전부 헤드리스 크롬 스크린샷 육안 검증. API 왕복(스테이지 전이→UI 칸반 이동·감사로그 표출) 실증. 재기동 영속 PASS.

관련 파일

  • /Users/ef/crowny-hall/ — 앱.html · 앱.한선 · 서버.한선 · 서버.toau · data/{딜,상태,감사}.psv
  • /Users/ef/Library/LaunchAgents/org.crowny.hall.plist
  • 설계 원본: /Users/ef/Downloads/design_handoff_crowny_hall/

2차 잔여작업 완료 (같은 날 오후)

  • 대관 포털(1j): GET /portal — 홀 3종·요금표, 가용 캘린더(확정 익명 "예약됨"), 신청→파이프라인 '문의' 실유입(조회코드 HALL-XXXXX 발급), 마이페이지(상태조회·서명/납부 ack). 포털.한선 동반.
  • RBAC(1h): 서버 매트릭스 집행(manager/sm/operator/booking, 거부={"ok":0}+감사 "거부:") + 앱 역할 스위처(아바타)·모듈 게이팅·역할별 첫 화면. LIVE 잠금 실토글(sm만), E-STOP은 권한·잠금 무관 상시(1i).
  • 정산(1j): POST /api/settle — 대관료(sub 금액 파싱)+초과+인건비(야간 20%)+전력 배부, 정산.psv, ERP 상신 가용성 연동. 앱 정산 모달.
  • 큐 실행 엔진(1e·1i): AUTO +n초 자동 연쇄·TIME m:ss 카운트다운 자동 발화·HOLD/BACK 타이머 취소·SET 큐 인터록 GO 차단(단절 시 로컬 진행)·리허설 드라이런 표기·쇼클록 실시간.
  • 원격 GO: POST /osc/go → 시퀀스 증가, 앱이 큐시트 뷰에서 3초 폴링해 GO 발화. (LTC/MTC·MIDI는 하드웨어 필요 — 스텁 금지 원칙으로 미구현 명시)
  • 버전 diff(1d): 기획 "→ 큐시트 생성" 시 추가/변경/유지 diff 모달 → 병합 승인 v3→v4.
  • 타임라인 실시간화: 지금 커서=실시각 계산, 60초 틱.
  • Space 실서비스 브리지: space.crowny.org(:9607, 타 세션 신규 구축)가 홀 계약 실구현 → /space/env(10s 캐시)·/space/interlock(실시간) 9607 우선 중계 + 실패 시 목 폴백(1i), state.space_up. 함정 실측: 9607 단일스레드 0.4~1.0s 응답 → curl -m 1이 절반 타임아웃, -m 2로 수정.
  • 🔧 수리: cueActive 비숫자 오염(프론트 go가 "Q21" 라벨 전송→JSON 파손) — 프론트 idx 숫자 동봉+서버 숫자가드+방출측 전 숫자필드 자기치유 가드.

잔여 이슈

  • 포털 자료 업로드(파일 인프라)·티켓팅 관객수 수신 — 후속.
  • 스태프 당일 콜보드(Space 출입 이벤트 체크인 자동) — 1g 후속.
  • /tmp 공용 파일명 충돌 주의: 다른 세션이 /tmp/hall.toau 를 쓰면 오염 — 고유 경로 사용(실측).

3차 마감 — 사용자 즉시 사용 준비 완료 (같은 날 저녁)

  • ✅ 포털 자료 제출(1j): 마이페이지 조회 후 제목+링크/메모 제출 → /api/materials기획 모듈 첨부에 "포털 제출" 배지로 실표시(육안 확인). 파일 업로드는 게이트웨이 32KB 함정으로 링크 방식 확정.
  • ✅ 당일 콜보드(1g): 체크인.psv — /bus type=checkin(Space 출입 자동)+수동 체크인 버튼(manager/sm, dup 무시) → 스태프 콜보드 카드(n/22)+큐시트 헤더 "크루 n/22"(60초 갱신).
  • ✅ 최종검증: 게이트웨이(https://hall.crowny.org) 풀경로 — GET 9종 전부 200, POST(문의→자료→첨부 반영, 버스 체크인→콜보드) 왕복 실측. 골격 게이트(doctype/charset/viewport/title) 양 파일 PASS. kickstart 재기동 후 상태 무결.
  • ✅ 초기 상태 정돈: 딜 시드 7건·cueActive 6·잠금 해제·테스트 데이터 전량 제거·감사로그="운영 준비 완료" 1건부터 시작.
  • 서비스 정본 CLAUDE.md 작성(/Users/ef/crowny-hall/CLAUDE.md — API·함정 5종·재배포 절차).