피드로 돌아가기
The Privacy Problem with Online PDF Tools (and How I Fixed It)
Dev.toDev.to
Frontend

개발자가 PDF 처리를 브라우저 클라이언트로 이전하여 서버 업로드 제거 및 사용자 데이터 노출 방지

The Privacy Problem with Online PDF Tools (and How I Fixed It)

TateLyman2026년 3월 28일6intermediate

Context

온라인 PDF 도구 상위 10개 중 8개가 파일을 서버에 업로드하며, 3개는 24시간 보관, 2개는 개인정보를 제3자와 공유, 1개는 업로드 엔드포인트에 HTTPS를 미적용하는 등 보안 위험을 노출하고 있다. 사용자는 계약서, 의료기록, 세금 신고서 등 민감한 문서를 이들 도구에 맡기고 있으나 신뢰할 수 없는 상태이다.

Technical Solution

  • pdf-lib 라이브러리를 사용하여 PDF 병합 구현: 파일을 arrayBuffer로 변환 후 PDFDocument.load()로 로드하고 copyPages()로 모든 페이지를 복사하여 merged.addPage()로 추가
  • PDF 분할 기능 구현: 특정 페이지 범위(start, end)를 지정하여 copyPages() 호출 시 해당 인덱스만 전달해 별도 PDF 생성
  • PDF 압축 기능 구현: 내장 이미지를 추출하여 Canvas + toBlob()으로 재인코딩하고 품질 0.7 설정으로 이미지 재배치
  • pdf.js(Mozilla의 PDF 렌더러)를 활용한 PDF to Image 변환: Canvas 엘리먼트에 페이지 렌더링하고 scale 파라미터(1=화면해상도, 2=인쇄품질, 3=고해상도)로 픽셀 밀도 조절
  • 브라우저 기반 처리로 네트워크 요청 완전 제거: 초기 페이지 로드 후 파일 처리 시 zero network activity 달성 및 오프라인 동작 가능

Impact

이미지 기반 PDF는 40~60% 크기 감소를 달성하였다.

Key Takeaway

PDF 병합, 분할, 렌더링 같은 CPU 집약적 작업은 pdf-lib와 pdf.js 같은 오픈소스 라이브러리를 통해 완전히 클라이언트에서 수행 가능하며, 이는 서버 비용 제거와 사용자 개인정보 보호를 동시에 달성한다.


민감한 파일을 다루는 웹 애플리케이션에서 pdf-lib를 도입하면 서버 업로드 단계를 제거하고 DevTools Network 탭으로 검증 가능한 클라이언트 전용 처리를 구현할 수 있으며, 이는 사용자에게 명시적인 데이터 비노출 보증과 오프라인 동작을 제공한다.

원문 읽기