TL;DR

  • Chrome 155부터 JPEG XL(.jxl) 디코딩을 지원하며, JPEG보다 30~50% 높은 압축 효율과 무손실 압축, HDR 등을 제공하는 형식임.
  • Chrome은 이미지 디코더의 메모리 안전성을 높이기 위해 순수 Rust 구현체 jxl-rs를 통합함.
  • 안정성을 유지하면서 성능을 확보하기 위해 안정화된 Rust SIMD 기능과 jxl_simd 추상화 계층을 활용함.
  • 퍼징과 AI 코드 검토를 포함한 검증 과정에서 메모리 안전성 버그를 발견하지 못했으며, 다양한 하드웨어에서 성능을 추적함.
  • 웹 개발자 피드백과 Interop 2026 JPEG XL 조사를 바탕으로 브라우저 간 상호운용성 테스트를 진행함.

Chrome에 JPEG XL 도입

  • Chrome은 155 버전부터 JPEG XL(.jxl) 이미지 형식의 디코딩을 지원함.
  • JPEG XL은 최신 웹 개발자와 사진가의 요구를 충족하도록 설계된 차세대 이미지 형식으로, JPEG보다 30~50% 높은 압축 효율, 무손실 압축, 내장 HDR 지원, JPEG 무손실 트랜스코딩 등을 제공함.
  • 최적의 결과를 얻으려면 AVIF와 JPEG XL을 모두 시험해볼 것을 권장함.
  • JPEG XL은 특히 사진 이미지의 고충실도 또는 무손실 압축, 세밀한 점진적 디코딩이 필요한 경우에 유용할 것으로 예상됨.
  • 이번 글은 JPEG XL을 Chrome에 도입한 이유, Rust를 활용한 메모리 안전성 확보, 성능 최적화, 개발자 피드백과 웹 표준 생태계에서 얻은 교훈을 다룸.

안전 우선: Rust로 디코더 재구현(`jxl-rs`)

  • 이미지 디코더는 현대 웹 브라우저에서 가장 중요하고 공격 표면이 넓은 영역 중 하나임. 네트워크에서 들어오는 복잡하고 신뢰할 수 없는 바이너리 구조를 처리하며 렌더러 프로세스 안에서 실행됨.
  • 과거에는 C++처럼 메모리 안전성이 보장되지 않는 언어로 작성된 디코더에서 범위를 벗어난 읽기, 힙 오버플로, 해제 후 사용 버그 등의 취약점이 발생하기 쉬웠음.
  • Chrome의 보안 모델은 샌드박싱과 심층 방어를 활용하며, ‘두 가지 규칙(rule of two)’을 따름. 다만 샌드박싱은 보조 방어 계층임.
  • 이러한 위험을 근본적으로 제거하기 위해 순수 Rust JPEG XL 디코더 구현체인 jxl-rs를 통합함.

안전성을 유지하며 속도 설계

  • 메모리 안전성은 중요하지만, 메모리 안전성이 없는 최상위 대안과 대략 비슷한 속도를 내는 메모리 안전 디코더가 성능을 크게 희생하는 대안보다 훨씬 합리적인 선택임.
  • 최신 코덱 성능의 핵심은 기기에서 사용 가능한 SIMD 하드웨어를 최대한 활용하는 것임.
  • 이를 안전하게 구현하기 위해 target_feature_11 Rust 기능을 안정화했으며, 이를 통해 unsafe 코드 없이 SIMD 명령어를 사용할 수 있게 됨.
  • 다음 단계로 C++ Highway 라이브러리에서 영감을 얻은 SIMD 추상화 계층 jxl_simd를 구축함. Highway는 JPEG XL의 C++ 참조 구현체인 libjxl을 위해 처음 개발된 라이브러리임.
  • 이러한 개발을 통해 SIMD 성능 최적화를 희생하지 않는 다중 플랫폼 라이브러리를 작성하면서, unsafe 작업을 검토를 거친 소수의 위치로 제한함.
  • jxl-rs의 성능 최적화는 libjxl의 최적화를 바탕으로 하며, 영역 경계를 넘는 단계를 위한 범용 처리 파이프라인과 하드웨어 성능을 극대화하기 위한 데이터 복사 최소화를 포함함.
  • 다양한 하드웨어 플랫폼에서 Rust 재구현체의 성능을 추적하고 있으며, jxl-rs 성능 대시보드에서 이를 확인할 수 있음.
  • 퍼징과 AI 코드 검토를 비롯한 최신 기법으로 jxl-rs 구현을 검증했으며, 전체 구현 이력에서 메모리 안전성 버그를 발견하지 못함. 이는 Rust가 메모리 안전성에 가져오는 큰 개선을 추가로 입증함.

개발자 피드백과 Interop 프로젝트

  • Chrome 팀은 버그 제보, 설문조사, Developer Signals Project, Interop Project 등 다양한 경로에서 웹 개발자 피드백을 확인함.
  • JPEG XL 도입 결정은 웹 개발자들의 지속적인 피드백과 요청에 기반하며, 특히 Interop Process에서 2026년과 그 이전 여러 해 동안 인기 제안으로 주목받음.
  • 브라우저 간 형식 상호운용성을 보장하기 위해 Interop 2026 JPEG XL 조사에 참여함.
  • 이 조사의 목표는 브라우저에서 JPEG XL의 모든 기능을 테스트할 수 있도록 테스트 범위를 갖추고, 해당 테스트가 Chrome에서 통과하는지 확인하는 것임.

사용해 보기

  • JPEG XL이 Chrome에 공식 도입되면서 웹은 더 빠르고 풍부하며 안전해짐.
  • 개발자, 콘텐츠 제작자, 플랫폼 운영자에게 파이프라인에서 .jxl 이미지와 애니메이션을 사용해볼 것을 권장함.
  • JPEG XL을 시험하고 버그를 제보해 더 빠르고 안전한 웹을 함께 구축할 수 있음.

감사의 말

  • jxl-rs 또는 Chrome 통합에 기여한 모든 이에게 감사를 전함.
  • 특히 Chrome 통합과 jxl-rs 모두에 크게 기여한 Helmut Januschka, jxl-rs 자체에 크게 기여한 Martin Bruse, Zoltan Szabadka, Sami Boukortt, Wonwoo Choi에게 감사함.