
정적 웹 파일을 미리 압축해 두면 요청 때마다 압축하는 비용을 피할 수 있지만, 압축 파일 여러 개를 이어 붙인 결과를 브라우저가 모두 읽는 것은 아니다. Phil Eaton은 gzip, Brotli, Zstandard(zstd)를 비교해 형식과 구현에 따라 이어 붙이기 지원이 어떻게 다른지 설명한다.
gzip은 파일을 단순히 이어 붙여도 gunzip으로는 내용을 모두 복원할 수 있다. 하지만 글에서 시험한 Chrome은 두 번째 파일의 내용을 표시하지 않았고, curl도 오류를 냈다. zlib 예제 프로그램인 gzjoin.c는 압축을 다시 하지 않고 여러 파일을 안전하게 합칠 수 있지만, 각 파일을 압축 해제해 검색하는 과정이 필요하다. Eaton은 주요 프로그래밍 언어의 gzip 구현에 이를 위한 API가 없다고 지적한다.
Google의 Brotli 기준 구현은 gzip 방식의 단순 연결을 지원하지 않는다. Dropbox의 rust-brotli는 연결을 지원하도록 구현을 조정했고, 2025년에는 압축 파일을 외부 도구 없이 이어 붙일 수 있는 플래그도 추가했다. 다만 연결할 때 특정 바이트를 덧붙여야 한다. 이 방식으로 만든 파일은 글에서 시험한 curl과 브라우저에서 읽혔다. 관련 내용은 rust-brotli 변경 사항과 Brotli 스트림 오프셋 지원에서 확인할 수 있다.
zstd는 웹에서 여러 압축 파일을 이어 붙이는 방식을 처음부터 지원하도록 설계됐다. 글의 시험에서는 파일을 단순 연결한 결과를 zstd 도구와 curl, Chrome이 모두 읽었다. 따라서 정적 파일의 일부를 서로 다른 시점에 만들고 나중에 합쳐야 한다면, 압축 형식만 보고 호환성을 가정하지 말고 실제 사용하는 클라이언트와 구현을 확인해야 한다.
글은 사양의 부족함 자체보다 구현이 서로 해독할 수 없는 파일을 만들지 않으면서 이를 보완할 수 있다는 점에 주목한다. 압축 방식의 사용 현황과 지원 조건은 2025 Web Almanac에서도 다룬다.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요