아카이브 · 당시 기준

해당 날짜·코퍼스의 실험 기록입니다. 현재 구현의 성능 수치로 사용하지 않습니다. 본문과 자동 동기화 표는 보관 당시 내용입니다.

현재 기준과 원본 보기 → · 보관 목록

← 미리디 아카이브 / 내용 대치 후 요소 재배치

내용시각화post-replace-relayout경과 보고2026-09-01

재배치 개발 경과와
검증 결과

접근, 알고리즘, 판정 기준, 동일 코퍼스 실험, 실제 사례, 다음 개선

게이트 통과 S+A 84 / 89그중 SUCCESS 65 / 89잔여 FAIL 5정렬선 평균 0.943평가 제외 11 / 100
§0

핵심 요약

게이트 통과 · S+A

84/89

94.4% — FAIL 조건 통과

그중 SUCCESS

65/89

73.0% · method 9 적용

잔여 FAIL

5

겹침 2 · 정렬선 붕괴 3

평가 제외

11/100

성적 분모에서 빠짐

같은 89건 · 재배치 전 → 후 위 세 줄은 자기 Before 를 100%로 둔 비율 FAIL 케이스 Before 88건 After 5건 넘침 텍스트 노드 Before 85개 After 0개 · 해소 원안 대비 신규 겹침 Before 138쌍 After 2쌍 정렬선도 함께 개선됐다 정렬선 보존율 평균 Before 0.930 After 0.943 · 중위 1.000 SUCCESS 하한 0.80 미만은 11건 → 9건, 0.90 미만은 method 9 전 51건 → 13건으로 줄었다.
같은 89건을 현재 판정 기준으로 다시 쟀다. Before 는 모두 원안 글자 크기를 유지한 입력이다 — 폰트를 줄여 문제를 감춘 상태가 아니다.

무엇을 했나

남는 공간을 재분배한다. 실제 도형 외곽선과 글자 영역으로 크기·간격·위치를 맞추고, 부족할 때만 글자를 줄인다.

무엇이 남았나

ACCEPTABLE 19건 중 정렬선 사유는 6건이고, 그 하나만 걸린 것은 4건이다. 가장 큰 잔여 사유는 유휴 여백 13건이다 — §12.

어떻게 읽나

자동 판정 통과율을 디자인 만족도나 상용 성공률로 읽지 않는다. 기계로 잴 수 있는 조건만 통과한 것이다.

최신 저장 채점 2026-09-01 11:38:59 KST · 평가 가능 89건 · 실제 글자 영역 실측 2026-08-31 19:01:03~19:01:20 KST. 원시값은 eval-out/runs/methods/adaptive-relayout/evaluation.json과 eval-out/runs/rescore-20260901e/panes.json을 직접 합산했다.

1부

결과 — 무엇이 달라졌나

시각자료 먼저
§1

결과

넘침 텍스트 노드85 → 049개 케이스 전부 해소
신규 겹침138 → 2쌍98.6% 감소 · 2개 케이스 잔존
좁은 칼럼44 → 979.5% 감소 · 7개 케이스 잔존
페이지 밖 잘림0 → 0새 잘림 없음 · 유지
폰트 축소 없는 케이스89 → 85/894건 축소 · 그중 2건은 0.90 이상
정렬선 보존율 평균0.930 → 0.943method 9 전 0.799 · 중위 1.000

넘침·겹침·좁은 칼럼을 줄이면서 정렬선도 회복했다. method 9가 원안의 같은 변을 그룹으로 묶어 마지막에 다시 세운 결과다.
남은 대가는 폰트 축소 4건과 유휴 여백 증가 13건이며, 정렬선 0.60 미만 3건은 새 FAIL 바닥이 잡아낸다.

같은 89건의 재배치 전후 판정 SUCCESS ACCEPTABLE FAIL 미판정 88 재배치 전 0 / 1 / 88 / 0 65 19 재배치 후 65 / 19 / 5 / 0 0 22 45 67 89 S / A / F / 미 게이트 통과(초록+보라)는 1건 → 84건. 초록은 method 9 적용으로 33건 → 65건이 됐다. Before 는 모두 원안 글자 크기를 유지한 입력이다 — 폰트 축소로 문제를 감춘 상태가 아니다.
막대 하나가 같은 89건 전체다. 재배치 전 FAIL 88건 중 83건이 게이트를 통과하고 5건이 남았다. method 9가 정렬선을 회복해 통과 84건 중 65건이 SUCCESS다.

게이트 통과율은 (SUCCESS+ACCEPTABLE) 94.4%다. 넘침·겹침을 남기지 않고 내용을 담아냈다는 뜻이다. SUCCESS 는 73.0%다. method 9 전 같은 89건의 37.1%에서 35.9%p 올랐다 — §3에서 정렬선 개선을 분리해 본다. 두 숫자의 의미를 바꿔 쓰지 않는다.

기본 결함과 가독성 관련 전후 지표

# 지표 Before After 해석
1 넘침 텍스트 노드 85개 0개 49개 케이스에 있던 넘침이 전부 사라졌다
2 신규 겹침 138쌍 2쌍 약 98.6% 감소했지만 2개 케이스에 잔존
3 좁은 칼럼 44개 9개 79.5% 감소, 7개 케이스에 남음
4 폰트 축소 없는 케이스 89/89건 85/89건 4건에서 축소 사용; 그중 2건은 0.90 이상이다
5 페이지 밖 텍스트 잘림 0개 0개 이번 코퍼스에서 새 텍스트 잘림 없음
6 정렬선 보존율 평균 0.930 0.943 method 9로 회복. 0.80 미만 9건 · 중위 1.000
주요 결함 감소율 · 동일 89건 넘침 노드 100.0% 85개 → 0개 · 49개 케이스 전부 해소 신규 겹침 쌍 98.6% 138쌍 → 2쌍 · 2개 케이스에 잔존 좁은 칼럼 노드 79.5% 44개 → 9개 · 7개 케이스에 잔존 0% 25% 50% 75% 100% 함께 좋아진 구조 지표 정렬선 보존율 평균 +1.4% 0.930 → 0.943 · method 9 전 0.799에서 크게 회복했고, 정렬선 1.000인 케이스는 53건이다
위 표의 앞 세 줄을 감소율로 본 것이다. 100%는 넘침 노드가 0이 됐다는 뜻이고, 나머지 둘은 절대량이 남아 있다.

유휴 여백 > 원안

13

ACCEPTABLE 19건의 가장 큰 사유

정렬선 < 0.80

6

그중 4건은 이 사유 하나뿐

폰트 < 0.90

2

사유는 서로 겹칠 수 있음

사유별 건수는 중복 집계라 합이 19를 넘는다. 최신 Sol baseline은 같은 89건에서 SUCCESS 58 · ACCEPTABLE 23 · FAIL 6 · UNKNOWN 2다. UNKNOWN 2건은 baseline 결과가 없어 비교 분모에서 빠진다.

§2

실제 사례

여기는 눈으로 보는 몫이다

기계로 잴 수 있는 제약(넘침·겹침·폰트·여백)은 §3에서 같은 평가자로 세 방식을 함께 채점했다. 이 절은 그 표가 답하지 못하는 것 — 줄바꿈, 정렬, 균형처럼 사람이 봐야 아는 품질을 실제 렌더 이미지로 확인하는 자리다. 자동 등급이 SUCCESS 인 사례에도 어색한 줄바꿈이 남아 있다.

배경을 넓혀 글자 크기를 지켰다 6447600

SUCCESS
넘침 2 → 0신규 겹침 0폰트 1.00

글을 줄이기 전에 남는 가로 공간을 쓴다.

한 장씩 크게 보기

아래 그림이 한 줄에 한 장씩 커집니다. 다시 눌러 나란히 볼 수 있습니다.

배경을 넓혀 글자 크기를 지킨 성공 — Before · 재배치 전
Before · 재배치 전FAIL · 넘침 2 · 신규 겹침 0 · 폰트 1.00
배경을 넓혀 글자 크기를 지킨 성공 — After · 재배치 후
After · 재배치 후SUCCESS · 넘침 0 · 신규 겹침 0 · 폰트 1.00
배경을 넓혀 글자 크기를 지킨 성공 — Original · 대치 전 원안
Original · 대치 전 원안SUCCESS · 넘침 0 · 신규 겹침 0 · 폰트 1.00

글자를 15% 줄여 담았다 6134657

ACCEPTABLE
넘침 2 → 0신규 겹침 0쌍정렬선 1.00폰트 0.85

구조는 지켰지만 SUCCESS 기준 0.90 에 못 미친다 — 가독성을 양보한 결과.

한 장씩 크게 보기

아래 그림이 한 줄에 한 장씩 커집니다. 다시 눌러 나란히 볼 수 있습니다.

Before · 재배치 전FAIL · 넘침 2 · 겹침 0 · 폰트 1.00
After · 재배치 후ACCEPTABLE · 넘침 0 · 겹침 0 · 폰트 0.85
실제 렌더 이미지 · 두 장을 같은 좌표 범위와 배율로 확대했습니다.
2부

비교 — 최신 strict 채점과 역사 기록

같은 평가자
§3

최신 비교 — 통과율을 지키면서 정렬선도 회복했다

이 표가 답하는 것

통과율과 strict 등급

주지표는 게이트 통과율 (S+A)/89 — 넘침·겹침·과도 축소·정렬선 붕괴를 통과했는가다. SUCCESS는 거기에 정렬선·폰트·여백까지 지킨 더 좁은 등급이라 따로 읽는다.

이 표가 답하지 않는 것

시각적 품질

픽셀 일치율도, 사람의 디자인 선호 점수도 아니다. 그쪽은 §2 대표 사례를 눈으로 비교해 따로 본다.

최신 저장 산출물에서 함께 확인되는 baseline은 Sol 한 열이다

Adaptive와 Sol baseline을 같은 채점기 · 같은 실측 글자 영역 · 같은 Original 좌표계로 다시 쟀다. Adaptive 분모는 89건이고, Sol은 결과가 없는 2건이 있어 비교 가능한 분모가 87건이다. 아래의 5-way 표는 8월 30일 역사 기록으로 분리한다.

Adaptive method 9와 Sol baseline · 최신 저장 판 채점 2026-09-01 11:38:59 KST 비율 비교 · 각 방법의 유효 분모 기준 0%25%50%75%100% 게이트 통과 Adaptive method 9 94.4% · 84/89 Sol baseline 93.1% · 81/87 SUCCESS Adaptive method 9 73.0% · 65/89 Sol baseline 66.7% · 58/87 판정 구성 · 동일 89건 전체 SUCCESS ACCEPTABLE FAIL UNKNOWN Adaptive method 9 65 / 19 / 5 / 0 Sol baseline 58 / 23 / 6 / 2 Adaptive n=89 · Sol 비율 n=87 (UNKNOWN 2 제외) · 구성 막대는 두 방법 모두 89건 전체 Adaptive method 9 Sol baseline
게이트 통과율은 1.3%p 차이지만, strict SUCCESS는 Adaptive가 Sol보다 6.3%p 높다. 아래 구성 막대는 UNKNOWN을 포함한 동일 89건을 기준으로 비교한다.
최신 저장 판게이트 통과SUCCESSS / A / F / 미판정분모
Adaptive Relayout · method 984 / 89 · 94.4%65 / 89 · 73.0%65 / 19 / 5 / 089
Sol baseline81 / 87 · 93.1%58 / 87 · 66.7%58 / 23 / 6 / 287

채점 시각 2026-09-01 11:38:59 KST. UNKNOWN 2건은 5546858·5698327의 baseline 결과 없음이며, Adaptive 성적에는 포함된다.

8월 30일 5-way 실험 조건 · 역사 기록

대상

5 방법 × 100건

공통 평가 89건

모델

opus-5 / sol-5.6

추론 강도 high

규칙

짧은 / 긴

해시 고정 · 도중 변경 없음

시도

1회 생성

되돌아가 고치는 반복 없음

“짧은 규칙”과 “긴 규칙”

짧은 규칙

relayout_rules.md

82줄 · 5.4KB — Before 와 After 가 각각 무엇인지만 정의한다.

  • 0 · 용어 (컴포넌트 · 컨테이너 · bounding box)
  • 1 · 입력과 생성 절차
  • 2 · 불변 조건 — 개수·타입·내용·정렬·위상·배율 유지
  • 3 · Before — 컨테이너 고정 · 넘침 · 폰트 축소 · 여백 낭비
  • 4 · After — 크기·위치만 조정 · 여백 재분배 · 겹침 제거
  • 5 · 시각화 관례 (파란 점선 = 컨테이너, 노란 점선 = bounding box)

긴 규칙

before-after-rules.md

1,275줄 · 97.6KB — 정의에 더해 어떻게 푸는지·어떻게 채점하는지까지 담는다.

  • 0~1 · 30초 요약 · 문제 정의
  • 2 · 불변 조건 — 폰트 동일 · 내접 · 안전 여백 · 정렬선 보존율 1
  • 3 · 좌표계 주의
  • 4 · 재배치 알고리즘 8절 — 가로 확장 · 넘침 · 겹침 · 유닛 내부 · 그리드 · 데코레이션
  • 6~7 · 판정 기준 · 케이스 problems 유형 · 사람 눈 루브릭
  • 8 · Expected 제작 스펙 (사람·LLM 공용)
대조 항목짧은 규칙긴 규칙
분량82줄 · 5,397B1,275줄 · 97,636B (약 18배)
재배치 방법을 알려주나아니오 — 결과 상태만 정의예 — 축별 해법과 순서까지
판정 기준이 들어 있나아니오예 — 0.90 / 0.70 경계와 지표 정의

길이만의 효과로 읽지 않는다. 두 문서는 분량뿐 아니라 내용·구체성이 다르고, 긴 쪽에는 이번 테스트 100건 중 44건의 ID가 과거 사례 설명과 함께 들어 있다.

제약 만족도와 생성 시간 — 2026-08-30 역사 기록

# 방법 통과 (S+A)/89
주지표
그중 SUCCESS
정렬선까지 지킨 것
S / A / F / 미판정 After 생성 평균 시간 표본
After 생성분
결과 없음
1 Adaptive Relayout 96.6% 37.1% 33 / 53 / 3 / 0 0.16초 100/100 0
2 Opus high · 짧은 규칙 82.0% 55.1% 49 / 24 / 16 / 0 97.27초 100/100 0
3 sol-high · 짧은 규칙 79.8% 43.8% 39 / 32 / 16 / 2 64.91초 96/100 4
4 Opus high · 긴 규칙 76.4% 57.3% 51 / 17 / 20 / 1 171.10초 96/100 4
5 sol-high · 긴 규칙 76.4% 59.6% 53 / 15 / 15 / 6 97.48초 86/100 14

아래 5-way 표와 그림은 method 9·정렬선 붕괴 바닥(0.60) 적용 전 역사 기록이다. 최신 성적과 직접 비교하지 않는다. 한 줄에 분모가 둘이다 — 시간 표본은 평균 시간을 잰 건수(실제로 After 가 나온 것), 통과·SUCCESS는 평가 가능 89건 고정 분모다. Adaptive 가 100/100 인 것은 평가 제외 11건에도 After 를 만들었기 때문이다. · sol 두 설정의 미판정에는 Sol 이 baseline 을 못 만든 5546858·5698327 이 들어 있다.

다섯 방법의 판정 구성 · 평가 89건 · 통과율 순 SUCCESS ACCEPTABLE FAIL 미판정 33 53 Adaptive Relayout 33 / 53 / 3 / 0 49 24 16 Opus high · 짧은 규칙 49 / 24 / 16 / 0 39 32 16 sol-high · 짧은 규칙 39 / 32 / 16 / 2 51 17 20 Opus high · 긴 규칙 51 / 17 / 20 / 1 53 15 15 sol-high · 긴 규칙 53 / 15 / 15 / 6 0 22 45 67 89 S / A / F / 미 초록+보라 = 통과. Adaptive 는 빨강이 거의 없지만 초록이 짧다 — 담기는 하되 정렬선을 못 지킨다. LLM 은 반대다. 초록 비율은 높지만 FAIL 이 15~20건 남는다.
두 그림이 겹쳐 있다. 통과 길이(초록+보라)로 보면 Adaptive 가 가장 길고, 초록만 떼어 보면 Adaptive 가 가장 짧다. 어느 쪽을 재느냐로 순위가 뒤집힌다.

SUCCESS 73.0% — method 9가 정렬선을 다시 세웠다

정렬선 보존율 0.80 하한은 그대로 두고 알고리즘을 고쳤다. ACCEPTABLE은 53건에서 19건으로 줄었고, 정렬선 사유는 6건만 남았다. 임계값을 낮춰 등급을 올린 것이 아니다.

정렬선 < 0.80

6

ACCEPTABLE 19건 중 · 4건은 사유가 이것 하나

유휴 여백 > 원안

13

현재 가장 큰 잔여 사유

폰트 < 0.90

2

줄여서 담은 것

한 건이 두 사유에 걸릴 수 있어 합이 19를 넘는다. 정렬선 평균은 method 9 전 0.799에서 0.943으로, 중위는 0.832에서 1.000으로 올랐다.

정렬선 보존율 분포 · 같은 89건 막대 = 케이스 수 재배치 전 재배치 후 0 2 <0.50 2 1 0.50–0.65 9 6 0.65–0.80 12 4 0.80–0.90 31 23 0.90–1.00 35 53 1.00 SUCCESS 하한 0.80 ← 0.80 미만 합계 — 이 구간이 SUCCESS 를 못 받는다 재배치 전 11건 재배치 후 9건
method 9가 원안에서 같은 변에 있던 그룹을 마지막에 다시 세웠다. 정렬선 1.000이 53건으로 늘고, 0.80 미만은 9건으로 줄었다.

임계값을 낮추지 않고 알고리즘을 고쳤다

method 9는 정렬 그룹을 원래 좌표로 되돌리지 않고, R·B는 최대값, L·T는 최소값으로 같은 선에 맞춘다. 어떤 상자도 좁아지지 않는 방향이라 앞 단계의 확장을 보존한다.

betterOf가 신규 겹침 → 넘침 → 폰트 → 정렬선 순으로 완성본을 비교해, 상위 지표가 나빠지는 맞춤은 그룹째 되돌린다. 실측상 나빠진 케이스는 0건이다.

긴 규칙은 통과율에서 두 모델 모두 손해였다

통과율이 Opus 82.0% → 76.4%, sol 79.8% → 76.4%로 떨어졌다. 동시에 시간은 Opus 97.27 → 171.10초, sol 64.91 → 97.48초로 늘었고, 결과를 아예 못 낸 건수도 sol 에서 4 → 14건으로 늘었다. 더 길고 구체적인 문서를 준 쪽이 더 오래 걸리고 더 낮았다. 다만 SUCCESS 만 보면 긴 규칙이 오히려 높다 — 한두 건 차이로 모델·규칙의 일반적 우열을 확정하지 않는다.

2026-08-30 시간 측정 경계 — method 9 적용 전 역사값

포함

알고리즘 — Before 투입부터 실측 보정 완료 After 반환까지. 반복 글자 측정 포함.

LLM — 호출 시작부터 답변 수신·공통 적용기로 After 를 만든 시점까지. 호출 프로그램의 시작·통신 시간 포함.

제외

입력 준비 · 외곽선 사전 추출 · Before 이미지 생성 · 최종 독립 채점 · 발표용 썸네일.

대기열에서 실행 전 기다린 시간도 제외한다. 따라서 “화면에 After 가 보일 때까지의 총시간”과는 다르다.

# 방법 전체 요청 평균 After 중앙값 After 95백분위 글자 실측
1 Adaptive Relayout · method 9 전 0.16초 0.09초 0.60초 2.69회 / 생성
2 Opus high · 짧은 규칙 97.27초 67.19초 296.89초 최종 채점 시 공통 실측
3 sol-high · 짧은 규칙 64.28초 58.35초 153.11초 최종 채점 시 공통 실측
4 Opus high · 긴 규칙 166.64초 155.74초 389.68초 최종 채점 시 공통 실측
5 sol-high · 긴 규칙 88.47초 92.71초 191.26초 최종 채점 시 공통 실측

이 시간 표는 최신 성능값이 아니다

method 9의 실측 경로는 예측판 확인과 글상자 정렬 검증을 더해 케이스당 렌더 예산을 최대 6장으로 둔다. 최신 89건의 평균·중앙값·p95는 저장 산출물에 기록되지 않아, 위 0.16초를 오늘 판의 실행시간으로 재사용하지 않는다.

LLM 두 규칙은 원안 글자 크기를 요구하고 알고리즘은 정책 하한까지 줄일 수 있다 — 현재 방식 전체의 비교이지 모델의 추론 능력만 분리한 비교가 아니다.

알고리즘의 실측 반복 보정 대 LLM 의 1회 생성을 비교한 것이다. 각 LLM 케이스는 한 번만 실행했고, 네트워크·부하·동시 실행의 영향을 받으므로 평균 시간을 모델 고유 상수나 운영 SLA 로 쓰지 않는다.

Adaptive Relayout 의 실행 경로에는 LLM 호출이 없다. LLM 은 이번 비교의 baseline 생성과, 그와 별개인 개발·평가용 Expected 예시 작성에만 쓴다.

3부

과정과 디테일

10분
§4

접근 — 구조를 지키고, 남는 공간을 필요한 곳에 준다

문제 정의는 한 문장으로만 짚습니다. 글은 바뀌었는데 공간 배분이 그대로이기 때문에, 한쪽은 넘치고 다른 쪽은 비어 있습니다. 우리가 바꾸는 것은 내용이 아니라 그 배분입니다.

이번 접근에서 먼저 정한 세 가지

  1. 변경할 수 있는 것과 없는 것을 나눈다. 텍스트와 배경 도형의 폭·높이·위치·간격을 조정합니다. 내용, 노드 집합, 부모·자식 구조와 그리는 순서는 유지하며 사진·차트 자체를 늘려 문제를 숨기지 않습니다.
  2. 문제를 축과 관계로 나눈다. 가로 넘침, 세로 넘침, 한 카드 내부 충돌, 카드 사이 충돌은 각각 다른 방법으로 풉니다.
  3. 후보를 만든 뒤 실제 렌더로 검증한다. 좋아 보이는 숫자만 보고 채택하지 않고, 실제 글자 영역으로 넘침·겹침이 남는지 확인합니다.

예전 tidyLayout에서 배운 점: 모든 요소를 힘으로 동시에 밀고 당기는 방식은 확장·정렬·균형의 목표가 충돌했고, 튜닝을 판정할 기준도 부족했습니다. 현재는 먼저 제약과 지표를 정의하고, 목적별 후보를 제한된 범위에서 적용합니다. 이 설명은 과거 실험 기록이다.

함께 움직일 단위를 먼저 정한다

유닛은 배경 도형과 그 안의 글처럼 함께 움직이는 최소 단위입니다. 같은 줄은 밴드, 같은 열에서 공간을 다투는 단위는 체인, 그 전체를 담는 큰 도형은 프레임으로 다룹니다.

이 관계를 먼저 고정하면, “무엇과 무엇이 한 묶음인가”가 이동 도중 바뀌지 않습니다. 그다음 여백을 나누고 겹치지 않게 배치하되, 가능한 한 원래 자리에서 덜 움직이는 해를 구합니다. 모든 레이아웃을 전역 탐색하는 방식은 아닙니다.

§5

파이프라인 — 크기·충돌·축소를 끝낸 뒤 정렬선을 다시 세운다

현재 UI 의 기본 선택은 Adaptive Relayout(adaptive-relayout)이다. 후보 아홉 개를 가로 넘침 → 세로·가로 재분배 → 유닛 내부 → 유닛 간 → 세로 여백 → 가로 여백 → 폰트 축소 → 정렬선 복구 순으로 잇는다.

순서함수하는 일
1resolveHorizontalOverflow가로 넘침을 줄인다
2balanceSlackToFixedPoint
redistributeVerticalSlack ↔ openHorizontalSlack
세로 여백 재분배 ↔ 가로 폭 확장을 번갈아
3separateOverlapsWithinUnit한 유닛 안의 텍스트 겹침 정리
4separateOverlapsBetweenUnits유닛 사이 밴드 분리
5spreadIntoVerticalSlack세로 빈 공간으로 펼치기
6escapeIntoHorizontalSlack가로 빈 공간으로 빼기
7shrinkFontToReadableFloor그래도 안 되면 폰트 축소
8keepGuides · method 9원안에서 같은 변에 있던 정렬 그룹을 마지막에 한 선으로 복구

함수 이름이 번호에서 서술형으로 바뀌었다. 아래 도해의 M1~M9 은 개발 식별자이며 실행 순서가 아니다 — 실행 순서는 위 표의 「순서」 칸이다.

INPUT · 화면에 한 번 렌더링된 sheetJsonOriginal sheetJson → 내용 대치 → 1회 화면 렌더그 결과인 Before(rendered.json)를 재배치 입력으로 사용0 관계와 제약 고정유닛 · 밴드 · 체인 · 프레임 / Original은 기준 자료로 참조크기 조정M3 가로 넘침도형 폭 확장 또는폭 축소 시 줄 수 추정M1 ↔ M2세로 여백 ↔ 가로 폭최대 3회 · 줄 수 추정M5 내부 충돌한 도형 안에서제목·본문 간격 조정배치 조정M4 유닛 사이겹친 단위를 분리원래 자리에서 최소 이동M7 세로 여유빈 위·아래 공간 활용펼치기 · 짝 밀기M8 가로 여유옆의 빈 공간으로남은 충돌 분리M6 · 앞 단계로 해결되지 않을 때만 축소실측 통과 시 축소 생략 / 축소 시 줄바꿈·높이를 계산해 재배치엔진으로 글자 영역 재측정 → 보정 반복 ↓M9 · 정렬선 동반 이동원안의 같은 변 그룹을 한 선에 세움 · 상위 지표가 나빠지면 되돌림OUTPUT · Adaptive Relayout이 적용된 sheetJson
입력은 내용 대치 후 한 번 렌더된 sheetJson, 출력은 재배치가 적용된 sheetJson이다. method 9는 크기·겹침·폰트가 확정된 맨 끝에서 돈다.

method 9 · 선은 옮겨도 되고, 흩어지면 안 된다

원안에서 L·R·T·B 변이 같은 노드를 정렬 그룹으로 묶고, 현재 문서에서 깨진 큰 그룹부터 복구한다. 목표선은 R·B 최대 · L·T 최소라 어떤 상자도 좁아지지 않는다.

예측 경로는 줄바꿈 실측이 낡지 않도록 배경 도형만 늘리고 글상자는 자리만 비킨다. 실측 경로는 엔진으로 다시 굽고 판단할 수 있어 글상자까지 맞춘다. 예측판 확인 → 일괄 정렬 → 필요 시 큰 그룹부터 개별 정렬 순으로 시도하며 렌더 예산은 케이스당 최대 6장이다.

예측은 남아 있다

“LLM 호출이 없다”는 맞지만 “예측 계산이 전혀 없다”는 현재 코드와 다르다. 폭 확장(M2)·폭 축소 분기(M3)·폰트 축소(M6)에서 문자폭 계수와 줄바꿈 규칙으로 줄 수를 추정한다.

LLM 추론이 아니라 코드에 고정된 근사 계산이다. 확인일 2026-09-01.

최종 판정은 실측

후보의 크기·위치를 바꾼 뒤 실제 글자 영역으로 다시 확인한다. 정확한 설명은 “기하 규칙과 일부 줄바꿈 예측으로 후보 생성 → 실측 재검증·보정”이다.

반복 종료가 무결함을 보장하지 않는다 — 미해결도 그대로 판정한다.

후보의 글자 영역을 엔진으로 실측외곽선은 사전 추출값을 변환해 재사용넘침·겹침이남아 있는가?예보정 가능한가?공통 루프 최대 10회 · 이동 여유 · 가독성 하한예최소 이동 → 도형 확장 → 필요시 축소문서 단위 글자 재측정 / 필요시 5% 단위 축소재측정아니오아니오최종 sheetJson 반환 → 독립 채점SUCCESS / ACCEPTABLE / FAIL · 미해결도 그대로 판정
실측 → 판단 → 보정을 반복하고, 보정할 수 없으면 미해결 상태 그대로 채점으로 넘긴다. 반복 종료가 무결함을 뜻하지 않는다.

무엇을 렌더링으로 재검증하는가

대상자료를 얻는 방식재배치 중 하는 일
컨테이너·배경 도형 외곽선리소스 SVG·이미지를 사전 래스터화하고 윤곽을 추출해 저장저장된 외곽선을 현재 위치·크기·회전 등에 맞게 변환해 재사용. 반복 루프에서 원본을 다시 렌더해 추출하지 않음
텍스트 tight bounding box실제 폰트와 엔진의 DOM 기반 글자 측정기로 계산후보 적용·내부 충돌 보정·이동·폰트 축소 후 다시 실측. 반복 검증 포트가 반환하는 값은 이 글자 영역
넘침·겹침·정렬·여백 및 최종 등급sheetJson + 위 기하 자료로 코드가 계산별도 종류의 렌더링 측정이 아니라, 같은 좌표와 실측값을 재사용한 검사

CLI 의 “렌더 횟수”는 문서 단위 글자 측정 호출 수다 — 페이지 썸네일을 만든 횟수가 아니다. 반복 보정에는 실측 tight 에 글머리 기호를 더한 visual 영역을 쓴다.

§6

측정 — 사각형 프레임이 아니라 실제로 보이는 영역을 잰다

도형의 바깥 사각형 안에 들어왔다고 실제 도형 안에 들어온 것은 아닙니다. 원·캡슐·말풍선의 모서리와 구멍까지 고려합니다. 텍스트도 저장된 박스 대신 엔진이 잰 글자 영역(tight)에 글머리 기호 몫을 더한 visual 영역으로 판정합니다.

기준은 항상 대치 이전 Original입니다. Before는 재배치 입력, After는 알고리즘 결과, Expected는 비교 목표입니다. Expected와 After의 이미지 유사도를 점수로 쓰지 않습니다. 원안과 대치 문서의 좌표·배율을 맞춰 같은 자로 비교합니다.

일곱 가지 관찰 항목과 판정에서의 역할

# 항목 무엇을 측정하나 판정에서의 역할
1 넘침 글자 영역이 자기 컨테이너/페이지를 벗어난 노드 수·면적 FAIL 게이트 · 원안보다 악화했는가 (면적은 110%까지 봐준다)
2 최소 폰트 배율 원안 대비 가장 많이 줄어든 텍스트의 비율; 평균이 아님 FAIL 게이트 0.70 · SUCCESS 조건 0.90
3 정렬선 보존율 원안에서 나란했던 노드 쌍이 같은 선 관계를 유지한 비율 SUCCESS 조건 · 0.80 이상인가 (미달이면 FAIL 이 아니라 ACCEPTABLE)
4 유휴 여백 콘텐츠가 덮지 않은 페이지 비율; 전면 배경은 제외 SUCCESS 조건 · 원안 이하인가
5 신규 겹침 원안에 없었거나 원안보다 커진 겹침 쌍 FAIL 게이트 · 의도된 원안 겹침과 구분
6 좁은 칼럼 2줄 이상인데 줄당 글자 수가 3자 미만인 텍스트 참고 지표 · 가독성 검토 대상
7 페이지 잘림 페이지 밖으로 나가 실제 화면에서 잘리는 요소 참고 지표 · 절대량; 최종 등급에는 아직 미반영

측정의 의미: 겹침 총량과 “새로 늘어난 겹침”은 다릅니다. 디자인에 원래 있던 겹침은 보존하되 대치·재배치가 악화시킨 부분을 검출합니다. 저장 결과는 문서 해시와 연결된 실측 파일로 검증하므로, 다른 문서의 오래된 측정값을 성공 근거로 쓰지 않습니다.

§7

판정 — FAIL 게이트 넷을 먼저 거르고, 통과 결과를 SUCCESS 조건 셋으로 나눈다

순서가 중요하다 — FAIL 게이트를 먼저 거른다 ① FAIL 게이트 넷 — 하나라도 걸리면 · 넘침이 원안보다 나쁘다 — 노드 수가 늘거나 면적이 원안의 110% 초과 · 신규 겹침 쌍이 하나라도 있다 · 최소 폰트 배율 < 0.70 (가독성 기준 · 뷰어에서 조절 가능) · 정렬선 보존율 < 0.60 (판이 무너진 결과의 바닥) FAIL 아니면 ② SUCCESS 조건 셋 — 모두 채워야 · 최소 폰트 배율 ≥ 0.90 최대 10% 축소까지 · 정렬선 보존율 ≥ 0.80 ← 이번에 추가된 조건 · 유휴 여백 비율 ≤ 원안 SUCCESS ACCEPTABLE 셋 다 충족 하나라도 미달 최소 폰트 배율 축 · 원안 20px 이라면 FAIL ACCEPTABLE SUCCESS 0.70 · 14px0.90 · 18px1.00 · 20px 정렬선 보존율 축 · FAIL 바닥 0.60 + SUCCESS 눈금 0.80 FAIL — 정렬선 붕괴 ACCEPTABLE SUCCESS 가능 0.600.801.00 0.90·0.80·0.70 은 운영 기준이다 — 지각 역치나 접근성 보장이 아니다. 비교에는 표시 반올림 폭 0.0005 를 물린다.
등급은 감상평이 아니라 코드가 계산한 결과다. 정렬선 0.60 미만은 FAIL, 0.60 이상 0.80 미만은 ACCEPTABLE, 0.80 이상이어야 SUCCESS가 가능하다.

이 도해의 정본은 코드다 — relayout-core/verdict.ts 의 judgeMetrics 와 상수 EXCESSIVE_FONT_SCALE=0.7 · SUCCESS_FONT_SCALE=0.9 · EXCESSIVE_GUIDE_KEPT=0.6 · SUCCESS_GUIDE_KEPT=0.8 · OVERFLOW_AREA_TOL=0.1 · VERDICT_EPS=5e-4 를 그대로 옮겼다. 이 페이지의 최신 수치는 워크스페이스 HEAD 3095b6596 · 채점 2026-09-01 11:38:59 KST 기준이다.

라벨은 다섯 개다 — UNSOLVABLE 과 UNKNOWN 은 다르다

위 도해가 가르는 것은 SUCCESS·ACCEPTABLE·FAIL 셋이다. 나머지 둘은 잰 값으로 가른 결과가 아니다. UNSOLVABLE 은 알아본 결과 규칙 안에서 답이 없는 것이고, UNKNOWN 은 아직 못 잰 것(지표가 없거나 견줄 원안이 없다)이다. 「더 볼 것이 없다」와 「아직 안 봤다」를 한 칸에 섞지 않으려고 나눠 둔다.

평가 제외와 실패를 섞지 않는다

수집

100

전체 케이스

평가 가능

89

성적의 분모

평가 제외

11

분모에서 빠짐

UNKNOWN

0

측정 누락 없음

측정 파일 누락·손상이나 기준 부재는 제외로 숨기지 않고 UNKNOWN 으로 남겨 분모에 포함한다 — 현재 0건이다. 전체 수집 기준으로는 게이트 통과 84/100, 평가 제외 11/100, 잔여 FAIL 5/100으로 함께 읽어야 한다.

UNSOLVABLE 11건은 왜 빠졌나 — 세 갈래로 나눈다

제외는 알고리즘이 실패한 것이 아니다. 11건 모두 성적 분모 89에서 빠지지만, 빠진 이유는 서로 다르고 고쳐야 할 곳도 다르다 — 앞단(대치)에서 막을 것, 범위를 넓혀 풀 것, 측정 도구를 고칠 것.

갈래건수기계 라벨대표 케이스어디를 고쳐야 하나
대치 오류7REPLACEMENT_ERROR 5694141앞단 — 컴포넌트 선택·슬롯 매핑·용량 검사
분절형 컨테이너3SEGMENTED_CONTAINER 6858981컨테이너가 한 조각이 아니다 — 합성·중첩 도형 지원
폰트 없음1FONT_UNAVAILABLE 6885277서체 배포 — 폰트 키가 측정 환경에 없다

대치 오류 5694141

REPLACEMENT_ERROR

본문이 95.7px 숫자 표식 슬롯에 대치돼 13줄이 됐다. 페이지에 본문용 슬롯이 따로 있는데 긴 설명이 번호 자리에 들어갔다 — 위치·크기로는 못 푼다.

5694141 Before · 재배치 입력
Before · 재배치 입력

분절형 컨테이너 6858981

SEGMENTED_CONTAINER

리소스 polygon 이 3조각이라 외곽선 추출이 unsupported-topology 로 떨어진다. 컨테이너가 한 조각이 아니라 막힌 것이고 — 배치가 불가능해서가 아니다.

6858981 Before · 재배치 입력
Before · 재배치 입력
6858981 After · 재배치 결과
After · 재배치 결과

라벨을 사유대로 다시 갈랐다 — OUT_OF_CURRENT_SCOPE 는 비었다

「현재 범위가 좁아서」로 묶여 있던 것들이 실은 다 다른 사유였다. 6672017·6370048 은 컨테이너가 분절형이라 막힌 것이고(외곽선으로 빠져 있던 6858981 도 같은 뿌리다), 6553655 는 범위를 넓혀도 문장을 놓을 자리가 없어 대치 오류다. 5546858·5698327 은 알고리즘이 이미 담아내고 있어 평가 대상으로 올렸다 — 분모가 88 에서 89 가 된 이유다. 합계는 7 + 3 + 1 = 11 이다.

제외 11건 전체 — 5108314 · 5694141 · 6138289 · 6370048 · 6553655 · 6577997 · 6672017 · 6780937 · 6805703 · 6858981 · 6885277

§8

남은 FAIL 5건 — 겹침 둘과 정렬선 붕괴 셋

method 9가 5699884의 정렬 그룹을 다시 세우며 신규 겹침 2쌍을 없애 SUCCESS로 바꿨다. 최신 FAIL은 서로 다른 두 갈래다. 겹침 2건은 기존 겹침을 밀어 키운 증가분이 게이트에 걸렸고, 정렬선 붕괴 3건은 새 바닥 0.60이 이전 ACCEPTABLE을 FAIL로 드러낸 것이다.

케이스별 다음 점검 지점

순서 문제 유형 케이스 ID 걸린 값 다음 점검
1 기존 겹침 증가 6690122 1쌍 · 3,633px² 확장 뒤 관련 쌍의 증가분을 최종 채택 조건으로 되돌려 검사
2 기존 겹침 증가 6248263 1쌍 · 399px² 부모–자식 도형의 실제 침범과 측정 경계를 분리해 판정
3 정렬선 붕괴 5628689 0.415 < 0.600 상위 넘침·겹침을 다시 만들지 않는 복구 후보가 없음
4 정렬선 붕괴 5546858 0.424 < 0.600 새로 평가 대상에 들어온 사례의 정렬 그룹·축 제약 점검
5 정렬선 붕괴 6869327 0.522 < 0.600 stretchableDirection이 막은 축에서 대체 정렬 후보 탐색
§9

현재 방법의 한계 — 정확히 재는 비용과 풀 수 있는 범위

1

렌더링 재검증이 반복된다

method 9는 정렬선 복구안을 예측 → 전체 묶음 → 정렬선별 순서로 다시 검증한다. 케이스당 측정 포트 호출 상한은 6회다.

개선 방향 같은 문서의 중복 측정과 안 바뀐 텍스트의 재측정을 줄인다. 검증을 빼서 속도를 얻지는 않는다.

호출 수 보기 ↓

2

장식이 따라오지 못한다

번호·선·아이콘이 본체와 같은 의미 단위로 묶이지 않아 본체만 이동하고 장식이 남는다.

개선 방향 텍스트·컨테이너·장식의 소속을 먼저 정하고 상대 위치를 유지해 함께 옮긴다.

사례 두 건 보기 ↓

3

잘못된 대치는 복구 불가

누락된 문구·잘못된 슬롯 매핑은 위치·크기를 바꿔 풀 문제가 아니다. 같은 제약이면 LLM 도 못 푼다.

개선 방향 대치 전 용량·구조 검사, 대치 후 누락 검사, 부적합한 컴포넌트 재선택.

사례 보기 ↓

4

좌표 정렬은 복구했지만 의미 구조는 모른다

method 9가 같은 L/R/T/B 정렬선을 공유하는 요소를 함께 움직인다. 다만 “이 셋이 한 행”이라는 행·열·셀의 의미 소속은 아직 제약에 없다.

개선 방향 좌표 그룹을 넘어 의미 그리드와 장식 소속을 인식하고, 간격까지 함께 보존한다.

표·사례 보기 ↓

5

아직 알고리즘이 커버하지 못하는 디테일

정해진 순서의 후보와 제한된 반복으로 푼다. 그래서 사람이 직접 잡은 것보다 품질이 떨어지는 경우가 있다 — FAIL 은 현재 알고리즘이 못 풀었다는 뜻이지 해가 없다는 뜻이 아니다.

개선 방향 후보를 넓히되, 반복이 끝나도 충돌이 남으면 원안 복귀나 사용자 선택으로 넘긴다.

남은 FAIL 보기 ↓

2는 사용자가 확인한 현재 동작 한계이며 이번 100건에서 발생률을 따로 집계하지 않았다. 4는 method 9가 좌표 정렬선 수준에서 크게 개선했지만 의미 그리드까지 해결한 것은 아니다. 아래는 항목별 실제 사례다.

1 · 렌더링 재검증 — 사례 대신 호출 수로

method 9 측정 상한

6회

케이스당 렌더 프로브

최신 평균·p95

미측정

이전 판과 직접 비교 불가

단계별 비중

미측정

캐시 적중률도 아직

이 항목만은 그림으로 보이지 않는다 — 결과가 아니라 비용의 문제다. 이전 판의 평균 2.69회·p95 0.60초는 method 9 전 실행 기록이다. 최신 평균과 지연시간은 다시 재야 한다. 자세한 내역과 hand-off 계획은 §11에 있다.

2 · 장식이 따라오지 못한다 — 두 가지 형태

한 장씩 크게 보기

아래 그림이 한 줄에 한 장씩 커집니다.

Before · 재배치 전FAIL · 재배치 입력
After · 재배치 후SUCCESS · 재배치 결과
2 · 컨테이너에 붙은 장식 · 5628689 — 카드는 왼쪽으로 115.3px 움직이고 높이가 37.6px 늘었는데, 확성기·알람시계 비트맵은 오른쪽으로 115.3px 갔다. 반대 방향으로 갈려 약 230px 벌어졌다.
한 장씩 크게 보기

아래 그림이 한 줄에 한 장씩 커집니다.

Before · 재배치 전FAIL · 재배치 입력
After · 재배치 후SUCCESS · 재배치 결과
2 · 텍스트에 붙은 장식 · 5636021 — 본문이 3줄에서 1줄이 되며 폭 +259.7px로 넓어졌지만, 화살표와 점 장식은 1px도 움직이지 않았다. 글자만 자리를 옮겨 장식이 허공에 남는다.

3 · 잘못된 대치는 복구 불가

한 장씩 크게 보기

아래 그림이 한 줄에 한 장씩 커집니다. 다시 눌러 나란히 볼 수 있습니다.

Original · 내용 대치 전내용 대치 오류로 평가 제외
Before · 재배치 전내용 대치 오류로 평가 제외
3 · 대치 오류 · 5694141 — 작은 번호 슬롯에 긴 본문이 들어갔다. 재배치 이전에 슬롯 매핑부터 틀렸다.

4 · 좌표 정렬선 복구 — method 9가 바꾼 결과

사례정렬선 보존율자동 판정무엇이 어긋났나
64926340.939SUCCESSmethod 9 전 0.515에서 회복 · 넘침 0 · 신규 겹침 0 유지
56360211.000SUCCESS원안 정렬선을 모두 보존
65679920.846SUCCESSmethod 9 전 0.769에서 SUCCESS 하한 위로 회복

method 9는 같은 L/R/T/B 정렬선을 공유하는 요소를 함께 옮긴 뒤 실제 렌더로 다시 확인한다. 그 결과 같은 89건에서 평균 정렬선 보존율이 0.799 → 0.943, SUCCESS가 33 → 65로 올랐다. 다만 하한을 넘겨도 온전한 것은 아니다 — SUCCESS 65건 중 22건은 여전히 정렬선 1 미만이다.

한 장씩 크게 보기

아래 그림이 한 줄에 한 장씩 커집니다. 다시 눌러 나란히 볼 수 있습니다.

Before · 재배치 전FAIL · 넘침 1 · 신규 겹침 3 · 정렬선 0.970
method 9 전 AfterACCEPTABLE · 넘침 0 · 신규 겹침 0 · 정렬선 0.515
4 · 그리드 · 6492634 — 이 이미지는 method 9 전 진단 장면이다. 당시에는 겹침을 3쌍→0쌍으로 풀면서 정렬선이 0.970 → 0.515로 무너졌다. 최신 결과는 0.939 · SUCCESS로 회복했다.

5 · 아직 알고리즘이 커버하지 못하는 디테일

잔여 FAIL은 다섯 건이다. 6690122·6248263은 각각 3,633px²·399px²의 신규 겹침이 남고, 5546858·5628689·6869327은 넘침과 신규 겹침은 0이지만 정렬선 보존율이 0.60 FAIL 바닥 아래다. 즉 남은 문제는 충돌 2건 + 정렬선 붕괴 3건으로 갈렸다 — 원인 분석은 §8에 있다.

FAIL 로 드러나는 것만 문제가 아니다. 사람이 직접 잡았다면 더 나았을 자리가 통과한 결과 안에도 있다 — ACCEPTABLE 19건과 좁은 칼럼 9개, 장식이 따라오지 못한 배치가 그렇다. 자동 판정을 통과했다는 것과 디자이너가 만든 품질에 닿았다는 것은 다른 말이다.

§10

자동 판정의 한계 — 판정 통과가 곧 완성은 아니다

하한을 넘겨도 완전하진 않다

22/65

SUCCESS 65건 중 정렬선 보존율이 1 미만인 것. 0.80 하한만 넘겼을 뿐이다.

좁은 칼럼도 9개 남는다.

지표가 곧 품질은 아니다

참고선

동일 pane의 Sol 기준선도 엄격 채점에서 FAIL 6건이 나온다. 비교 결과를 그대로 목표선으로 쓸 수 없다.

비교 가능 87건 중 게이트 통과 81건(93.1%) · 기준선 미생성 UNKNOWN 2건.

일반화

개발용

문제 케이스를 모은 집합이다. 무작위 사용자 표본도, 독립 검증 집합도 아니다.

실행 시간도 개발 환경 값이라 실서비스 지연시간이 아니다.

등급에 안 잡히는 것이 남아 있다

정렬선은 이제 SUCCESS 게이트에 들어갔지만 잘림·좁은 칼럼은 여전히 최종 등급에 직접 반영되지 않는다. 텍스트 잘림은 0이어도 도형 하나의 페이지 밖 잘림은 Before·After·Expected 모두에 남아 있다 — 운영 적용 전에 별도 안전 기준이 필요하다.

4부

운영 전환 — 붙이기 전에 맞출 것

엔진 hand-off
§11

렌더링 비용과 엔진 hand-off — 속도 문제를 먼저 공유한다

이 방식은 렌더링을 쓴다

후보를 만든 뒤 실제 글자 영역을 엔진으로 다시 재서 판정한다. 정확도의 근거가 그 실측이지만, 같은 이유로 엔진 호출이 실행 경로 안에 들어온다.

1 · 지금 무엇이 비용인가

측정된 것값범위
method 9 전 글자 측정 포트총 269회 · 평균 2.69회2026-08-30 저장 100건 · 역사 기록
method 9 전 After 생성평균 0.16초중앙값 0.09초 · 95백분위 0.60초 · 역사 기록
method 9 렌더 프로브최대 6회예측 확인 → 전체 묶음 → 정렬선별 검증
method 9 최신 평균·p50·p95미측정최신 성능 채점 산출물에는 시간 자료 없음

269회·2.69회·0.16초는 method 9 이전 판의 저장 기록이며 외곽선 사전 추출·입력 준비·최종 채점은 포함되지 않는다. 최신 경로는 정렬선 검증이 추가되어 호출 상한이 6회로 늘었다. 평균 지연시간과 캐시 적중률을 다시 재기 전에는 속도 개선이나 저하 폭을 단정하지 않는다.

2 · runtime 에 어떻게 넣는가

현재 iui 는 엔진 패키지와 에디터 페이지 뷰를 가져와 별도 렌더 호스트에서 실행한다. CLI 는 헤드리스 브라우저, 뷰어는 iframe 에서 같은 글자 측정기를 쓴다. 제품에는 기존 엔진을 측정 포트로 연결하는 방향이 가능하지만 iui 결과와 동일하다는 검증이 필요하다.

hand-off 경계 — 무엇을 우리가 들고, 무엇을 엔진에 맡기나 iui · 배치 코어 엔진 호출 없음 — 순수 계산 · 후보 생성 (규칙·기하) · 겹침·넘침·여백 지표 계산 · SUCCESS / ACCEPTABLE / FAIL 판정 · 후보 채택·되돌림 결정 입력만 있으면 브라우저 없이 돈다 측정 포트 경계 엔진 · miricanvas-web-2 / editor-2 브라우저 필요 · 글자 tight box 실측 · 폰트 · DOM 관리 · 페이지 렌더 (뷰어 iframe) · CLI 는 헤드리스 브라우저로 같은 측정기 여기가 비용이 드는 자리다 sheetJson · 측정 대상 노드 tight box · 실제 글자 영역 method 9 전 평균 2.69회 · 현재 상한 6회 사전 준비 · 외곽선 캐시 (bakeOutlines) 리소스 SVG·이미지를 미리 래스터화해 윤곽을 저장한다. 실행 중에는 위치·크기·회전에 맞춰 변환만 하고 다시 렌더하지 않는다.
배치 코어는 엔진과 분리해 두고, 경계에서 결과 일치만 확인하는 것이 현재 설계다. 경계를 넘는 것은 두 가지뿐 — 나가는 sheetJson과 돌아오는 tight box다.

3 · 사전에 indexing 할 것

자료지금 방식사전 계산 가능한가
컨테이너·배경 도형 외곽선리소스 SVG·이미지를 미리 래스터화해 윤곽을 저장. 실행 중에는 위치·크기·회전에 맞춰 변환만 한다이미 사전 처리
텍스트 tight bounding box실제 폰트와 엔진의 DOM 기반 측정기로 계산. 폭·폰트·내용이 바뀔 때마다 다시 잰다불가 — 실행 중 실측
넘침·겹침·정렬·여백 지표sheetJson + 위 두 자료로 코드가 계산별도 렌더 없음

줄일 수 있는 쪽은 반복이다. 같은 문서·같은 입력의 결과를 단계 사이에 재사용하고, 폭·폰트·내용·회전이 바뀐 텍스트만 다시 잰다. 검증을 빼서 속도를 얻지는 않는다.

4 · 엔진 부하와 hand-off 범위

# 단계 LLM 엔진 필요한 것
1 순수 후보 생성·지표 수식 없음 실행 중 직접 호출 없음 sheetJson 구조 + 이미 제공된 tight / outline 데이터
2 실제 글자 영역 측정 없음 필요 TextBoundingBoxCalculator · 엔진 폰트/DOM 관리자 · 브라우저
3 결과 시각화·뷰어 없음 필요 miricanvas-editor-2의 PageRootView + 엔진 패키지
4 도형 외곽선 사전 추출 없음 별도 추출 경로 디자인 리소스 API/CDN + SVG/이미지 윤곽 추출기 + 캐시
5 비교용 After·Expected 작성 사용 최종 공통 측정에 필요 모델 + 규칙 문서 + 출력 적용기 + 실제 렌더 검증

엔진 없이 가능한 범위 — 저장된 실측값으로 채점하거나 예측 기반 후보를 만들 수 있다. 다만 폭·폰트가 바뀐 After 가 실제로 어떻게 렌더되는지는 기존 값만으로 보장할 수 없다.

붙이기 전에 합의할 것 — 문서에 답이 없는 항목

호출 방식

  • 시점 — 편집 중 / 저장 직후 / 명시적 실행
  • 형태 — 동기 대기 vs 큐
  • 대기 표시 — 최신 p95 재측정 후 어떻게 보여줄지
  • 실패·타임아웃 — 되돌림 기준

엔진 계약

  • 부하 예산 — 최대 6회·최신 평균 재측정 × 동시 요청 몇 건
  • 결과 일치 — web-2 엔진과 iui 결과 회귀 세트
  • 캐시 — 외곽선 커버리지·무효화, 서체 파일 배포
  • 계약 고정 — sheetJson·좌표계·엔진 버전·줄바꿈 처리
§12

다음 개선 — 남은 FAIL과 간격·패딩으로 좁힌다

1

잔여 FAIL 5건을 두 갈래로 푼다

신규 겹침 2건(6690122·6248263)과 정렬선 0.60 미만 3건을 각각 별도 후보·복구 정책으로 다룬다.

완료 기준 같은 89건에서 SUCCESS·게이트 통과 회귀 없이 FAIL 감소

2

정렬선을 지키는 재배치 · 완료

method 9 keepGuides가 같은 정렬선의 요소를 함께 움직이고 실제 렌더로 재검증한다. 같은 89건에서 정렬선 평균 0.799 → 0.943, SUCCESS 33 → 65로 올랐다.

검증 결과 넘침 0 · 신규 겹침 2 · FAIL 5 · 이전 method 9 입력 대비 지표 악화 0건

3

요소 사이 간격을 제약으로 넣는다

지금은 「겹쳤나 / 안 겹쳤나」와 페이지 전체 유휴 여백 비율만 본다. 요소와 요소 사이가 얼마나 떠야 하는지(margin), 컨테이너 안쪽에 글자 둘레로 얼마가 남아야 하는지(padding)는 제약에 없다 — relayout-core 에 그런 상수가 없다.

할 일 원안의 간격을 재서 목표 간격으로 삼고, 겹침 0 이어도 너무 붙거나 너무 벌어진 결과를 후보 검사에서 되돌린다. 채점에도 간격 지표를 더한다.

4

의미 그리드와 장식 소속

좌표 정렬선 그룹을 넘어 텍스트·배경·장식의 소속과 행·열·셀 구조를 인식해 함께 옮긴다.

완료 기준 제품 엔진과 결과 일치까지 검증

5

ACCEPTABLE·SUCCESS 의 시각 품질

ACCEPTABLE 19건의 중복 사유는 유휴 여백 13건 · 정렬선 6건 · 폰트 축소 2건이다. 좁은 칼럼 9개와 함께 사람 판정에 대조한다.

완료 기준 임계값을 낮추는 대신 실제 렌더의 전후 선호 확인

6

평가 제외 사유 연관 feature 개발

Sol 기준 평가 제외는 해결 불가 9건 · 분절형 컨테이너 1건 · 폰트 없음 1건이다. 슬롯·합성 도형·서체 경로에서 각각 복귀시킨다.

완료 기준 제외 11건을 평가로 복귀

7

반복 렌더링 비용

method 9의 최대 6회 렌더 프로브를 단계별로 계측하고, 같은 입력과 바뀌지 않은 텍스트의 결과를 재사용한다.

완료 기준 회귀 없이 측정 호출 수와 p50/p95 감소

이번 자료의 제안

정렬선을 지키는 단계는 method 9로 넘어섰고, 이제 간격과 의미 구조를 지킬 차례다. 게이트 통과율 94.4%와 SUCCESS 73.0%는 정렬선 복구가 실제 등급 상승으로 이어졌음을 보여준다. 다음 축은 요소 사이 간격·패딩과 행·열·장식의 의미 소속이다. 아직 모든 입력에 자동 적용해도 된다는 출시 판정은 아니다.

·

출처

경로는 모두 miricanvas-iui 기준 · 수치는 커밋 3095b6596의 최신 저장 재채점본(2026-09-01 11:38:59 KST). 재배치 전후 pane 비교는 scripts/relayout-rescore-panes.ts.

최신 측정값
eval-out/runs/methods/adaptive-relayout/evaluation.json · eval-out/runs/rescore-20260901e/panes.json
정렬선 알고리즘
relayout-methods/keepGuides.ts · adaptiveRelayout.ts · relayout-core/betterOf.ts · relayout-core/verdict.ts
규칙·구조 문서
src/post-replace-relayout/README.md · docs/relayout_logics.md · docs/architecture.md · docs/evaluation-rules.md
이전 판 역사 기록
evidence.json · outcome-metrics.json · five-way-comparison.json · timing-detail.json · runtime-review-2026-08-31.md