POC 계측 — 갈래 1·2 비교

인쇄 버튼을 누른 뒤 대화상자가 뜨기까지를 세 구간으로 쪼개 재고, 표본별 페이지당 행 수를 남긴다. 조판 경로는 손대지 않는다 — DOM 실측이 느린 것 자체가 비교 대상이다. 갈래를 바꿔도 본문과 표본, 건수는 그대로고 폼이 던지는 주소만 바뀐다.

POC 는 세 갈래 모두 인증을 걸지 않는다. 감사 로그와 오픈 렌더러는 측정 대상이 아니라 설계 판단으로 남으므로, 갈래를 가르는 축은 조판을 어디서 하나와 데이터를 누가 넣나 둘뿐이다.

요청 본문 51KB (urlencoded, 실제 전송 형태) · 26KB (JSON 기준). urlencoded 가 두 배 가까이 크다 — 한도 측정은 /poc/limits 에서 따로 잰다.

측정 프로토콜

이 기기에서 잰 값

측정 결과가 없다. 위에서 표본과 건수를 골라 실행하면 뷰어 탭이 여기로 기록을 보낸다.

공통 기반 서버 조판 확인

갈래가 아니다. 갈래 2·3 이 올라설 서버 조판 모듈과 문서 껍데기가 브라우저에서 끝까지 동작하는지 보는 자리다(HDIT-3099). 조판 데이터를 밖에서 받지 않고 표본 생성기로 직접 만든다. 분할 결과만 보기 는 문서 대신 총 페이지 수와 페이지별 행 수를 돌려준다 — 위 기준선과 대조할 때 쓴다.

저장소에 커밋된 기준선 — 갈래 1

갈래 2·3 이 비교할 대상이다. 새로 재지 않아도 읽을 수 있게 모듈로 둔다.

페이지당 행 수 정본 — rowsPerPage.measured.ts

표본방향첫 페이지본문 페이지서버 조판 가능
인사기본정보조회세로192019–20 흔들림
세대차량 현황가로212118–21 흔들림
민원일반가로1111고정 — 수치 하나로 맞는다
접수리스트가로1414고정 — 수치 하나로 맞는다
일별접수/처리현황세로3838고정 — 수치 하나로 맞는다

흔들리는 이유는 행 높이가 불규칙해서가 아니라 페이지마다 실리는 요소가 달라서다. 인사 표본은 결재선이 첫 장에만 붙고, 그룹이 끝나는 페이지에는 소계 행이 하나 더 들어가며, 행마다 주소 서브행이 붙어 데이터 한 행이 두 줄이라 한 줄짜리 소계가 남는 공간에 들어가기도 하고 안 들어가기도 한다. 그래서 설계 문서의 floor((용지높이 − 여백 − 머리글 − 바닥글) / 행높이) 로도,소계 행을 한 행으로 세고 라는 보완으로도 이 둘은 맞지 않는다.

다만 흔들림 자체가 서버 조판을 막지는 않는다(HDIT-3073 에서 확인). 세대차량은 18–21 로 흔들리면서도 서버 조판과 25칸 전부 일치한다. 페이지마다 실리는 요소가 달라 생기는 흔들림은 서버도 페이지마다 다시 계산하므로 따라간다. 따라가지 못하는 것은 인사 표본처럼 같은 소계 페이지가 20행을 담기도 하고 19행을 담기도 하는 경우이고, 그때는 행 높이가 행마다 다르다는 뜻이라 상수 모델로는 재현되지 않는다.

구간 기준선 — baseline.measured.ts

표본건수페이지A DOM└ 조판└ DOM 생성B 레이아웃버튼→준비본문
인사기본정보조회100634ms10ms2ms3ms38ms0.05MB
인사기본정보조회5002680ms33ms22ms0ms81ms0.25MB
인사기본정보조회1,00051115ms44ms42ms0ms116ms0.49MB
인사기본정보조회2,000101196ms77ms81ms0ms200ms0.99MB
인사기본정보조회4,000201338ms141ms145ms0ms346ms1.98MB
세대차량 현황100637ms9ms2ms3ms40ms0.04MB
세대차량 현황5002569ms26ms20ms0ms70ms0.19MB
세대차량 현황1,00048103ms38ms40ms0ms105ms0.38MB
세대차량 현황2,00096164ms65ms68ms0ms167ms0.75MB
세대차량 현황4,000191303ms116ms144ms0ms308ms1.51MB
민원일반1001034ms8ms2ms4ms39ms0.08MB
민원일반5004689ms29ms31ms0ms90ms0.38MB
민원일반1,00091143ms56ms57ms0ms145ms0.76MB
민원일반2,000182254ms98ms111ms0ms259ms1.52MB
민원일반4,000364483ms188ms229ms0ms493ms3.03MB
접수리스트100833ms8ms2ms3ms38ms0.06MB
접수리스트5003674ms23ms26ms0ms74ms0.29MB
접수리스트1,00072122ms45ms49ms0ms125ms0.58MB
접수리스트2,000143226ms86ms105ms0ms230ms1.17MB
접수리스트4,000286421ms161ms202ms0ms429ms2.34MB
일별접수/처리현황100328ms6ms1ms2ms31ms0.02MB
일별접수/처리현황5001447ms13ms13ms0ms48ms0.11MB
일별접수/처리현황1,0002769ms20ms26ms0ms69ms0.22MB
일별접수/처리현황2,00053110ms36ms46ms0ms111ms0.44MB
일별접수/처리현황4,000106190ms68ms88ms0ms194ms0.88MB

고사양 맥(15코어 32GB), localhost, 헤드리스 Chrome 152 에서 3회 측정한 중앙값이다. 저사양 수치가 아니고 구간 C 가 빠져 있다 — 헤드리스에는 인쇄 대화상자가 없다. 판정에 쓰려면 하한선 기기에서 위 실행부로 다시 재야 한다.

저장소에 커밋된 실측 — 갈래 2

응답 크기와 서버 조판 시간, 한 방으로 처리 가능한 최대 건수다(HDIT-3073). 서버 쪽 값이라 기기를 붙여 다시 재지 않아도 읽을 수 있다. 페이지 분할이 갈래 1 과 맞는지는 /poc/split 에서 따로 대조한다.

건수 램프 — server-once.measured.ts

표본건수페이지응답서버 조판갈래 1 브라우저 조판
인사기본정보조회100건60.09MiB2ms10ms
인사기본정보조회500건260.40MiB6ms33ms
인사기본정보조회1,000건510.79MiB9ms44ms
인사기본정보조회2,000건1011.57MiB27ms77ms
인사기본정보조회4,000건2013.13MiB52ms141ms
세대차량 현황100건60.09MiB2ms9ms
세대차량 현황500건250.40MiB5ms26ms
세대차량 현황1,000건480.78MiB10ms38ms
세대차량 현황2,000건961.56MiB26ms65ms
세대차량 현황4,000건1913.10MiB64ms116ms
민원일반100건100.12MiB1ms8ms
민원일반500건460.57MiB7ms29ms
민원일반1,000건911.14MiB12ms56ms
민원일반2,000건1822.27MiB32ms98ms
민원일반4,000건3644.54MiB85ms188ms
접수리스트100건80.10MiB1ms8ms
접수리스트500건360.49MiB5ms23ms
접수리스트1,000건720.98MiB10ms45ms
접수리스트2,000건1431.95MiB43ms86ms
접수리스트4,000건2863.90MiB69ms161ms
일별접수/처리현황100건30.05MiB0ms6ms
일별접수/처리현황500건140.25MiB2ms13ms
일별접수/처리현황1,000건270.50MiB6ms20ms
일별접수/처리현황2,000건530.99MiB10ms36ms
일별접수/처리현황4,000건1061.98MiB32ms68ms

마지막 칸은 갈래 1 이 같은 표본·건수에서 DOM 실측 분할에 쓴 시간이다 (paginateMs). 서버로 옮겨 없어지는 비용이 그 값이고, 그 자리에 들어오는 비용이 왼쪽의 서버 조판 시간이다. 둘 다 고사양 기기 수치이므로 저사양 판정에는 쓰지 않는다.

저사양 대리 측정 — CPU 4배 스로틀

갈래버튼 → 레이아웃 완료A DOM└ 조판└ 커밋서버 조판
갈래 1. 브라우저 조판18,086ms18,027ms15,169ms2,386ms—
갈래 2. 서버 조판 한 방1,509ms758ms0ms475ms95ms

민원일반 4,000건, 두 갈래를 번갈아 3회씩 돌린 중앙값이다. 하한선 기기가 없어 CPU 스로틀로 대신했고, 실제로 4.07배 느려진 것을 확인한 뒤 쟀다. 갈래 1 의 18 초 가운데 15.2 초가 DOM 실측 분할이다 — 서버로 옮기면 그 구간이 통째로 사라진다. 다만 스로틀 배수와 느려진 배수가 맞지 않으므로(강제 레이아웃이 섞여 있다) 이 비율을 실제 저사양 기기의 예측치로 쓰지 않는다.

한 방 상한 — 응답 5.72MiB 기준

표본행당 바이트응답 상한요청 상한(폼 전송)먼저 막는 쪽
인사기본정보조회819.23B7,222건 (362쪽)9,108건응답
세대차량 현황811.24B7,332건 (350쪽)11,914건응답
민원일반1,189.24B5,009건 (456쪽)5,930건응답
접수리스트1,021.17B5,828건 (417쪽)7,688건응답
일별접수/처리현황517.15B11,450건 (302쪽)20,533건응답

다섯 표본 모두 응답이 먼저 막는다. 갈래 1 은 브라우저가 조판해 응답이 작으므로 반대로 요청이 먼저 막힌다 — amplifyLimits.measured.ts 의 값이 그것이다. 설계 문서의 비기능 요구인 4,000건은 다섯 표본 모두 한 응답에 들어간다. 응답 상한은 배포본 실측값이다(HDIT-2996). 막힐 때는 504 가 아니라 한 건 초과면 500, 크게 초과면 413 이 오므로 상태 코드만으로 요청 벽과 응답 벽을 가를 수 없다.