본문 바로가기
개발 노트/실무 프로젝트

Gzip, Zstandard, Brotli 압축 비교 - 3D 모델 파일

by 시뮬레이션 프로그래머 2025. 10. 7.

3D 모델 파일을 두 가지 목적을 가지고 압축을 고려했습니다.

  1. 아카이빙(보관용)
  2. 대용량 파일의 전송 효율화

gizp, zstd, brotli 압축 코덱의 성능을 단순히 수치로만 비교했습니다.
별도의 해석을 덧붙이지 않은 이유는, “어떤 코덱이 가장 좋다”는 절대적인 기준이 없기 때문입니다.
압축의 목적과 사용 환경에 따라 최적의 선택은 달라집니다.

압축 목적에 따른 고려 사항 (예시)

압축목적이 아카이빙이라면 며칠? 몇개월? 몇년?
압축파일을 조회하는가?
압축파일을 조회하면 조회 주기가 어느정도?
압축목적이 전송용이라면 어떻게? 브라우저라면 브라우저는 압축 포맷을 지원하는가? (gzip, br 등)
압축하려는 파일은 text? binary?
압축률은 어느정도여야 하는가? 50%? 20%? 10%?
압축속도는 얼마나 빨라야하는가? 0.0001초? 1초? 10초? 1분? 100분?
압축하는 파일이 특정 규칙을 가지는가? 문자'a'가 많이 들어있는가? 숫자1이 연속적인 형태인가?


목차

1. Gzip, Zstandard, Brotli 간단 설명
2. 압축 배경
3. 압축 방법
4. 3D 타일 데이터 압축 코덱 비교 (Draco + KTX2 포함)


1. Gzip, Zstandard, Brotli 간단 설명

  • Gzip (gzip/pigz)
    • 웹 브라우저 표준 압축 포맷
    • 일반적으로 가장 널리 쓰이는 압축 방식
    • 압축률은 준수하지만, 속도는 상대적으로 느림
    • 병렬화 툴인 pigz를 사용하면 멀티코어 활용 가능
    • 레벨: -1~-9 (숫자가 높을수록 압축률↑, 속도↓)
  • Zstandard (zstd)
    • Facebook(현 Meta)에서 개발
    • 속도와 압축률의 균형이 뛰어남
    • 매우 빠른 압축/해제를 지원, 아카이빙·서비스 모두에 적합
    • 실제로 많은 오픈소스에서 이용중(Linux, Kafka, .. 등)
    • 레벨: 1~22, 일부 구현체는 음수도 지원(속도 최적화 모드).
  • Brotli
    • Google 개발, 웹 브라우저 표준 압축 포맷.
    • HTML/CSS/JS 등 정적 리소스 전송에 최적화.
    • gzip보다 압축률이 우수하지만, 높은 레벨은 속도가 매우 느림.
    • 레벨: 0~11 (0=비압축, 11=최대 압축).
Codec 압축 레벨 범위 특징
Gzip 1 ~ 9 단순하고 호환성 높음, pigz로 병렬 지원
Zstd 1 ~ 22 (음수도 가능) 균형 잡힌 압축률/속도, 고레벨은 매우 느림
Brotli 0 ~ 11 웹 표준, 레벨 4~6이 실용적, 11은 아카이빙용

 


2. 압축 배경

압축 목적

  • 데이터 아카이빙
  • 대용량 파일 압축 전송
    - 파일 크기 수MB 미만: 압축 파일 해제 후, 전송 (압축된 아카이빙 파일, 압축 해제 필요)
    - 파일 크기 수MB 이상: 압축 파일 그대로 전송 => HTTP Content-Encoding: gzip/br

데이터 특성

빌드된 데이터는 이미 1차 압축이 적용된 상태다.
즉, 테스트하는 .glb 파일은 내부적으로 Draco(geometry)와 KTX2(texture) 손실 압축이 이미 적용됐다.

구분 포맷 설명
Geometry Draco 점·삼각형 기반 3D 메쉬 압축
Texture KTX2 GPU 친화적 텍스처 압축

Draco/KTX2 압축 이후 Gzip, Zstd, Brotli 같은 무손실 압축을 추가로 적용한다.

 

요약

구분   단계 포맷 목적 특성
1차 Geometry Draco 점·삼각형 기반 3D 메쉬 압축 손실
2차 Texture KTX2 GPU 친화적 텍스처 압축 손실
2차 File-level Gzip, Zstd, Brotli 저장/전송 효율화 무손실
  • 아카이빙: .tar.zst, .tar.br
  • 웹 전송: gzip, brotli (HTTP Content-Encoding)

3. 압축 방법

window 기준

압축 툴(Pigz, Zstandard , Brotil) 다운로드

실행 환경

출력: CSV 및 콘솔 로그로 압축 성능 기록


4. 3D 타일 데이터 압축 코덱 비교 (Draco + KTX2 포함)

1. 테스트 개요

  • 입력 데이터: 3D 모델 파일 (Draco geometry + KTX2 texture 포함)
  • 총 용량: 1,613.988 MB (1.6GB)
  • 파일 개수: 3,530개
  • 평균 크기: 약 0.46 MB (≈460 KB, 중간 크기 3D 타일)

Draco/KTX2는 이미 1/2차 압축이 적용된 상태이므로, 3차 무손실 압축(Zstd, Gzip, Brotli)의 효율을 비교한다.
 

2. 기본 압축 레벨 비교

압축 레벨 (zstd 5, gzip 6, brotli 4 기준)

Codec (Level) 출력 (MB) 압축률 시간(s) 속도(MB/s)
zstd (5) 1,359.835 15.7% 97.94 16.48
gzip (6) 1,324.888 17.9% 147.87 10.92
brotli (4) 1,341.514 16.9% 97.59 16.54

 

3. 최대 압축 레벨 비교

압축 레벨 (zstd 22, gzip 9, brotli 11 기준)

Codec (Level) 출력(MB) 압축률 시간(s) 속도(MB/s)
gzip (9) 1,324.861 17.9% 169.89 9.50
zstd (22) 1,296.615 19.7% 276.99 5.83
brotli (11) 1,257.047 22.1% 5,515.55 0.29

 

  • 압축률: brotli(22.1%) > zstd(19.7%) > gzip(17.9%)
  • 속도: gzip > zstd >>> brotli
  • brotli(11)는 압축률은 가장 높지만 속도가 극단적으로 느림(약 1시간 30분)

절감량 (총 1.6 GB 기준)

Codec (Level) 절감량(MB) 파일당 절감(평균)
brotli 356.9 MB ≈104 KB
zstd 317.4 MB ≈92 KB
gzip 289.1 MB ≈84 KB