← 미리디 기술 사전

내용시각화 · 데이터 포맷 레퍼런스

RLSC — 컴포넌트의 일생

컴포넌트 한 벌이 만들어져 풀에 들어가고, 런타임에 꺼내져 쓰이기까지. 이 묶음은 그 두 구간을 한 흐름으로 잇는다. 모양(sheet json)을 고치고, 의미(RLSC)로 판단하고, 테마에 맞추는 세 축이 각 구간 어디에서 만나는지를 코드로 확인해 적었다.

갱신 2026-09-13 기준 코드 실측 저장소 web-2 · iui · aippt
§0

이 묶음은 네 장이다

§1

같은 디자인의 세 표현

이 절이 답하는 질문 — 컴포넌트 하나를 두고 우리는 왜 세 가지 다른 데이터를 들고 있나?

하나의 디자인이 세 표현으로 동시에 존재한다. 그리는 것은 모양, 판단하는 것은 의미, 색을 맞출 곳은 테마다. 셋은 상속 관계가 아니라 서로 다른 질문에 답하는 서로 다른 자료다.

모양

Sheet json

실제로 그리는 원본 노드 트리. PageJson · design_object_sheet_json. 모든 대치의 최종 수정 대상이다 — 내용·스타일·이미지 대치 셋 다 결국 이것을 고친다.

의미

RLSC

type / role 두 축의 트리. aippt 파이프라인이 오프라인에서 만든다. 컴포넌트 단위(Component RLSC)는 검색·랭킹·폰트 주입의 근거이고, 시트 단위(Sheet RLSC)는 시그니처의 원료다.

색

테마

두 갈래다. 내용시각화는 런타임에 템플릿 페이지에서 뽑은 ColorProfile 을, AI 프레젠테이션은 오프라인 파일 ThemeRegistry 를 쓴다. 자세히는 런타임 대치 §3.

Sheet json 의 타입은 저장소마다 이름이 다르다

엔진은 PageData / PageJson, iui 는 Doc / Sheet, MORDOR 는 느슨한 PageJson 이다. 상속이 아니라 각자 필요한 필드만 다시 선언한 것이라 구조적으로 호환되어 그냥 넘겨 쓴다. 필드 단위 해부는 sheetJson 해부도에 있다.

§2

전체 지도 — 공급과 소비

이 절이 답하는 질문 — 내가 지금 보고 있는 코드는 이 그림의 어디쯤인가?

위 줄은 오프라인이다. 배치로 돌고, 사람이 검수하고, 결과는 DB 에 남는다. 아래 줄은 런타임이다. 사용자가 버튼을 누른 그 순간 브라우저에서 돈다. 둘을 잇는 것이 가운데 서빙 풀이고, 위 줄은 거기에 쓰고 아래 줄은 거기서 읽기만 한다.

오프라인 · 공급 — 쓴다 런타임 · 소비 — 읽는다 템플릿 원본 json_sheet_data 쪽 여러 장 Background Extractor 틀 ↔ 내용 가르기 → 6-ALSC 구조화 (I.I.S.) 의미 트리를 얹는다 → Component RLSC 린터 · 유효성 자격을 적는다 valid_component_meta GC 게이트 품질을 심사한다 garbage_collector_meta 서빙 풀 유효성 키 ∩ GC 키가 모두 true 인 것 comp-sign 검색 structureHash 후보를 고른다 후보 해석 textMap · textNodeRoles 브라우저가 fetch 4단계 대치 내용 → 폰트 → 스타일 → 이미지 sheet json 을 고친다 recolor 모양 + 테마 + 배경색 RLSC 안 쓴다 캔버스 반영 ComponentItemReplaceCommand
진한 테두리 셋이 이 묶음이 자세히 다루는 구간이다. 가운데 풀이 두 세계의 유일한 접점이고, 위 줄은 쓰기만, 아래 줄은 읽기만 한다.
§3

구간마다 무엇이 결정되나

이 절이 답하는 질문 — 어떤 값이 이상할 때 어느 구간을 열어 봐야 하나?
구간입력여기서 결정되는 것어디에 남나
Background Extractor
오프라인
템플릿 하나 = 쪽 여러 장 노드마다 slidemaster / foreground background_alsc · foreground_alsc + 롤 버킷 4
구조화 (I.I.S.)
오프라인
쪽 · ALSC type / role 두 축의 의미 트리 structure_json (Component RLSC)
린터 · 유효성
오프라인
구조화 결과 이 컴포넌트가 규격에 맞는가 valid_component_meta
GC 게이트
오프라인
유효성 통과분 이 컴포넌트가 쓸 만한가 garbage_collector_meta · 판정 원장
comp-sign 검색
런타임 · 서버
시그니처 · 질의 무엇으로 바꿀지 (후보키) 응답 — 후보키와 파일 URL
4단계 대치
런타임 · 브라우저
후보 sheet json + RLSC + 이미지 글·폰트·색·이미지를 실제로 바꾼 sheet json 메모리 — 곧바로 캔버스로

오프라인 네 구간은 aippt-prisonbreak, 런타임 두 구간은 miricanvas-web-2 와 miricanvas-iui 에 있다. 구간별 파일·줄 번호는 각 낱장의 코드 지도 절에 있다.

§4

틀리기 쉬운 셋

1

“RLSC 가 색을 정한다”

정하지 않는다. 런타임 색 재배정 함수 recolorComponent 의 입력은 모양 · 테마 · 배경색 셋뿐이다. 상위 계약을 맞추느라 RLSC 를 인자로 받기는 하지만 이름 앞에 밑줄이 붙어 있고(_componentRlsc) 본문에서 쓰지 않는다. RLSC 가 실제로 쓰이는 곳은 검색·랭킹, role 폰트 주입, 이미지 대치의 role 게이트 셋이다.

2

“유효성 키만 보면 된다”

두 키의 교집합이다. 유효성 키는 «규격에 맞는가»(자격), GC 키는 «쓸 만한가»(품질)로 묻는 질문이 다르고, 판 갈이 주기와 소유도 다르다. 그래서 컬럼을 갈라 두었다. 한쪽만 보면 규격에는 맞지만 품질 게이트에서 걸린 것이 서빙에 섞인다.

3

“키가 없으면 통과한 것이다”

아니다. 키 없음은 미판정이고, 통과(true)·걸림(false)과 구별되는 제3의 상태다. 판정 불가인 것을 조용히 통과시키지 않으려고 일부러 비워 둔다. 자세히는 Garbage Collector §1.