Skip to content

techniflows/PDF-Wizard

Repository files navigation

PDF Wizard πŸ§™β€β™‚οΈ

λΈŒλΌμš°μ €μ—μ„œ 100% 둜컬둜 μž‘λ™ν•˜λŠ” κ°•λ ₯ν•œ PDF 도ꡬ

πŸ“‹ ν”„λ‘œμ νŠΈ κ°œμš”

PDF WizardλŠ” μ‚¬μš©μžμ˜ λΈŒλΌμš°μ €μ—μ„œ μ™„μ „νžˆ μž‘λ™ν•˜λŠ” ν”„λΌμ΄λ²„μ‹œ μ€‘μ‹¬μ˜ PDF 처리 λ„κ΅¬μž…λ‹ˆλ‹€. μ„œλ²„λ‘œ νŒŒμΌμ„ μ—…λ‘œλ“œν•˜μ§€ μ•Šκ³  λͺ¨λ“  μž‘μ—…μ΄ λ‘œμ»¬μ—μ„œ μ²˜λ¦¬λ˜μ–΄ μ™„λ²½ν•œ λ³΄μ•ˆκ³Ό ν”„λΌμ΄λ²„μ‹œλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

도메인: https://pdfwizard.dev

✨ μ£Όμš” κΈ°λŠ₯

κ΅¬ν˜„ μ™„λ£Œλœ κΈ°λŠ₯

  • PDF 병합: μ—¬λŸ¬ PDF νŒŒμΌμ„ ν•˜λ‚˜λ‘œ κ²°ν•©
  • PDF λΆ„ν• : PDF의 κ°œλ³„ νŽ˜μ΄μ§€λ₯Ό λΆ„λ¦¬ν•˜μ—¬ μž¬κ΅¬μ„±
  • 이미지 λ³€ν™˜: JPG, PNG, HEIC λ“± λ‹€μ–‘ν•œ 이미지 ν˜•μ‹μ„ PDF둜 λ³€ν™˜
  • νŽ˜μ΄μ§€ μž¬μ •λ ¬: λ“œλž˜κ·Έ μ•€ λ“œλ‘­μœΌλ‘œ νŽ˜μ΄μ§€ μˆœμ„œ λ³€κ²½
  • νŽ˜μ΄μ§€ κ·Έλ£Ήν™”: 같은 PDFμ—μ„œ λΆ„λ¦¬λœ νŽ˜μ΄μ§€λ“€μ„ 그룹으둜 관리
  • 썸넀일 미리보기: 각 νŽ˜μ΄μ§€μ˜ κ³ ν’ˆμ§ˆ 썸넀일 생성 및 ν‘œμ‹œ
  • λ‹€κ΅­μ–΄ 지원: ν•œκ΅­μ–΄/μ˜μ–΄ μžλ™ 감지 및 지원
  • PWA 지원: μ˜€ν”„λΌμΈ λͺ¨λ“œ 및 μ•± μ„€μΉ˜ κ°€λŠ₯
  • 닀크 λͺ¨λ“œ: μ‹œμŠ€ν…œ ν…Œλ§ˆμ— λ”°λ₯Έ μžλ™ μ „ν™˜

기술적 νŠΉμ§•

  • 100% ν΄λΌμ΄μ–ΈνŠΈ μ‚¬μ΄λ“œ 처리: μ„œλ²„ μ—…λ‘œλ“œ 없이 λΈŒλΌμš°μ €μ—μ„œ λͺ¨λ“  μž‘μ—… μˆ˜ν–‰
  • λ°˜μ‘ν˜• λ””μžμΈ: λͺ¨λ°”일, νƒœλΈ”λ¦Ώ, λ°μŠ€ν¬ν†± λͺ¨λ“  ν™˜κ²½ 지원
  • ν„°μΉ˜ 제슀처 지원: λͺ¨λ°”일 ν™˜κ²½μ—μ„œ λ“œλž˜κ·Έ μ•€ λ“œλ‘­ μ΅œμ ν™”
  • Service Worker: μ˜€ν”„λΌμΈ μž‘λ™ 및 캐싱 μ „λž΅ κ΅¬ν˜„
  • SEO μ΅œμ ν™”: 메타데이터, κ΅¬μ‘°ν™”λœ 데이터, μ‚¬μ΄νŠΈλ§΅ 제곡

πŸš€ 기술 μŠ€νƒ

ν”„λ ˆμž„μ›Œν¬ & 라이브러리

  • Next.js 15.5.2: React ν”„λ ˆμž„μ›Œν¬ (Turbopack 지원)
  • React 19.1.0: UI 라이브러리
  • TypeScript 5: νƒ€μž… μ•ˆμ •μ„±
  • Tailwind CSS 4: μœ ν‹Έλ¦¬ν‹° 기반 μŠ€νƒ€μΌλ§

PDF 처리

  • pdf-lib 1.17.1: PDF 생성 및 μ‘°μž‘
  • pdfjs-dist 5.4.149: PDF λ Œλ”λ§ 및 νŒŒμ‹±

UI/UX

  • @dnd-kit: λ“œλž˜κ·Έ μ•€ λ“œλ‘­ κΈ°λŠ₯ κ΅¬ν˜„
    • @dnd-kit/core 6.3.1
    • @dnd-kit/sortable 10.0.0
    • @dnd-kit/utilities 3.2.2

기타

  • heic2any 0.0.4: HEIC 이미지 λ³€ν™˜
  • next-pwa 5.6.0: PWA κΈ°λŠ₯ κ΅¬ν˜„
  • @vercel/analytics 1.5.0: μ‚¬μš© 뢄석

πŸ“ ν”„λ‘œμ νŠΈ ꡬ쑰

PDF-Wizard/
β”œβ”€β”€ app/                    # Next.js μ•± 디렉토리
β”‚   β”œβ”€β”€ page.tsx           # 메인 νŽ˜μ΄μ§€
β”‚   β”œβ”€β”€ layout.tsx         # 루트 λ ˆμ΄μ•„μ›ƒ
β”‚   └── sitemap.xml/       # 동적 μ‚¬μ΄νŠΈλ§΅ 생성
β”œβ”€β”€ components/            # React μ»΄ν¬λ„ŒνŠΈ
β”‚   β”œβ”€β”€ PDFMerger.tsx     # 메인 PDF 처리 μ»΄ν¬λ„ŒνŠΈ
β”‚   β”œβ”€β”€ FileUploader.tsx  # 파일 μ—…λ‘œλ“œ UI
β”‚   β”œβ”€β”€ FileItem.tsx      # 파일 μ•„μ΄ν…œ μ»΄ν¬λ„ŒνŠΈ
β”‚   β”œβ”€β”€ PDFSettingsModal.tsx # PDF μ„€μ • λͺ¨λ‹¬
β”‚   β”œβ”€β”€ ZoomableThumbnail.tsx # ν™•λŒ€ κ°€λŠ₯ν•œ 썸넀일
β”‚   β”œβ”€β”€ PWAInstall.tsx    # PWA μ„€μΉ˜ ν”„λ‘¬ν”„νŠΈ
β”‚   β”œβ”€β”€ OfflineIndicator.tsx # μ˜€ν”„λΌμΈ μƒνƒœ ν‘œμ‹œ
β”‚   └── ServiceWorkerManager.tsx # SW 관리
β”œβ”€β”€ utils/                 # μœ ν‹Έλ¦¬ν‹° ν•¨μˆ˜
β”‚   β”œβ”€β”€ pdfUtils.ts       # PDF 처리 둜직
β”‚   β”œβ”€β”€ i18n.ts           # λ‹€κ΅­μ–΄ 지원
β”‚   └── generateIcons.js  # μ•„μ΄μ½˜ 생성 슀크립트
└── public/               # 정적 파일
    β”œβ”€β”€ manifest.json     # PWA λ§€λ‹ˆνŽ˜μŠ€νŠΈ
    └── service-worker.js # μ„œλΉ„μŠ€ μ›Œμ»€

πŸ› οΈ 개발 ν™˜κ²½ μ„€μ •

ν•„μˆ˜ μš”κ΅¬μ‚¬ν•­

  • Node.js 18.0.0 이상
  • npm λ˜λŠ” yarn

μ„€μΉ˜ 및 μ‹€ν–‰

# μ˜μ‘΄μ„± μ„€μΉ˜
npm install

# 개발 μ„œλ²„ μ‹€ν–‰ (Turbopack μ‚¬μš©)
npm run dev

# ν”„λ‘œλ•μ…˜ λΉŒλ“œ
npm run build

# ν”„λ‘œλ•μ…˜ μ„œλ²„ μ‹€ν–‰
npm start

# 린트 μ‹€ν–‰
npm run lint

ν™˜κ²½ λ³€μˆ˜

νŠΉλ³„ν•œ ν™˜κ²½ λ³€μˆ˜ 섀정이 ν•„μš”ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λͺ¨λ“  κΈ°λŠ₯이 ν΄λΌμ΄μ–ΈνŠΈ μ‚¬μ΄λ“œμ—μ„œ μž‘λ™ν•©λ‹ˆλ‹€.

πŸ“ˆ 개발 λ§ˆμΌμŠ€ν†€

Phase 1: κΈ°λ³Έ κΈ°λŠ₯ (μ™„λ£Œ)

  • βœ… κΈ°λ³Έ PDF 병합 κΈ°λŠ₯
  • βœ… 파일 μ—…λ‘œλ“œ μΈν„°νŽ˜μ΄μŠ€
  • βœ… λ“œλž˜κ·Έ μ•€ λ“œλ‘­ κ΅¬ν˜„

Phase 2: κ³ κΈ‰ κΈ°λŠ₯ (μ™„λ£Œ)

  • βœ… PDF νŽ˜μ΄μ§€ λΆ„ν• 
  • βœ… 이미지λ₯Ό PDF둜 λ³€ν™˜
  • βœ… νŽ˜μ΄μ§€ μž¬μ •λ ¬
  • βœ… 썸넀일 미리보기

Phase 3: PWA & μ˜€ν”„λΌμΈ (μ™„λ£Œ)

  • βœ… Service Worker κ΅¬ν˜„
  • βœ… μ˜€ν”„λΌμΈ λͺ¨λ“œ 지원
  • βœ… PWA μ„€μΉ˜ κ°€λŠ₯
  • βœ… 캐싱 μ „λž΅ κ΅¬ν˜„

Phase 4: UX κ°œμ„  (μ™„λ£Œ)

  • βœ… λͺ¨λ°”일 λ“œλž˜κ·Έ μ•€ λ“œλ‘­ μ΅œμ ν™”
  • βœ… λ°˜μ‘ν˜• λ””μžμΈ κ°œμ„ 
  • βœ… 닀크 λͺ¨λ“œ 지원
  • βœ… λ‹€κ΅­μ–΄ 지원 (ν•œκ΅­μ–΄/μ˜μ–΄)

Phase 5: SEO & μ„±λŠ₯ (μ™„λ£Œ)

  • βœ… 메타데이터 μ΅œμ ν™”
  • βœ… κ΅¬μ‘°ν™”λœ 데이터 μΆ”κ°€
  • βœ… μ‚¬μ΄νŠΈλ§΅ 생성
  • βœ… Vercel Analytics 톡합

πŸ“ TODO 리슀트

단기 κ³„νš

  • PDF νŽ˜μ΄μ§€ νšŒμ „ κΈ°λŠ₯
  • PDF μ••μΆ• κΈ°λŠ₯
  • μ›Œν„°λ§ˆν¬ μΆ”κ°€ κΈ°λŠ₯
  • 배치 처리 κΈ°λŠ₯
  • 더 λ§Žμ€ μ–Έμ–΄ 지원 (일본어, 쀑ꡭ어 λ“±)

쀑기 κ³„νš

  • PDF μ•”ν˜Έν™”/λ³΅ν˜Έν™”
  • PDF 양식 μ±„μš°κΈ°
  • OCR ν…μŠ€νŠΈ 인식
  • PDF to Word/Excel λ³€ν™˜
  • ν΄λΌμš°λ“œ μ €μž₯μ†Œ 연동 (선택적)

μž₯κΈ° κ³„νš

  • ν˜‘μ—… κΈ°λŠ₯ (링크 곡유)
  • ν…œν”Œλ¦Ώ μ‹œμŠ€ν…œ
  • API 제곡
  • λΈŒλΌμš°μ € ν™•μž₯ ν”„λ‘œκ·Έλž¨
  • λ°μŠ€ν¬ν†± μ•± (Electron)

πŸ”’ λ³΄μ•ˆ 및 ν”„λΌμ΄λ²„μ‹œ

  • 둜컬 처리: λͺ¨λ“  파일 μ²˜λ¦¬κ°€ μ‚¬μš©μžμ˜ λΈŒλΌμš°μ €μ—μ„œλ§Œ μˆ˜ν–‰λ©λ‹ˆλ‹€
  • μ„œλ²„ μ—…λ‘œλ“œ μ—†μŒ: 파일이 μ„œλ²„λ‘œ μ „μ†‘λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€
  • 데이터 μˆ˜μ§‘ μ—†μŒ: μ‚¬μš©μž νŒŒμΌμ΄λ‚˜ λ‚΄μš©μ„ μˆ˜μ§‘ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€
  • 뢄석 도ꡬ: Vercel Analyticsλ₯Ό ν†΅ν•œ 읡λͺ… μ‚¬μš© ν†΅κ³„λ§Œ μˆ˜μ§‘

🀝 κΈ°μ—¬ν•˜κΈ°

ν”„λ‘œμ νŠΈμ— κΈ°μ—¬λ₯Ό ν™˜μ˜ν•©λ‹ˆλ‹€! λ‹€μŒ 절차λ₯Ό λ”°λΌμ£Όμ„Έμš”:

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/AmazingFeature)
  3. Commit your changes (git commit -m 'Add some AmazingFeature')
  4. Push to the branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

πŸ“„ λΌμ΄μ„ μŠ€

이 ν”„λ‘œμ νŠΈλŠ” MIT λΌμ΄μ„ μŠ€ ν•˜μ— λ°°ν¬λ©λ‹ˆλ‹€.

πŸ‘₯ 개발자

πŸ™ κ°μ‚¬μ˜ 말

이 ν”„λ‘œμ νŠΈλŠ” λ‹€μŒ μ˜€ν”ˆμ†ŒμŠ€ ν”„λ‘œμ νŠΈλ“€μ˜ λ„μ›€μœΌλ‘œ λ§Œλ“€μ–΄μ‘ŒμŠ΅λ‹ˆλ‹€:

  • Next.js νŒ€μ˜ ν›Œλ₯­ν•œ ν”„λ ˆμž„μ›Œν¬
  • pdf-lib와 pdfjs-dist κ°œλ°œμžλ“€
  • @dnd-kit νŒ€μ˜ λ“œλž˜κ·Έ μ•€ λ“œλ‘­ 라이브러리
  • λͺ¨λ“  μ˜€ν”ˆμ†ŒμŠ€ κΈ°μ—¬μžλ“€

μ΅œμ’… μ—…λ°μ΄νŠΈ: 2025λ…„ 9μ›” 12일