피드로 돌아가기
I built an image compressor that never sees your images published
Dev.toDev.to
Frontend

Canvas API 기반 Client-side 압축으로 서버 비용 제로화 및 JS 번들 95% 절감

I built an image compressor that never sees your images published

Gaurav Bhowmick2026년 5월 2일6intermediate

Context

기존 이미지 압축 서비스의 서버 업로드 방식에 따른 EXIF 데이터 유출 및 프라이버시 침해 문제 식별. 서버 사이드 처리로 인한 높은 인프라 비용과 무거운 클라이언트 JS 번들 크기가 병목 지점으로 작용함.

Technical Solution

  • Browser 내장 Canvas API와 toBlob 메서드를 활용하여 서버 통신 없는 Pure Client-side 압축 구조 설계
  • 재인코딩 시 파일 크기가 증가하는 현상을 해결하기 위해 Quality Level을 단계적으로 낮추는 Fallback Chain 로직 구현
  • PNG 인코더의 낮은 효율성을 극복하고자 WebP 및 JPEG으로의 자동 포맷 전환을 통한 용량 최적화 전략 채택
  • Safari의 네이티브 HEIC 지원 여부를 판별하여, 비지원 브라우저에 한해 WASM 기반 heic2any 라이브러리를 Lazy-loading 하는 최적화 경로 구축
  • Canvas 렌더링 과정에서 픽셀 정보만 추출하고 메타데이터를 배제하는 특성을 이용한 자동 EXIF Stripping 구현
  • Next.js 15 Static Export와 Netlify CDN을 결합하여 API Route와 DB가 없는 완전 정적 아키텍처 구성

1. 이미지 처리 시 서버 전송 전 Canvas API를 통한 Client-side 전처리 가능 여부 검토

2. 무거운 외부 라이브러리(WASM 등) 도입 시 전체 번들에 포함하지 않고 특정 조건에서만 로드하는 Lazy-loading 패턴 적용

3. 브라우저별 네이티브 기능 지원 차이(예: HEIC)를 Feature Detection으로 판별하여 최적 경로 제공

4. 단순 인코딩 후 파일 크기 증가 가능성을 고려한 단계적 Quality Fallback 메커니즘 설계

원문 읽기