피드로 돌아가기
Dev.toFrontend
원문 읽기
Canvas API 기반 Client-side 압축으로 서버 비용 제로화 및 JS 번들 95% 절감
I built an image compressor that never sees your images published
AI 요약
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 메커니즘 설계