프로젝트 목록으로
데스크톱개인 프로젝트 · 2026.07 ~

PDF Editor — 오프라인 데스크톱 편집기

문서가 밖으로 나가지 않는 로컬 PDF 편집기 (Electron)

담당 — 개인 프로젝트 — 설계·개발·릴리스 전 과정

페이지 관리, 텍스트 추가/수정, 그리기, 도형, 스탬프, 서명, 주석, 링크까지 지원하는 오프라인 데스크톱 PDF 편집기입니다. 모든 좌표를 0..1로 정규화한 객체 모델로 라이브 오버레이와 내보내기가 단일 렌더러를 공유해 "화면=결과물 1:1"을 보장합니다.

스크린샷 피드백 루프, 세션 부팅 프로토콜, typecheck·test·build 통과 시에만 인스톨러를 굽는 자동 검증 파이프라인 등 AI 협업 하네스를 데스크톱 앱 개발에 적용했습니다.

스크린샷

실제 운영/실행 화면을 직접 캡처했습니다.

시작 화면 — 파일 선택/드래그 앤 드롭, 한/영 언어 전환1 / 15
시작 화면 — 파일 선택/드래그 앤 드롭, 한/영 언어 전환

배경과 문제

상용 웹 PDF 편집기는 문서를 서버로 업로드해야 해서 민감 문서를 다루기 어렵습니다. pdfguru.com의 UX를 벤치마킹하되 "문서가 밖으로 나가지 않는" 오프라인 데스크톱 편집기를 목표로 했습니다.

벤치마크 스크린샷 26장을 UI/기능의 시각적 SSOT로 삼아, 페이지 관리·텍스트 추가/수정·그리기·형광펜·도형·스탬프·서명·주석·링크까지 상용 수준의 기능을 구현했습니다.

핵심 성과

  • 참조 기반 페이지 연산 — 원본 PDF 바이트 불변 유지
  • 저장 시 오버레이 평탄화 + 링크/노트는 실제 PDF 주석으로 삽입
  • Windows(NSIS)·macOS(DMG, Apple Silicon) 멀티플랫폼 인스톨러 배포
  • v1.4.x 릴리스 지속, Playwright 시각 자가검증

아키텍처 & 설계 포인트

  • 정규화 객체 모델(ADR-0002) — 모든 좌표를 뷰포트 기준 0..1로 정규화하고, 라이브 오버레이와 내보내기가 단일 렌더러(draw.ts)를 공유해 "화면 = 결과물 1:1" 보장
  • 참조 기반 페이지 연산 — 문서를 PageRef[] + objectsByPage로 표현해 원본 PDF 바이트를 건드리지 않고 삭제·복제·이동·회전·타 문서 가져오기 처리
  • 저장 시 평탄화 — 오버레이는 ≈180dpi 투명 PNG로 굽고 링크/노트는 실제 PDF 주석으로 삽입, 원본 텍스트 벡터는 유지
  • 순수 로직(src/core: objects/pages/history)을 node --test로 보호, undo/redo는 스냅샷 스택(상한 100)
  • 기존 PDF 텍스트를 자동 인식해 박스 편집하는 텍스트 수정 세션 모드 — 버퍼링 후 종료 시 저장 선택
  • WSL + Wine 크로스 컴파일로 Windows NSIS 인스톨러 자동 생성 (electron-builder)
  • macOS(Apple Silicon) DMG 파이프라인 — 한글 번들명 크래시를 피하려 내부 제품명을 ASCII로 빌드 후 표시명만 한글 유지, ad-hoc 서명 + hdiutil로 DMG 생성

AI(Claude Code) 활용

  • 스크린샷 피드백 루프 — 사용자가 스크린샷을 지정 디렉토리에 넣으면 AI가 요구사항으로 해석·구현하고 처리 후 아카이브로 이동
  • 세션 부팅 프로토콜 — CLAUDE.md가 session-log(진행 SSOT) → todo → 최근 plan 순으로 맥락을 자동 복구하도록 지시
  • 자동 검증 → 릴리스 파이프라인 — typecheck·test·build를 모두 통과해야만 인스톨러를 굽고 배포
  • Playwright + WSLg 시각 자가검증 — 앱 구동 → PDF 열기 → 편집 → 스크린샷 픽셀 계측

기술 스택

Electron 33React 18TypeScriptMUI 6pdf.jspdf-libzustandPlaywright