마지막이라더니 — 탭·선명도, 그리고 Acrobat을 닮은 자가복구 렌더링 (ICEPDF v1.2.0)
v1.1.0을 '마지막'이라 했지만 쓰다 보니 또 고쳤다. 윈도우 탐색기식 멀티탭, 더 또렷한 페이지, 그리고 'Acrobat은 왜 안 멈추나'를 따라 만든 자가복구 렌더링까지 — v1.2.0.
지난 글에 (마지막)이라고 적어 놓고도 다시 손이 갔다. 직접 매일 쓰는 도구라서, 쓰다 보니 불편한 곳이 눈에 들어왔기 때문이다. 그렇게 ICEPDF를 v1.2.0으로 올렸다. 이번 핵심은 "Acrobat은 왜 새로고침 없이도 안 멈추지?"라는 질문을 따라가다 만든 자가복구 렌더링이다.
1. 여러 PDF를 한 창에 — 탭
윈도우 탐색기 탭처럼, 한 창에서 여러 PDF를 탭으로 열고 전환하게 했다. 탭마다 줌·페이지·선택 상태가 독립이라, A 문서를 200%로 보다가 B 탭으로 넘어가도 각자의 보기가 그대로 유지된다.
Ctrl+T새 탭 ·Ctrl+W닫기 ·Ctrl+Tab전환- 저장 안 한 변경이 있는 탭을 닫으면 저장할지 먼저 묻는다
내부적으로는 엔진(문서 해석기) 하나가 여러 문서를 동시에 들고 있고, 화면 상태는 탭별 스냅샷으로 갈아끼운다. 덕분에 기존 화면 코드를 거의 건드리지 않고 멀티 문서를 얹을 수 있었다.
2. 흐릿함을 잡다 — 캔버스 렌더링
저해상도 사진을 큰 액자에 늘려 붙이면 뿌예진다. 페이지도 똑같다. 그래서 화면 픽셀보다 더 촘촘하게 그린 뒤 고품질로 줄이는(슈퍼샘플링) 방식으로 바꿨다. 표시도 일반 이미지 태그 대신 캔버스에 디바이스 픽셀 1:1로 그려, 브라우저가 멋대로 뭉개던 단계를 없앴다.
정직하게 말하면, Acrobat의 그 쨍한 글자(서브픽셀 렌더링)와 100% 똑같아지진 않는다. 페이지를 이미지로 그려 붙이는 방식의 천장이다. 다만 이전보다 확실히 또렷해졌고, 거기까지를 만족선으로 잡았다.
3. 확대하면 왼쪽이 사라지던 버그
크게 확대하면 페이지 왼쪽이 사이드바에 가려 보이지 않고, 스크롤을 끝까지 당겨도 닿지 않는 문제가 있었다. 원인은 단순했다 — 페이지를 정중앙에 고정해 두니, 화면보다 커진 순간 왼쪽으로 넘친 부분이 스크롤 영역 밖으로 빠져나간 것이다. 캔버스 너비를 페이지에 맞게 잡아 주니 좌우 양쪽 끝까지 스크롤로 닿게 됐다.
4. 새로고침
가끔 페이지가 한참 기다려도 안 뜨는 일이 있었다. 우선 응급 수단으로 F5 / Ctrl+R과 툴바의 새로고침 버튼을 넣어, 멈춘 페이지를 다시 불러오게 했다. 브라우저 전체 새로고침과 달리 열어 둔 탭은 그대로 유지된다.
5. "Acrobat은 왜 새로고침이 필요 없지?" — 자가복구 렌더링
여기가 이번 버전의 핵심이다. Acrobat이 빠르고 안 멈추는 건 엔진 성능이 아니라 구조 덕분이다. 비유하면 이렇다.
- Acrobat = 요리사 여러 명이 "지금 손님 테이블"부터 만들고, 늦어지는 주문은 취소·재조리하는 식당
- 이전의 내 것 = 요리사 한 명이 들어온 순서대로 만들다가, 하나 태우면 그 접시는 그냥 비워 둔 채 다음으로 넘어가는 식당
그래서 빈 접시(공백 페이지)가 영영 남았고, 새로고침이 필요했다. 이번엔 "보이는 것과 그려진 것을 계속 맞추는" 가벼운 루프를 넣었다.
- 자동 재시도 — 렌더가 실패하거나 누락되면 스스로 다시 그린다
- 가시영역 우선 — 지금 보고 있는 페이지에 가까운 것부터 그린다
- 취소 — 빠르게 스크롤해 화면 밖으로 나간 요청은 그리기 전에 버린다(적체 방지)
- 타임아웃 — 한 작업이 막혀도 전체가 멈추지 않게 시간 제한을 둔다
결과적으로 멈췄던 페이지가 새로고침 없이 잠시 뒤 스스로 채워진다. 새로고침 버튼은 이제 비상용으로만 남았다. 물론 네이티브로 화면에 직접 그리는 Acrobat의 속도까지 따라가진 못한다 — 웹 기술로 만든 데스크톱 앱의 한계는 인정하고, 그 안에서 할 수 있는 최선을 택했다.
마무리
도구는 쓰면서 자란다. "마지막"이라 적어 두고도 다시 손이 간 건, 결국 내가 매일 쓰는 도구이기 때문이다. 불편을 느낀 사람이 곧 고치는 사람일 때, 그 도구는 빠르게 좋아진다. 설치파일도 v1.2.0으로 새로 올려 두었다.