3D 모델 파일을 두 가지 목적을 가지고 압축을 고려했습니다.
- 아카이빙(보관용)
- 대용량 파일의 전송 효율화
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) 다운로드
- Pigz 다운로드 링크: https://sourceforge.net/projects/pigz-for-windows/
- gzip 압축 툴인 z7은 각 파일을 단 건으로 압축한다.
→ 여러 건으로 압축하기 위해 pigz을 다운로드 - Zstandard 다운로드 링크: https://github.com/facebook/zstd/releases/tag/v1.5.7
- Brotil 다운로드 링크: https://github.com/google/brotli/releases/tag/v1.1.0
실행 환경
- Windows PowerShell 스크립트 GitHub: https://github.com/minseojo/gzip-zstd-brotli/blob/main/main.ps1
- 주요 변수:
- $codecs: 실행할 코덱 선택
- $inputRoot: 입력 데이터 경로
- $outputRootBase: 출력 디렉토리
- $csvBase: 통계 저장 경로
- $zstdLevel, $pigzLevel, $brotliQ: 압축 레벨
출력: 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 |
'개발 노트 > 실무 프로젝트' 카테고리의 다른 글
| 3D 모델 요청/응답 API 설계 (0) | 2025.12.22 |
|---|---|
| [마이그레이션] Spring 4 → Boot 3.4: Java 17, Gradle, JAR, 그리고 제어권의 변화 (0) | 2025.12.12 |
| 대용량 파일 업로드의 정합성 보장 전략: Atomic Rename과 SeaweedFS 활용 (0) | 2025.11.27 |
| SRP를 만족하는 모듈화 리팩토링 과정 (0) | 2025.11.16 |
| 전 세계 공간정보를 관리하는 자료구조 구현기 - Implicit Tiling (7) | 2025.07.20 |