← 미리디 기술 사전 / Title·Subtitle·Description 대치

RLSC role → 검색·내용 대치2026.10.25 · 세 저장소 origin/main 재대조 · 저자 홍지혜(jhhong) · 2026-10-25 갱신 · 문서 v1.1.0 · 세 저장소 origin/main 재대조 · 이전판

같은 role이라도,
저장소마다 다르게 다룬다.

텍스트 노드의 RLSC role 9종을 검색·대치에 영향이 없는 것, 대치되지 않으면 원문을 두는 것, 대치되지 않으면 임시 문구를 띄우는 것으로 가르고, iUi 실서비스·aippt-prisonbreak·mordor-wiki 정본이 각각 어떻게 정했는지 나란히 놓는다.

iUi 04585231baippt be12ad0eamordor-wiki 61bfcfa
01

세 갈래로 가른다

① 영향 없음 영향 없음

검색 슬롯이 되지 않고, 대치하지 않고, 벌점도 받지 않는다. 화면에는 원문이 남는다.

② 원문 원문으로 둔다

검색·대치 구조에는 들어가지만 사용자 글을 받지 못하면 컴포넌트 원문을 그대로 둔다.

③ 임시 문구 임시 문구

대치가 채우는 본문이다. 못 채우면 role에 맞는 임시 문구(「제목을 입력해주세요.」 등)가 뜨고 순위 벌점을 받는다.

두 저장소가 Background 하나에서 갈렸다. iUi는 2026-10-23에 Background를 본문이 아닌 role로 옮겼다(c2e8981fd). aippt 벤더 사본은 그 하루 전인 2026-10-22에 iUi 5057e8954를 떠 왔기 때문에 아직 옛 갈래다 (vendor-manifest.json). 그래서 지금 iUi는 ① 영향 없음, aippt 실서비스는 ③ 임시 문구이다.

나머지 여덟 role은 같다. ① 영향 없음은 Decoration·Separator·Annotation(+ iUi만 Background), ② 원문는 Marker, ③ 임시 문구은 Title·Subtitle·Highlight·Description이다. ③ 임시 문구이라도 원문이 구조 토큰(vs·TAM/SAM/SOM·숫자가 아닌 한 글자)이면 원문으로 둔다.

02

role별 비교

「aippt 다른 경로」는 실서비스가 아닌 PoC(src/lib/visual-summary/binding.ts)와 I.I.S. 정합성 게이트다. 「옛 comp-sign」은 iUi /comp-match와 aippt 벤더 사본에 함께 남은 경로다.

roleiUi 실서비스(comp-frame)aippt 실서비스(벤더)aippt 다른 경로옛 comp-signmordor-wiki 정본
Title③ 임시 문구③ 임시 문구PoC: 반복 단위 안이면 비운다③ 임시 문구③ 임시 문구 A Class · 임시 문구 표
Description③ 임시 문구③ 임시 문구PoC: 비운다③ 임시 문구③ 임시 문구 A Class
Subtitle③ 임시 문구③ 임시 문구PoC: 비운다③ 임시 문구③ 임시 문구 B Class
Highlight③ 임시 문구③ 임시 문구PoC: Other → 비운다③ 임시 문구 숫자 모양이면 원문③ 임시 문구 숫자 모양(01·100%)은 원문
Background① 영향 없음 2026-10-23 바뀜 · 전에는 ③ 임시 문구(잠정)였다③ 임시 문구 벤더가 아직 옛 갈래PoC: 비운다③ 임시 문구정하지 않음 C Class — 등급 취지와는 맞는 쪽
Marker② 원문 순서형 카테고리는 순번 01…로 다시 매긴다② 원문 나눠 담기 2쪽부터 순번PoC: 순번 재매김 · IIS 게이트: 보존① 영향 없음 시그니처·대치에서 제외충돌 아래 4번
Decoration① 영향 없음① 영향 없음IIS 게이트: 보존① 영향 없음 Deco만 비교① 영향 없음 — 정의는 이미지 요소
Separator① 영향 없음① 영향 없음IIS 게이트: 누락으로 셈③ 임시 문구정하지 않음 C Class
Annotation① 영향 없음① 영향 없음IIS 게이트: 누락으로 셈③ 임시 문구① 영향 없음 규칙 명시(MOR-1813)
03

어긋나는 곳

정본이 정하지 않았는데 iUi가 정한 것

  1. Separator. iUi는 MOR-2753에서 ① 영향 없음로 정했다. 정본 role-v2는 C Class라고만 적는다. 규약에 한 줄을 더해야 한다.

  2. Background. 2026-10-23에 iUi가 ① 영향 없음로 옮겼다(c2e8981fd — 「워터마크처럼 배경에 깔린 글자」). 직전 판까지는 ③ 임시 문구이면서 코드 주석이 「아직」이라고 적어 두었고, 이 문서는 C Class 정의로 보면 ① 영향 없음에 가깝다고 읽었다 — 그 읽기대로 됐다. 그래도 정본은 여전히 규칙을 적지 않았다. 등급만 있고 처리 규칙이 없는 상태는 그대로이므로 규약에 한 줄이 필요하다.

  3. 글자 Decoration. 정본은 Decoration을 「장식적 목적으로 배치되는 이미지 요소」로 정의한다(role-v2.md:200). 글자 Decoration을 원문으로 두는 건 iUi가 넓힌 해석이다. content-binding-contract의 DECO는 「비우거나 제거 가능」이라 원문 유지와도 맞지 않는다(content-binding-contract.md:204).

정본과 코드가 다른 것

  1. Marker. role-v2는 「Decoration과 달리 내용 대치(컨텐츠 교체) 시 함께 변경되어야 하는 요소」라고 적는다(role-v2.md:196). 같은 위키의 실측 문서는 comp-sign 코드가 Marker를 「대치 대상에서 제외 + 원본 유지」로 처리하며 그게 설계라고 적고, role-v2의 B Class 서술을 고치자고 제안한다(marker-role-engine-consumption-as-is.md:16, marker-role-engine-consumption-as-is.md:187). iUi는 그 밖의 카테고리에서 원문, 순서형에서 순번을 다시 매긴다(04).

  2. 숫자 원문. 정본 평가 문서는 Highlight의 숫자 모양(01·100%)을 원문으로 둔다고 적는다(comp-sign shouldPreserveText 기준). iUi 실서비스는 MOR-2627 이후 숫자라서 원문으로 두는 폴백이 없다 — 임시 문구다(decideUnreplacedNode). MOR-2627 정책이 정본에 실려 있지 않은 것은 감사 티켓 MOR-2833이 다룬다.

  3. 원문 잔존을 보는 시각. I.I.S. 정합성 게이트 문서는 구조에 참조되지 않은 글이 원문으로 남는 것을 오류로 본다(iis-consistency-gate.md:33). 그런데 ① 영향 없음·② 원문는 원문 유지가 의도된 동작이다. 게이트의 예외 후보에는 Decoration만 있다.

벤더 사본이 아직 따라오지 않은 것

  1. Background. iUi가 2026-10-23에 본문이 아닌 role로 옮겼는데(c2e8981fd), aippt 벤더 사본은 그 하루 전인 2026-10-22에 iUi 5057e8954를 떠 왔다(vendor-manifest.json). 그래서 같은 Background 글자가 iUi에서는 원문으로 남고 aippt 실서비스에서는 임시 문구를 받는다. 벤더를 다시 떠 오면 사라지는 차이이고, 이 문서에서 두 실서비스가 갈린 유일한 자리다.

같은 저장소 안에서 갈리는 것

  1. aippt I.I.S. 정합성 게이트. isPreservedByReplacement가 Marker·Deco·Decoration만 보존으로 본다. Separator·Annotation 노드가 구조에 없으면 누락으로 센다 — MOR-2753이 반영되지 않았다.

  2. 옛 comp-sign 경로. helpers.ts:746가 Marker와 Deco만 건너뛴다. Separator·Annotation은 ③ 임시 문구이 된다. 이름도 'Deco'만 비교해서, RLSC leaf가 Decoration이면 걸리지 않을 수 있다 — 이름을 줄이는 getRoleLeafName은 확인하지 못했다.

  3. aippt PoC. slotRoleOf가 Title·Subtitle·Description·Marker만 가르고 나머지를 Other로 본다. 반복 단위 안의 Annotation도 비워진다. 코드 주석에 실서비스는 comp-frame이라고 적혀 있어 운영 영향은 없다.

04

Marker는 검색에 남지만, 사용자 글은 받지 않는다

그래서 「대치에 쓰지 않는 노드」로 정확히 묶이는 건 Decoration·Separator·Annotation·Background 넷이다 — 2026-10-23에 Background가 들어왔다. Marker는 사용자 글을 받지 않는다는 점만 같다. Rust role_keeps_original는 다섯을 함께 보지만, 그 뜻은 「원문을 남긴다」가 아니라 「사용자 글을 받지 않는다」다. TS에는 이 쌍둥이가 없다 — isNonContentRole는 네 role만 보고, 적재기의 preserveTextNodesOf는 Marker만 본다. 세 role은 서버가 node_roles 컬럼으로 거른다.

05

정본의 A·B·C Class는 처리 규칙이 아니라 중요도다

role-v2의 「Role Priority Classes」(role-v2.md:219)는 내용 대치에서 그 role이 빠지면 얼마나 어색한지로 중요도를 나눈다. 원문으로 둘지 임시 문구를 띄울지는 이 등급이 아니라 role마다 붙은 설명에 있다.

등급정의(원문)role
A Class「내용대치시 누락되거나 내용이 주입되지 않으면 이상하게 느낄 수 있는 핵심 요소들」Title, Description
B Class「누락되는 경우 사용자가 그 사실을 인지하기는 쉽지만 스스로 채워넣거나 수정해도 될 것이라고 인지하기 쉬운 것」Subtitle, Highlight, Marker
C Class「애초에 Component 단위로 포함될 필요가 없거나, 내용이 누락되어도 사용자가 손을 댈 필요가 없다고 느낄 수도 있는 요소들」Separator, Decoration, Background, Annotation
06

근거

저장소자리무엇
iUiELEMENT_ROLE_KINDSrole 9종 → content·marker·nonContent 표(정본)
iUinonContentTextIds적재기가 nonContent 노드를 슬롯 후보에서 뺀다
iUidecideUnreplacedNode대치되지 않은 노드: Marker·nonContent → 원문, 구조 토큰 → 원문, 그 밖 → 임시 문구
iUiclassifyPreservableText원문을 token·number·other로 가른다(role은 보지 않는다)
iUiplaceholders.ts:62role별 임시 문구 표(Title·Subtitle·Desc·Hl·default)
iUiNON_CONTENT_ROLESRust 쌍둥이 — 2026-10-23에 셋에서 넷으로(Background 추가)
aipptvendor decoration.tsiUi 표의 벤더 사본
aipptrole-v2.ts:67Annotation 규칙(코드 쪽 role 정의)
mordor-wikirole-v2.md:202Decoration은 「Component 내용대치가 되지 않는 꾸밈요소」
mordor-wikirole-v2.md:212Annotation 「(1) 템플릿 간 내용 대치 시 내용이 변경되지 않는다 (2) 요약문이 배정되는 슬롯으로 쓰이지 않는다」
mordor-wikiplaceholder-effect.md:184임시 문구 표(평가 문서)

세 저장소 모두 fetch한 origin/main의 고정 커밋에서 읽었다(작업 트리는 보지 않았다). 2026-10-25 재대조에서는 직전 판이 근거로 든 경로 20개를 옛 커밋과 지금 커밋 사이로 git diff해 바뀐 것만 다시 읽었다 — iUi에서 decoration.ts·nodeTextPolicy.ts·title_candidate.rs가 Background 때문에 바뀌었고, align.rs·shape.rs의 변경은 TableItem 나눠 담기(MOR-2683)와 리팩터라 role과 무관했다. aippt와 mordor-wiki는 근거로 든 경로가 모두 그대로였다. 바뀐 줄에 맞춰 permalink의 줄 번호를 다시 맞췄다. aippt·mordor-wiki는 조사를 맡긴 결과를 받은 뒤 결론을 좌우하는 줄(role-v2.md 196·200·202·212·219~262, IIS 게이트 172행, PoC slotRoleOf)을 원문과 다시 대 봤다. 옛 comp-sign의 getRoleLeafName 매핑과 Background·Separator가 옛 경로에서 받는 문구는 확인하지 않았다.