피드로 돌아가기
I built a private, 100% in-browser JPEG XL converter (no upload, no server)
Dev.toDev.to
Frontend

WASM 기반 Client-side 처리를 통한 Zero-Server JPEG XL 컨버터 구현

I built a private, 100% in-browser JPEG XL converter (no upload, no server)

El_Necora2026년 6월 25일3intermediate

Context

JPEG XL의 우수한 압축 효율에도 불구하고 브라우저 표준 지원 미비로 인한 뷰어 부재 상황 발생. 기존 온라인 컨버터들의 서버 업로드 방식이 개인 정보 유출 리스크를 유발하는 구조적 한계 노출.

Technical Solution

  • @jsquash/jxl 라이브러리를 활용하여 libjxl을 WebAssembly로 컴파일해 브라우저 내 독립적 연산 환경 구축
  • Source 이미지의 Native Decode 후 OffscreenCanvas를 거쳐 ImageData를 추출하는 전처리 파이프라인 설계
  • WASM 기반의 JXL 인코딩 및 Canvas 기반의 리인코딩 프로세스를 통해 서버 통신 없이 Client-side에서 모든 변환 처리
  • CDN 의존성을 제거하고 .wasm 코덱을 자체 오리진에서 서빙하여 로딩 속도 및 프라이버시 신뢰성 확보
  • HEIC 파일의 EXIF Orientation 메타데이터를 분석 및 반영하여 이미지 회전 오류 해결
  • 단순 변환을 넘어 Canvas 디코딩 기반의 실시간 뷰어 기능을 제공하여 사용자 접근성 개선

1. WASM 모듈 사용 시 성능과 보안을 위해 CDN 대신 자체 Origin 서빙 검토

2. 이미지 처리 파이프라인 설계 시 EXIF Orientation 등 메타데이터 처리 로직 필수 포함

3. Heavy한 연산 라이브러리 도입 시 OffscreenCanvas를 활용한 메인 스레드 부하 분산 고려

원문 읽기