React와 pdf-lib를 사용한 서버리스 PDF 병합 및 편집기 구축 (백엔드 없이!)

발행: (2025년 12월 23일 오전 06:33 GMT+9)
3 min read
원문: Dev.to

Source: Dev.to

Introduction

저는 일주일에 두 번 정도 PDF를 합칩니다. Adobe 구독료를 낼 정도는 아니지만, 온라인 도구 때문에 불편함을 겪고는 있습니다.

흔히 하는 일은 다음과 같습니다:

  • “merge pdf free” 라고 구글 검색하기.
  • 개인 은행 명세서를 무작위 서버에 업로드하기.
  • 결과를 다운로드하려는 순간 “Daily Limit Reached” 팝업이 뜨기.

이게 지겨워졌습니다. 최신 브라우저와 WebAssembly는 클라이언트‑사이드에서 PDF 조작을 충분히 빠르게 처리할 수 있기 때문에 백엔드가 더 이상 필요하지 않습니다. 그래서 Simple VaultPDF를 만들었습니다.

The Tech Stack

  • Framework: React (Vite)
  • PDF Engine: pdf-lib (병합/분할용) & pdf.js (렌더링용)
  • OCR: tesseract.js
  • State Management: React 훅만 사용, 간단하게 유지

The Code (How it works)

import { PDFDocument } from 'pdf-lib';

const mergeFiles = async (files) => {
  const mergedPdf = await PDFDocument.create();

  for (const file of files) {
    const fileBuffer = await file.arrayBuffer();

    const pdf = await PDFDocument.load(fileBuffer);

    const copiedPages = await mergedPdf.copyPages(pdf, pdf.getPageIndices());

    copiedPages.forEach((page) => mergedPdf.addPage(page));
  }

  const pdfBytes = await mergedPdf.save();
  return pdfBytes;
};

Why Local‑First?

  • Zero Server Costs: AWS나 클라우드 함수에서 처리하지 않음.
  • Privacy: 데이터가 사용자 기기를 떠나지 않으므로 제3자 서버를 신뢰할 필요가 없음.
  • Speed: 업로드·다운로드 지연을 없앰.

The Result

저는 방금 이 확장 프로그램을 Chrome 웹 스토어에 공개했습니다. 결제벽이 싫거나 pdf-lib가 실제 확장 프로그램에서 어떻게 동작하는지 보고 싶다면 한 번 사용해 보세요.

Simple VaultPDF on Chrome Web Store

버그를 발견하면 알려 주세요—대용량 파일에 대한 메모리 사용량을 아직 최적화하고 있습니다.

Happy coding!

Back to Blog

관련 글

더 보기 »