피드로 돌아가기
How to Compress Images in the Browser Using JavaScript
Dev.toDev.to
Frontend

Client-side Image Compression을 통한 업로드 트래픽 획기적 절감 및 UX 최적화

How to Compress Images in the Browser Using JavaScript

Khurram Shahbaz2026년 6월 19일6intermediate

Context

모바일 기기 기반의 고해상도 이미지 업로드 시 3MB에서 10MB에 달하는 대용량 파일 발생으로 인한 네트워크 대역폭 낭비 및 업로드 지연 문제 직면. 서버 사이드 처리 방식은 원본 파일 전송에 따른 불필요한 리소스 소모와 대기 시간 증가라는 한계점을 가짐.

Technical Solution

  • createImageBitmap()을 활용한 브라우저 메모리 내 이미지 로드 및 비동기 처리 구조 설계
  • canvas API 기반의 픽셀 렌더링을 통한 이미지 리사이징으로 1차적인 데이터 크기 축소
  • canvas.toBlob() 메서드와 quality 파라미터 제어를 통한 JPEG 압축률 최적화
  • 목표 파일 크기(Target KB) 달성을 위해 qualityStep 기반의 반복적 압축 시도 및 검증 루프 구현
  • 브라우저 로컬 프로세싱을 통한 민감 데이터의 서버 전송 전 전처리로 프라이버시 강화 및 서버 부하 분산

Impact

  • 원본 이미지 대비 획기적인 파일 크기 감소 및 업로드 시간 단축
  • 0.75~0.85 범위의 Quality 설정을 통한 화질 유지와 용량 최적화의 균형 확보
  • 특정 목표 용량(50KB~500KB) 강제 제약을 통한 서버 스토리지 비용 절감

- 이미지 업로드 전 Client-side 리사이징 적용 여부 검토 - JPEG(사진), PNG(로고/투명), WebP(범용 최적화) 등 목적에 맞는 포맷 전략 수립 - Target KB 제한이 필요한 경우 Quality 값을 점진적으로 낮추는 Iterative Compression 로직 적용 - `canvas` 지원 여부 및 `createImageBitmap` 호환성 확인을 통한 폴백 전략 마련

원문 읽기