← 목록
기타 2026-07-21 4KB 읽기 3분

크라우니홀 설정 모듈 + 백엔드 공통 라이브러리 축적 (2026-07-21)

개요

"기능 계속 구현 — 세팅/설정/라이브러리 축적" 요청. 크라우니홀에 설정(Settings) 모듈(7번째)을 붙여 요금 마스터·프리셋·장비 대장·사용자 권한을 실데이터화하고, 정산/견적의 하드코딩을 요금 마스터 참조로 전환. 동시에 서버형 서비스 재사용 한선씨 라이브러리를 축적.

무엇을 했는지

1. 설정 API + 요금 마스터 (서버.한선)

  • GET/POST /api/settings — 5섹션(rates/presets/scenes/inventory/users), manager RBAC. PSV 영속(설정_요금·프리셋·씬·인벤토리·사용자).
  • 요금 마스터가 정산/견적 SSOT: _대관료계산·_초과요금계산·인건비/전력이 하드코딩(구 881~918행) 대신 요금 마스터에서 읽음. 라이브 실측: rate_set base 9000000 → /api/settle 대관료 9000000 → 원복.
  • 8 변이 타입: rate_set·preset_save/delete·scene_save/delete·inventory_set/delete·user_role/delete.

2. 설정 모듈 UI (앱.html) — 메인 세션 직접 구현

  • 7번째 모듈 #settings(⌘7, manager 전용 moduleAllowed — sm 등은 탭 딤). fetchSettings 뷰진입 1회, api.postSettings.
  • 5 서브탭: 요금 마스터(홀별·전역 스테퍼 낙관적 갱신)·프리셋·조명 씬·장비 대장(상태 정상↔점검↔발주 순환)·사용자 권한(역할 순환 + RBAC 매트릭스 읽기전용).
  • 검증: node --check PASS, 3서브탭 헤드리스 스크린샷 육안, sm 역할 탭 딤 확인, 서빙==디스크(파일소켓전송 직접 서빙 → 재빌드 불필요).

3. 백엔드 공통 라이브러리 (libs/크라우니백엔드공통.한선)

  • 라이브 검증된 홀 서버 패턴을 순수 lib로 추출·일반화(import 가능, top-level 기동문 없음).
  • 6그룹: PSV(이스케이프/복원/필드/파싱/업서트/삭제/조회) · JSON빌더(숫자가드 — "Q21"→기본 자기치유로 무인용 방출 JSON파손 방어) · HTTP(요청방식/경로/본문/응답·CRLF 한글안전) · 가용성프로브(60s캐시·태그별 파일) · 실서비스브리지(중계+목폴백) · 시각(date 위임).
  • 검증: CROWNY_STRICT=1 0에러 0경고, 자체시험 14 + 러너 6 = 20 PASS(PSV 왕복·JSON가드·HTTP파싱·브리지폴백·가용성·시각 실측). 검증 러너 = 크라우니백엔드공통_검증.한선.
  • 효용: hall/today가 후속 채택 시 중복 제거 + JSON파손 함정 일괄 방어. 채택(재배선)은 후속 — 라이브 회귀 방지 위해 축적만.

관련 파일

  • /Users/ef/crowny-hall/{서버.한선,앱.html} (설정 모듈)
  • /Users/ef/CrownyOS/crownyc/libs/{크라우니백엔드공통.한선,크라우니백엔드공통_검증.한선}
  • 정본 서버 API 상세: 2026-07-20-crowny-hall-설정API-요금마스터.md

함정/교훈

  • 앱.html 설정 입력(new preset/user)은 render()가 innerHTML 재구성 → 제출 시 getElementById로 읽고(타이핑 중엔 render 미발생) 구조변경은 refetch. 스테퍼는 낙관적 갱신+POST.
  • lib PSV파싱 지역배열 재호출(2026-07-13 함정)은 in-range 접근만 하면 안전(라이브 홀 서버가 동일 패턴 장기 검증).

잔여

  • 백엔드 공통 lib를 hall/today 서버가 실제 import하도록 채택(후속, 회귀검증 동반).
  • 설정 프리셋/씬 저장 → 홀 제어 실연결(현재 프리셋 목록은 설정 관리, 홀 제어는 별도 정적 — 통합 후속).
  • 티켓팅 관객수 수신(설계 1j 잔여).