← 목록
기타 2026-06-26 5KB 읽기 5분

THE IRUM 로딩 최적화 + 셀코어 DB 색인 + 4역할 울트라 균형 고도화

개요

irum.crowny.org(THE IRUM) — (1) 사이트 로딩 속도 추가 최적화(gzip), (2) 셀코어 로직 기반 DB 보관·검색·활용 점검 및 색인 레이어 신설, (3) 원장·학부모·선생님·학생 개별 기능을 울트라 에이전트로 균형 고도화(울트라씽크 밸런싱). 2단계 Workflow(이해+밸런싱 → 구현) 수행.

1. 로딩 속도 마무리

  • gzip 압축 추가(zlib 내장, 외부의존 0): server.js에 sendBuf() 헬퍼 — 텍스트 응답 gzip, 대용량 정적(tailwind 등)은 (경로,크기) 키 압축캐시로 재압축 방지, 폰트는 이중압축 제외.
  • SPA 페이로드 676KB→206KB (70%↓): SPA 60→12KB · tailwind.js 407→123KB · chart.min.js 208→70KB · 리포트 25→6.8KB · 랜딩 13→4.8KB.
  • (선행) 폰트 1년 불변 캐시 + preload + font-display:swap + MIME font/woff2.
  • 2. 셀코어 DB 점검 + 색인 레이어

    • 진단: 데이터/*.json 평면파일 2100개·8.5MB, listJson=디렉토리 선형 readdirSync+전체파싱. 셀코어 룰은 비즈니스 판정(~20 한선씨)엔 실재하나 DB 검색/인덱싱엔 미사용.
    • 신설 lib/store.js: loadAll(sub) — mtime 비교로 변경분만 재파싱(콜드 풀스캔→증분), listJson 시그니처/의미 동일. server.js listJson이 위임.
    • 신설 lib/색인.js: 색인갱신(sub,name,data) — saveJson 직후 셀코어 색인룰로 태그(연체/이탈위험/임박/뱃지대상/후속필요) emit → 디렉토리당 _색인.json 사이드카 버킷. query(sub,tag)로 후보 id만 조회(O(전체)→O(매칭)). saveJson에 배선, 저장 본류 무손상(try/catch).
    • selcore-rules O(N×M) 교정: /api/rules/evaluate-all의 학생 루프 내 listJson('출결')·listJson('채점') 전체스캔을 루프 밖 Map 그룹화로 호이스팅 → O(N+M). 결과 동일성 보존(23ms, 무회귀).
    • 한선씨 동반: 저장소.한선(캐시판정 4상), 색인룰.한선(태그 색인룰) — 둘 다 컴파일 OK.

    3. 4역할 균형 고도화 (울트라씽크)

    균형 원칙: 공백이 컸던 선생님(전용 UI 0)·학생(읽기전용)을 원장과 동일 깊이로. 파일 소유 분리로 충돌 0, 공유파일은 통합자(메인)가 일괄 와이어링.

    역할P0-1P0-2
    원장콕핏 결선(feat-cockpit.js — 오늘의 4상 결정카드, 셀코어 11룰, 실데이터 학생4·미납3·이탈25%)경영지표 스트립(feat-finance.js+경영지표.한선 — 수납·미납·리드 4상 KPI)
    학부모이번주 해석카드(포털셀코어요약.한선 — 셀코어 요약+성장스토리)피드백·상담요청(포털피드백.한선 — POST /feedback, 학부모→학원 쓰기)
    선생님🆕 교사 콘솔(/theirum/teacher.html — 채점큐·숙제·출결·클리닉, teacher콘솔.한선)계정 role 분리(auth역할분리.한선 — director/teacher, req.role 주입)
    학생채널 숙제 제출(irum채널숙제.한선 — 지각판정·보상포인트)목표판 만다라트-lite 3x3(irum채널목표.한선 — 진척 셀코어 판정)
    • 한선씨 동반 9개 전부 hanseonc_high 컴파일 OK.
    • 가이드(계정-irum.json) 갱신: 강사→교사 콘솔 링크, 학부모/학생 desc에 신규 기능 반영.

    관련 파일 (주요)

    • server.js (gzip sendBuf, store/색인 require, listJson 위임, saveJson 색인갱신, req.role)
    • lib/store.js·lib/색인.js·lib/auth.js(공개경로: 포털 feedback, 채널 homework/goal) (신규/편집)
    • public/theirum/feat-cockpit.js·feat-finance.js·teacher.html·teacher.js (신규)
    • public/theirum/index.html·theirum.js (콕핏 nav/뷰/스크립트, finance KPI, VIEWS/switchView)
    • modules/portal/routes.js·public/portal/report.html (해석카드+피드백)
    • modules-custom/irum-channel/routes.js·public/channel.html (숙제/목표 탭)
    • modules/selcore-rules/routes.js (O(N×M) 호이스팅)
    • 데이터/인증/계정.json (role), 데이터/가이드/계정-irum.json
    • 한선씨/: 저장소·색인룰·경영지표·포털셀코어요약·포털피드백·teacher콘솔·auth역할분리·irum채널숙제·irum채널목표 (.한선)

    검증

    • 구문검사 10파일 OK, irum 재시작 후 전 페이지 200, 로그인 role=director 주입 작동.
    • 콕핏 200(실데이터), 학부모 피드백 201, 채널 목표판 200, 교사콘솔 200, selcore evaluate-all 200/23ms(무회귀).
    • 색인 사이드카 _색인.json 저장 시 생성 확인. gzip 유지. 헤드리스: SPA 콕핏 nav/뷰/finance KPI 렌더, 교사 콘솔(navy/gold 로그인), 채널 3탭(피드/숙제/목표판) 렌더.
    • 테스트 데이터 정리 완료.

    잔여 이슈

    • academy.crowny.org 9865 포트 충돌(유령 PID 2369) 복구는 사용자 보류 — 코드는 공유라 academy 재시작 시 동일 반영됨.
    • 색인 query() 활용처는 현재 저장 시 자동 갱신만 배선 — 역할 기능이 query 버킷을 직접 호출하는 최적화는 P1(현재는 listJson 증분 캐시로 충분).
    • P1/P2(teacher-반 담당 매핑, 학생 자기성찰, DB 롤업 아카이브)는 의도적 보류(밸런스 노트 참조).
    • 폰트 서브셋(2MB→경량)은 fonttools 부재로 미실행 — 캐시로 재방문 해결.