← 목록
기타 2026-07-21 9KB 읽기 8분

에스텔 QI — 읽기 편의 + 눈높이 모드 베이스 + 의미어 인덱싱 현황 정리

사장님 지시 3건(2026-07-21): ① 초등학생도 볼 만하게 글밥 간격 넓히기 ② 일반인이 단어를 쉽게 이해하도록 작업 준비 + 전체 메뉴 모드 변경 베이스 세팅 ③ 서비스 완료 후 다국어 작업 대비 의미어 인덱싱 상황 정리.


1. 읽기 편의 토큰 (글밥 간격)

앱.html :root에 읽기 토큰 신설 — 모듈 CSS의 하드코딩(font-size 268곳·line-height 70곳)을 이 토큰으로 치환해 한 곳만 바꾸면 전 화면 글밥이 함께 움직인다.

토큰기본(일반)어린이빠른전문가
--fs-mul 글자 배수11.090.981
--lh-body 본문 줄간격1.752.01.61.65
--lh-tight / --lh-loose1.35 / 1.951.45 / 2.21.28 / 1.751.3 / 1.8
--ls-body 자간0.005em0.015em00
--sp-para 문단 간격0.85em1.15em0.6em0.7em
--measure 한 줄 최대폭34em26em40em44em
기본값도 핸드오프 원안(1.5~1.65)보다 넉넉하게 올렸다(지시 반영). 치환 규칙 정본 = 도구/타이포토큰.한선.

2. 눈높이 모드 (전체 메뉴에서 모드 변경)

  • 위치: 삼선 드로어 상단 4버튼(어린이/빠른/일반/전문가). <html data-level> 토글 → 위 토큰이 전 화면에 즉시 반영. localStorage 지속(estel.level.v1), 첫 페인트부터 적용.
  • 통합: 기존 도움말 팝오버의 4레벨과 같은 축으로 합쳤다(예전엔 팝오버 안에서만 바뀌어 따로 놀았음). 3레이어(씨앗/새싹/별)와도 매핑: 어린이→씨앗, 빠른·일반→새싹, 전문가→별.
  • 모듈 계약(콘텐츠 확장용 API):
  • EstelApp.pick({kid:'…', normal:'…', expert:'…'}) → 현재 눈높이 텍스트(폴백 kid/quick/expert→normal)
  • EstelApp.onLevel(fn) → 레벨 변경 시 재렌더
  • EstelApp.level() / setLevel(key) / levels()
  • 3. 용어 사전 (일반인 이해 지원)

    • 데이터: 데이터/용어사전.psv단어|쉬움|보통|전문|의미어코드|영문, 29용어. 줄 추가만으로 반영(서버 재시작 불필요).
    • 표시: EstelApp.termHtml('중첩') → 점선 밑줄 → 탭하면 현재 눈높이에 맞는 뜻 시트(어린이·빠른=쉬움 / 일반=보통 / 전문가=전문) + 의미어 코드 표기.
    • 서버: GET /데이터/<파일>.psv 화이트리스트 라우트 추가(경로조작 400 실측). 사전이 없어도 앱은 정상 동작(fail-open).
    • ⚠️ PSV 사고 및 규칙화: 전문 설명의 브라켓 표기 |ψ⟩가 구분자와 충돌해 필드가 밀렸다. → 본문에 ASCII | 금지, 전각 (U+FF5C) 사용. 무결성 실측: 29행 전부 정확히 6필드.

    4. 의미어 인덱싱 현황 (다국어 전환 대비)

    4-1. 자산 3층 — 주소 체계가 둘이다(섞으면 오역)

    파일규모주소 형식용도
    v2 통합 코드북(정본)crowny-butler/data/의미어_통합60437.psv60,437 실어휘11트릿 셀주소(3¹¹=177,147, 여유 116,712)카테고리\의미어\영문\셀주소 — 다국어 축
    누적 인덱스(레거시)data/누적/단어코드.psv·코드단어.psv각 53,5316자리 정수 ID빈도·연결 누적용
    연결 그래프data/누적/의미어연결.삼진 / 의미어연결저장소.psv119,003 / 147,372코드A\방향\트릿\코드B\가중4상균형3진 관계
    → 에스텔 사전은 v2 셀주소만 쓰도록 정리했다(작업 중 누적 ID가 섞여 들어온 것을 발견·제거).

    4-2. 설계 스펙 상태 — 적대검증 라벨링 완료(의미어코드_스펙v1.md, 설계 동결 후보)

    결정내용라벨
    D1의미어 주소는 9트릿 경계 정렬(27트릿 큐브의 1/3)✅확정
    D2응용어는 단일 주소 금지 → 9트릿 base + 합성연산자 시퀀스✅확정
    D3"닫힌 전체 합성" 폐기 → 개방 코어 + 예외표 2층(비합성 MWE가 어휘부의 41~50%)✅확정
    D4검증 코어 = Concepticon 3.4.0의 4,034개(나머지 ~16k는 영어 편향 후보, 신뢰등급 분리)✅확정
    D5자연어↔코드 무손실 가역은 코어 내부에서만 보장, 비분해어는 예외표 경유✅확정
    D6base 인벤토리 하드 상한 = 19,683(3⁹). "~20k"는 −317 오버플로✅확정
    C1base 규모 8,000~16,000🟡조건부(실측 필요)
    C2PHYLUM(27)×CLASS(27)×SPECIES(27) 계층 주소🟡조건부(언어학 검수 필요)
    합성 커버리지(의미어v3커버리지.한선): 타입 base 4,164 + 온톨로지 조합 → 레벨1 합성쌍 138,176(base의 33배). 평면 6만 어휘 소싱보다 base+조합이 우월(무충돌·구조보존·가역).

    4-3. 다국어 인프라

    다국어의미어.한선(언어별 단어 → 같은 셀주소), 다국어등록.한선(한/영/일 30개념×3=90단어 시범 등록), 다국어온톨로지·확장. 원리는 번역이 아니라 매달기 — 한국어 문장을 번역하는 게 아니라, 같은 의미어 셀주소에 각 언어 표층어를 등록한다. 언어 추가 = 단어 등록만, 구조 불변. 의미어 계열 라이브러리 총 ~70본.

    4-4. 에스텔 실측 커버리지 — 결손이 3종류

    사전 29용어 중 v2 코드 부착 12 · 공란 17. 공란의 원인이 서로 달라 처방도 다르다.

    유형사례처방
    ①미등록 신조어·브랜드어큐트릿, 큐비트, 트윈, 에뮬레이터, 시뮬레이터, 스태빌라이저, 그로버, QKD코드북 신규 등록(도메인=물리학/전산학)
    ②동음이의 충돌(등록돼 있으나 다른 뜻)게이트→외래어생활 · 시드→무예스포츠 · 재현→현대미술 · 스태빌라이저→교통 · 벨→단위세분 · 경계→시공 · 정직→세무노무뜻노드 분할(티옴타음 방식: 배#티선박/옴신체/타과일) 후 양자 뜻에 부착
    ③복합어(D2에 따라 단일 주소 금지)벨 게임, 오류 정정, 편성 근거, 정직 경계, 3레이어base + 합성연산자로 표현
    ②가 가장 위험하다 — 코드가 "있으니 붙이면 되겠지" 하고 부착하면 다국어 전환 시 조용히 오역된다(게이트를 quantum gate가 아니라 생활 외래어로 번역). 이번에 뜻 일치 여부를 도메인 카테고리로 대조해 걸러냈다.

    4-5. 다국어 착수 시 필요한 것 (준비/미비)

    • ✅ 준비됨: 언어독립 축(v2 셀주소), 사전 파일에 코드 컬럼, 서버 데이터 라우트, 눈높이 모드(레벨×언어 2축 중 레벨 축 완성), 설계 스펙 동결 후보
    • ⬜ 남음: (a) ①~③ 결손 17건 처리 → 에스텔 커버리지 100% (b) 언어팩 규약 확정 — 용어사전.<lang>.psv 화이트리스트 추가 방식으로 설계됨 (c) UI 문자열 키화(현재 모듈 코드에 한국어 리터럴 직접 삽입 — DEVELOPER_GUIDE §8 "i18n 준비: UI 문자열도 키 기반으로" 미이행. 이게 가장 큰 미비) (d) 파이프라인 ①단계(다국어 자연어 입력) 실측

    관련 파일

    • 앱.html(토큰·모드 CSS·용어 시트) · 셸.js(레벨 API·용어 사전 로더) · 셸.한선(판정 미러) · 서버.한선(데이터 라우트)
    • 데이터/용어사전.psv · 도구/타이포토큰.한선 · 도구/가림감사.js·한선
    • 의미어 정본: crowny-butler/data/의미어_통합60437.psv · 스펙 libs/의미어코드_스펙v1.md

    잔여

    • 모듈 9종 타이포 토큰 치환 = 별도 작업으로 진행(완료 시 어린이 모드에서 실제 글자 확대 반영)
    • 용어 칩(termHtml)을 실제 모듈 본문에 적용하는 작업은 미착수 — 현재는 API·데이터·시트 UI까지 완비된 상태

    5. 모듈 전환 완료 + 후속 수리 (같은 날 2차)

    • 모듈 9종 치환 완료: font-size 263건 → calc(px*var(--fs-mul)), line-height 70건 → 토큰, letter-spacing 62건 추가, 고정크기 예외 9건 보존(폰 가짜 상태바·원형 배지 글리프·고정높이 차트 라벨). 규칙 정본 도구/타이포토큰.한선 17/17.
    • 모드 실측(learn 92개 텍스트 평균): 일반 11.15px/1.77 → 어린이 12.14px/2.02(×1.089·×1.14) → 빠른 10.93px/1.615 → 전문가 11.15px/1.665. 전 모드 가로 오버플로 0. 고정 예외(.sky-status)는 어린이 모드에서도 13.5px 불변.
    • 한글 줄바꿈 전역 수리: 브라우저 기본값이 글자 단위로 끊어 "가위바위 보가 삼진인 이 유"처럼 단어 중간이 잘리고 있었다(ops 실측). word-break:keep-all(+긴 토큰만 overflow-wrap:break-word, mono/코드는 예외 해제)로 띄어쓰기 단위 줄바꿈으로 교정 — 초등 가독성에 가장 큰 단일 개선.
    • ops 모바일 레이아웃 수리: 헤더·큐행이 좁은 폭에서 3~4줄로 접히던 것 → ≤768px에서 제목줄/버튼 세로 전개. 재캡처로 해소 확인(오버플로 0).