https://github.com/jeiel85/minimal-zip-concept
Minimal Zip Concept (MZC) - Learning-oriented lossless compression engine in Rust featuring RLE, Dictionary, LZ77, BCJ, Delta, and Dynamic Huffman Coding with a real-time GUI plot dashboard.
https://github.com/jeiel85/minimal-zip-concept
ans compression context-mixing egui gui huffman-coding learning-by-doing lossless-compression lz77 plots-dashboard preprocessors rust simd visualizer wasm
Last synced: about 15 hours ago
JSON representation
Minimal Zip Concept (MZC) - Learning-oriented lossless compression engine in Rust featuring RLE, Dictionary, LZ77, BCJ, Delta, and Dynamic Huffman Coding with a real-time GUI plot dashboard.
- Host: GitHub
- URL: https://github.com/jeiel85/minimal-zip-concept
- Owner: jeiel85
- Created: 2026-06-03T13:43:37.000Z (about 1 month ago)
- Default Branch: master
- Last Pushed: 2026-06-18T02:51:49.000Z (22 days ago)
- Last Synced: 2026-06-18T04:25:02.916Z (22 days ago)
- Topics: ans, compression, context-mixing, egui, gui, huffman-coding, learning-by-doing, lossless-compression, lz77, plots-dashboard, preprocessors, rust, simd, visualizer, wasm
- Language: Rust
- Homepage: https://jeiel85.github.io/minimal-zip-concept/
- Size: 3.69 MB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Roadmap: docs/ROADMAP.md
Awesome Lists containing this project
README
# MZC (Minimal Zip Concept)
MZC๋ Rust ํ์ต๊ณผ ์์ถ ์๊ณ ๋ฆฌ์ฆ ์๋ ์๋ฆฌ์ ์ดํด๋ฅผ ๋ณํํ๊ธฐ ์ํด ์ง์ ์ค๊ณํ ๋ฌด์์ค ์์ถ ํฌ๋งท ๋ฐ CLI/GUI ๋๊ตฌ์
๋๋ค.
์์ฉ ์์ถ ์๊ณ ๋ฆฌ์ฆ(ZIP, Zstandard, Brotli ๋ฑ)์ ๋ฅ๊ฐํ๋ ๊ฒ์ด ๋ชฉํ๊ฐ ์๋๋ผ, ๋ฐ์ดํธ ์ ํฉ์ฑ๊ณผ ๋ฌด์์ค ๋ณต์์ ์๋ฆฌ๋ฅผ ๋ช
ํํ๊ฒ ๊ตฌํํ๊ณ ์ ์ง์ ์ธ ํฌ๋งท ๊ณ ๋ํ ๋จ๊ณ๋ฅผ ์ค์ตํ๋ ๋ฐ ์ด์ ์ ๋ง์ถ์์ต๋๋ค.
[](https://jeiel85.github.io/minimal-zip-concept/)
[](https://crates.io/crates/mzc)
[](https://github.com/jeiel85/minimal-zip-concept)
[](https://codecov.io/gh/jeiel85/minimal-zip-concept)
### ๐ **[Try MZC Interactive LZ77 Visualizer & WASM Demo! (์น ๋ธ๋ผ์ฐ์ ์์ ๋ฐ๋ก ํด๋ณด๊ธฐ)](https://jeiel85.github.io/minimal-zip-concept/)**

*MZC Web Demo - Interactive LZ77 Sliding Window Visualizer*
---
## 1. MZC ์ํคํ
์ฒ ๋ฐ ๋ง์ผ์คํค ๋ณ์ฒ์ฌ (MZC1 ~ MZC7)
MZC๋ ๋จ์ํ RLE ์์ถ๊ธฐ๋ก ์์ํ์ฌ ์ต์์ ๋นํธ ๋ ๋ฒจ ํจํน ๋ฐ ์ปจํ
์คํธ ๋ฏน์ฑ ์ฌ์๊น์ง ์ ์ง์ ์ผ๋ก ์งํํด ์์ต๋๋ค.
### 1.1 MZC1 (Retro RLE Spec)
- **์๊ณ ๋ฆฌ์ฆ**: ๋จ์ Run-Length Encoding
- **ํค๋ ๊ท๊ฒฉ**: 54๋ฐ์ดํธ ๊ณ ์ ํค๋
- **๋์**: ์ฐ์์ ์ผ๋ก 4๋ฒ ์ด์ ๋ฐ๋ณต๋๋ ๋ฐ์ดํธ ํ๋ฆ์ `Value`์ `Count` ์กฐํฉ์ผ๋ก ๋จ์ ๊ธฐ๋ก. ๋ฐ์ดํฐ์ ๋น์์ถ ๋ถ๊ท์น ํ๋ฆ์ `Literal Block`์ผ๋ก ์ฒ๋ฆฌ.
### 1.2 MZC2 (Parallel Dictionary Spec)
- **์๊ณ ๋ฆฌ์ฆ**: Dictionary Hybrid + Rayon ๋ฉํฐ์ค๋ ๋ ๋ณ๋ ฌํ
- **ํค๋ ๊ท๊ฒฉ**: 56๋ฐ์ดํธ ๊ณ ์ ํค๋ (์ฌ์ ํ
์ด๋ธ ํฌ๊ธฐ ์ ๋ณด 2๋ฐ์ดํธ ์ถ๊ฐ)
- **๋์**: ํ์ผ์ 1MB ์ฒญํฌ ๋จ์๋ก ๋๋์ด ๋ฉํฐ์ค๋ ๋๋ก ๊ฐ ์ค๋ ๋์์ ๋ณ๋ ฌ ์์ถ. ์์ฃผ ๋ฑ์ฅํ๋ ๋ฐ์ดํธ ์ํ์ค๋ฅผ ์ฌ์ ์ ์์งํ์ฌ ํ ํฐ ์ธ๋ฑ์ค๋ก ๋์น ์์ถ.
### 1.3 MZC3 (Sliding Window Chunk Spec)
- **์๊ณ ๋ฆฌ์ฆ**: LZ77 + Huffman (์ ์ ํํ๋ง ์ฝ๋ฉ)
- **๋์**: 32KB ํฌ๊ธฐ ์ฌ๋ผ์ด๋ฉ ์๋์ฐ ๋ฃฉ์ดํค๋ ๋ด์์ ์ด์ ๋ฐ์ดํฐ์์ ์ค๋ณต ์์ญ์ ๊ฐ์งํ์ฌ ๊ฑฐ๋ฆฌ(Distance)์ ๊ธธ์ด(Length) ์ ๋ณด์ ๋ฐฑ๋ ํผ๋ฐ์ค๋ก ์ฝ๋ฉ. ์์ถ ํจ์จ ํฅ์์ ์ํด ์ ์ ํํ๋ง ๋ถํธํ๋ฅผ 2์ฐจ ๊ฒฐํฉ.
### 1.4 MZC4 (Dynamic Huffman Spec)
- **์๊ณ ๋ฆฌ์ฆ**: Canonical Dynamic Huffman Tree
- **๋์**: 1KB ํฌ๊ธฐ ์ด์์ ์ ์ ํธ๋ฆฌ ํค๋ ์ค๋ฒํค๋๋ฅผ ํํํ๊ธฐ ์ํด, ์ค์ ์ฒญํฌ ํ์ผ์์ ์ถํํ ๊ธฐํธ ๋น๋๋ฅผ ๊ธฐ์คํ์ฌ Canonical Tree๋ฅผ ๋์ ์์ฑ. ํธ๋ฆฌ์ ์ฝ๋๊ธธ์ด ์ ๋ณด ์์ฒด๋ฅผ Tree RLE ์์ถ์ผ๋ก ๋ฌถ์ด ๋จ 20~40๋ฐ์ดํธ์ ์ด์ฌ๋ฆผ ํค๋๋ฅผ ์คํ.
### 1.5 MZC5 (Bit-Packed Spec & Preprocessors)
- **์๊ณ ๋ฆฌ์ฆ**: ๐ช ๋นํธ ๋ ๋ฒจ ํ๋๊ทธ ํจํน + โก ์ง์ฐ ๋งค์นญ + ๐น BCJ / Delta ์ ์ฒ๋ฆฌ ํํฐ
- **๋์**:
- **Bit-level Stream Packing**: ๋ธ๋ก๋ง๋ค ๋ถ๋ 1๋ฐ์ดํธ ์ ๋์ฌ ํ์
๋ฐ์ดํธ๋ฅผ ์ ๋ฉด ํ๊ธฐํ๊ณ , ์์ถ ์์ 8๊ฐ์ฉ ๋ฌถ์ด 2๋ฐ์ดํธ(16๋นํธ, 2๋นํธ x 8) ํ๋๊ทธ ์คํธ๋ฆผ์ผ๋ก ์ง๋ ฌํํ์ฌ ์ค๋ฒํค๋ 15~25% ๊ฐ์.
- **Lazy Matching**: ๊ทธ๋ฆฌ๋(Greedy) ๋ฐฉ์ LZ77 ํ์์ ์ฐํํ์ฌ, ํ ๋ฐ์ดํธ ์งํํ ์คํ์
์์ ๋ ๊ธด ์ผ์น ํญ๋ชฉ์ด ์ถํํ ์ ํ์ฌ ๋ฐ์ดํธ๋ ๋ฆฌํฐ๋ด๋ก ๋ณด๋ด๊ณ ๋ ๊ธด ์ผ์น ์ ๋ณด๋ฅผ ์ธ์ฝ๋ฉ.
- **Delta Preprocessor**: Wav, Bmp ๋ฑ ์ธ์ ํํ/๋ฐ์ดํธ ๊ฐ ์ฐจ๋ถ๊ฐ ๊ณ์ฐ์ผ๋ก ์ ๋ณด ์ํธ๋กํผ๋ฅผ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์ถ์.
- **BCJ Preprocessor**: x86 ๋ฐ์ด๋๋ฆฌ์ Jump/Call ๋ช
๋ น ์๋ ์ฃผ์๋ฅผ ์ ๋ ์ฃผ์๋ก ๋์น ๋์นญ์์ผ ๋ฐ์ดํฐ ๋ฐ๋ณต๋ฅ ์ ๋.
- **Decompression Safety Verification**: ๋ฐ์ดํฐ ๋ณต์ ์ ์ ํดํ ๊นจ์ง ๋ฐ์ดํฐ ์ค์ผ์ด ๋ฐ์ํ๋๋ผ๋ ๋์ฝ๋์์ ์์ ํฌ๊ธฐ ๋ฒกํฐ ํ ๋น ๋ฐ ์ธ๋ฑ์ค ์๊ฒฝ์ ์ฆ์ ๊ฐ์งํ์ฌ ์ฐจ๋จํ๋ ์์ ๋ง ๋ด์ฅ.
### 1.6 MZC6 (Asymmetric Numeral Systems & Shared Dictionaries Spec)
- **์๊ณ ๋ฆฌ์ฆ**: Asymmetric Numeral Systems (tANS) + LZ77 Hash Chains + Global Shared Dictionary
- **ํค๋ ๊ท๊ฒฉ**: 56๋ฐ์ดํธ ๊ณ ์ ํค๋ (์ฌ์ ํฌ๊ธฐ ํ๋ ์ฌํ์ฉ)
- **๋์**:
- **LZ77 Hash Chains**: ์ ํ ํ์ ๋์ 65,536๊ฐ ํฌ๊ธฐ์ ํด์ ํ
์ด๋ธ์ ๋์
ํ์ฌ 3๋ฐ์ดํธ ์ ๋์ฌ์ ๋งค์นญ ์ฒด์ธ์ ๋ค์ซ๋ ๋ฐฉ์์ผ๋ก $O(limit)$ ๋งค์นญ ์ค์บ ๋ฌ์ฑ.
- **tANS (Table-based Asymmetric Numeral Systems)**: Huffman ์ฝ๋ฉ์ 1๋นํธ ํ๊ณ๋ฅผ ๋ํํ์ฌ ๋ถ์ ๋นํธ ๋จ์์ ์ํธ๋กํผ ์์ถ์ ์ํํ๋ ์ต์ฒจ๋จ ANS ์์ถ ์์ง ๋ด์ฅ (`src/ans.rs`).
- **Global Shared Dictionary**: ๊ฐ๋ณ ์ฒญํฌ ๋ด ์ฌ์ ์ ์ค๋ณต ์ง๋ ฌํํ์ง ์๊ณ , ํ์ผ ํค๋ ์งํ์ 1ํ๋ง ๋ด์ฅํ์ฌ ๊ณต์ ํ๋๋ก ๊ฐ์ .
- **Dictionary Training**: ์ฌ๋ฌ ์ํ ๋ฐ์ดํฐ์
์ผ๋ก๋ถํฐ ๊ณตํต ๋ฐ์ดํธ ์ํ์ค๋ฅผ ๋น๋ํ์ฌ `.dict` ํํ์ ๊ณต์ ์ฌ์ ์ ์ฌ์ ํ์ต(Training)ํ ์ ์๋ CLI ๊ธฐ๋ฅ ์ถ๊ฐ.
### 1.7 MZC7 (Context Mixing & Media Filters Spec - ์ต์ ์ฌ์)
- **์๊ณ ๋ฆฌ์ฆ**: ๐ง ์ปจํ
์คํธ ๋ฏน์ฑ ๋ ์ธ์ง ์ฝ๋ (CM) + ๐ผ๏ธ PNG Paeth ํํฐ + ๐ง LPC ์ค๋์ค ํํฐ + โก GZIP/DEFLATE ๋์ฝ๋
- **ํค๋ ๊ท๊ฒฉ**: 56๋ฐ์ดํธ ๊ณ ์ ํค๋ (MZC7 ์ ์ฉ ๋นํธ ํจํน ํ๋๊ทธ ์ ์ฉ)
- **๋์**:
- **Context Mixing Range Coder**: ์ง์ ๋นํธ ๋ฌธ๋งฅ์ 0์ฐจ, 1์ฐจ, 2์ฐจ(ํด์ ์ง์ ๋งคํ)๋ก ๋ถํ ๋ถ์ํ์ฌ ๊ฐ์ค์น ํ๊ท (1:2:5)์ผ๋ก ์์ด ํ๋ฅ ์ ์์ธกํ๊ณ , ์ค์ ํ์ ๊ตฌ๊ฐ์ ์ชผ๊ฐ๋ ์ฐ์ ๋ ์ธ์ง ์ฝ๋๋ฅผ ๊ฒฐํฉํ์ฌ ์์ถํฉ๋๋ค (`src/cm.rs`).
- **PNG Paeth Filter**: ์ด๋ฏธ์ง ํฝ์
๊ฐ์ 2์ฐจ์ ๊ณต๊ฐ์ ์ค๋ณต์ฑ์ ์ค์ด๊ธฐ ์ํ Paeth ๊ทธ๋ผ๋์ธํธ ์์ธก ํํฐ๋ฅผ ์ ์ฒ๋ฆฌ๋ก ์ ์ฉํฉ๋๋ค.
- **LPC Audio Filter**: 16๋นํธ PCM ์ค๋์ค ์ ํธ์ ์ธ์ ์ํ์ค ํ๋ฆ์ 2์ฐจ ์ ํ ์์ธก(Order-2 LPC)ํ์ฌ ๊ทธ ์์ฐจ(Residual) ์ฐจ๋ถ๋ง ์์ถํ๋๋ก ๋ณํํฉ๋๋ค.
- **RFC 1951/1952 DEFLATE & GZIP ๋์ฝ๋**: ํ์ค GZIP ํ์ ํ์ผ์ ์์ถ์ ํด์ ํ์ฌ ์๋ณธ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ํด์ฃผ๋ ๋์ฝ๋ ๋ชจ๋์ ์์ Rust๋ก ๊ตฌํํ์ต๋๋ค (`src/deflate.rs`).
---
## 2. ์์ถ ์๊ณ ๋ฆฌ์ฆ ์ฑ๋ฅ ๋ฒค์น๋งํฌ (Benchmark)
MZC7(์ปจํ
์คํธ ๋ฏน์ฑ ๋ฐ ๋ฏธ๋์ด ํํฐ) ์ฌ์์ ๊ธฐ์ค์ผ๋ก ์
๊ณ ํ์ค ์์ถ๊ธฐ(Gzip ๋ฐ Zstandard)์ ๋น๊ตํ ๋ฌด์์ค ์์ถ๋ฅ ๋ฒค์น๋งํฌ ๊ฒฐ๊ณผ์
๋๋ค. (๊ฐ ๋ฐ์ดํฐ์
ํฌ๊ธฐ: ์ฝ 200KB)
| ๋ฐ์ดํฐ์
๋ถ๋ฅ | MZC1 (RLE) | MZC3 (LZ77) | MZC7 (Context Mixing) | Gzip (flate2 Default) | Zstd (Level 3) |
| :--- | :---: | :---: | :---: | :---: | :---: |
| ๐ **์ผ๋ฐ ํ
์คํธ (Text)** | 100.04% | 6.84% | **9.37%** | 3.35% | 3.49% |
| ๐ง **์ค๋์ค ํ์ผ (Audio)** | 100.04% | 83.72% | **35.20%** ๐ | 75.73% | 70.06% |
| ๐ผ๏ธ **์ด๋ฏธ์ง ํ์ผ (Image)** | 100.04% | 5.85% | **8.20%** | 3.86% | 5.02% |
| ๐ป **์คํ ํ์ผ (Executable)** | 100.04% | 94.46% | **84.48%** | 82.90% | 75.41% |
> [!TIP]
> **์ค๋์ค ๋ฐ์ดํฐ์
์ ๋
๋ณด์ ์ธ ์์ถ๋ฅ **: ์ค๋์ค ํ์ผ(16-bit PCM WAV)์ ๊ฒฝ์ฐ, MZC7์ ํ์ฌ๋ **LPC(์ ํ ์์ธก) ํํฐ**์ **์ฐ์ ๋ ์ธ์ง ์ฝ๋**์ ๊ฒฐํฉ์ ํตํด ์
๊ณ ํ์ค์ธ Gzip(75.73%) ๋ฐ Zstd(70.06%) ๋๋น **35.20%**๋ผ๋ ์์ถ ํจ์จ์ ๋ฌ์ฑํ์ฌ ์๋์ ์ธ ์ฑ๋ฅ์ ์ฐ์๋ฅผ ๋ณด์ฌ์ค๋๋ค. ์ ์ฒด ํฌ๋งท๋ณ ์์ธ ๋ฒค์น๋งํฌ ๋น๊ต ๋ฐ์ดํฐ๋ [๋ฒค์น๋งํฌ ๊ฒฐ๊ณผ ๋ช
์ธ์](docs/benchmark_results.md)๋ฅผ ์ฐธ๊ณ ํ์๊ธฐ ๋ฐ๋๋๋ค.
### 2.1 ๋ด๋ถ Criterion ๋ฒค์น๋งํฌ (v0.11.1 SIMD ์ต์ ํ)
v0.11.1์์ ์ ์ฉ๋ **AVX2/NEON SIMD ๊ฐ์** ๋ฐ **Radix Suffix Array** ์ต์ ํ ํ `cargo bench` ๊ฒฐ๊ณผ์
๋๋ค.
| ๋ฒค์น๋งํฌ | ์์ ์๊ฐ | ์ด์ ๋๋น ๋ณํ | ์ํ |
| :--- | :---: | :---: | :---: |
| `compress_text/MZC2_LZ77` | 28.2 ms | **-36.1%** | โ
ํฅ์ |
| `compress_repeats/MZC2_LZ77` | 6.76 ms | **-59.7%** | โ
ํฅ์ |
| `compress_text/MZC4_Deflate` | 12.84 ms | **-63.7%** | โ
ํฅ์ |
| `compress_repeats/MZC4_Deflate` | 6.39 ms | **-67.3%** | โ
ํฅ์ |
| `compress_text/MZC5_tANS` | 12.99 ms | **-64.2%** | โ
ํฅ์ |
| `compress_repeats/MZC5_tANS` | 21.78 ms | **-52.7%** | โ
ํฅ์ |
| `compress_text/MZC7_CM` | 22.66 ms | **-48.5%** | โ
ํฅ์ |
| `compress_repeats/MZC7_CM` | 10.67 ms | **-51.8%** | โ
ํฅ์ |
| `micro/bwt_apply` | 1.37 ms | **-67.8%** | โ
ํฅ์ |
| `micro/cm_compress` | 3.24 ms | **-61.5%** | โ
ํฅ์ |
> [!NOTE]
> **์ ์๊ณ ๋ฆฌ์ฆ 36~68% ์๋ ํฅ์**: CM ๋ ์ธ์ง ์ฝ๋์ ๊ฐ์ค์น ํผํฉ ๋ฃจํ์ AVX2 `_mm256_mullo_epi32` / NEON `vmulq_s32` SIMD ๋ช
๋ น์ด๋ฅผ ์ ์ฉํ๊ณ , BWT ์ ๋ฏธ์ฌ ๋ฐฐ์ด์ $O(N \log N)$ Radix Sort ๋ฐฉ์์ผ๋ก ๊ต์ฒดํ ๊ฒฐ๊ณผ์
๋๋ค.
---
## 3. GUI ๋ค์ค ํญ ๋์๋ณด๋ ํ์ฌ
`egui` ๋ฐ `egui_plot`์ ์ด์ฉํ ํ๋ คํ ์๊ฐ์ GUI ์ฑ๋ฅ ์ง๋จ ํ๋ฉด์ ์ ๊ณตํ๋ฉฐ, ์๋จ ํญ์ ํตํด ๋ชจ๋๋ฅผ ์ ํํ ์ ์์ต๋๋ค.
- **Dashboard ํญ**:
- **Rayon Thread Occupancy Gauge**: ์์ถ ์ฐ์ฐ ์ ๋ด๋ถ ์ค๋ ๋ ์ฝ์ด์ ์ ์ ์จ ์ํ๋ฅผ ๋ฐฑ๋ถ์จ ํ๋ก๊ทธ๋ ์ค๋ฐ๋ก ์๊ฐํ.
- **์ค์๊ฐ Throughput/Ratio Curves**: 1MB ์ฒญํฌ๊ฐ ์ฒ๋ฆฌ๋ ๋๋ง๋ค ์ค์๊ฐ ์์ถ ์๋(MB/s) ๋ฐ ์์ถ๋ฅ (%) ๊ณก์ ์ ๋ ๋๋ง.
- **๋ฌผ๋ฆฌ์ ์ด์ง ๊ทธ๋ฆฌ๋ ๋งต**: ๋ณต์๋ RLE, ํ ํฐ, ๋ฐฑ๋ ํผ๋ฐ์ค, ๋ฆฌํฐ๋ด ๋ธ๋ก์ ๊ธฐํํ์ ๋ถํฌ๋ฅผ ์บ๋ฒ์ค์์ ์์ ๊ทธ๋ฆฌ๋๋ก ๋งคํ.
- **Trainer ํญ**: ๋ค์์ ํ
์คํธ๋ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ์ฌ ๋ค์ฉ๋ ๊ณต์ ์ฌ์ (`.dict`)์ ํด๋ฆญ ๋ช ๋ฒ์ผ๋ก ์ฝ๊ฒ ์๋ ํ์ตํ๊ณ ๋ด๋ณด๋ผ ์ ์๋ ์๊ฐ์ ํธ๋ ์ด๋ ์์ ๋.
- **tANS Plot ํญ**: tANS ์๊ณ ๋ฆฌ์ฆ ๋์ ์ค ์
๋ ฅ ๊ธฐํธ์ ๋ฐ๋ฅธ ์ํ ์ ์ด(State Transition) ๊ณผ์ ์ ์ ๋๋ฉ์ด์
๊ธฐํํ์ ์ขํ ๋
ธ๋ ํ๋กฏ์ผ๋ก ๋ ๋๋ง ์๋ฎฌ๋ ์ด์
.
---
## 4. ์ค์น ๋ฐ ๋น๋ ๋ฐฉ๋ฒ
### 4.1 ์ฌ์ ์๊ตฌ์ฌํญ
- [Rust ๋ฐ Cargo ๋๊ตฌ ์ฒด์ธ ์ค์น](https://www.rust-lang.org/tools/install) (Edition 2021 ์ง์)
### 4.2 ์ต์ ๋ฆด๋ฆฌ์ค ๋ค์ด๋ก๋
- ์ต์ ๋ฒ์ : **v0.12.1**
- Windows ์ค์น ํ์ผ: [mzc-setup.exe](https://github.com/jeiel85/minimal-zip-concept/releases/download/v0.12.1/mzc-setup.exe)
- ์ ์ฒด ๋ฆด๋ฆฌ์ค ์์ฐ: [GitHub Releases](https://github.com/jeiel85/minimal-zip-concept/releases/tag/v0.12.1)
### 4.3 ๋น๋
```bash
# ๋ฆด๋ฆฌ์ฆ ์คํ ํ์ผ ์ปดํ์ผ (target/release/mzc ์์ฑ)
cargo build --release
```
---
## 5. ์ค์ ๋ช
๋ น์ด ๊ฐ์ด๋
MZC ์์ง์ ์๋ธ์ปค๋งจ๋ ๊ธฐ๋ฐ CLI ๋ช
๋ น๊ณผ GUI ๋จ๋
์คํ ๋ชจ๋๋ฅผ ์ง์ํฉ๋๋ค.
### 5.1 CLI ์์ถ (`compress`)
```bash
# MZC5 ์ต์์ ๋ ๋ฒจ ์์ถ ์คํ (๋ ๋ฒจ 9, Delta ์ ์ฒ๋ฆฌ ํ์ฑํ, BCJ ์ ์ฒ๋ฆฌ ํ์ฑํ)
./target/release/mzc compress input_file.bin output_file.mzc -m lz77 -e dynamic -l 9 --delta --bcj
# MZC6 tANS ๋ฐ ์ฌ์ ํ์ผ์ ์ฌ์ฉํ ์์ถ ์คํ
./target/release/mzc compress input_file.bin output_file.mzc -m lz77 -e ans -l 6 --dict-file trained.dict
# MZC7 ์ปจํ
์คํธ ๋ฏน์ฑ ๋ฐ PNG ํํฐ๋ฅผ ์ฌ์ฉํ ์์ถ ์คํ
./target/release/mzc compress input_image.png output_file.mzc -m hybrid -e cm --png
```
### 5.2 CLI ์์ถ ํด์ (`decompress`)
```bash
# SHA-256 ๊ฒ์ฆ ๋ฐ ์๋ ๋ฒ์ /ํํฐ ์๋ณ ๋์ฝ๋ฉ ๋ณต์ (๋ด์ฅ ์ ์ญ ์ฌ์ ์๋ ์ถ์ถ)
./target/release/mzc decompress output_file.mzc restored_file.bin
# ์ธ๋ถ ์ฌ์ ์ ์ง์ ํ์ฌ ํด์ ํ๋ ๊ฒฝ์ฐ (์ต์
)
./target/release/mzc decompress output_file.mzc restored_file.bin --dict-file trained.dict
```
### 5.3 CLI GZIP ์์ถ ํด์ (`inflate`)
```bash
# ํ์ค GZIP ํฌ๋งท(.gz) ํ์ผ์ ์์ถ์ ํด์ ํ์ฌ ๋ณต์
./target/release/mzc inflate archive.gz restored_file.txt
```
### 5.4 CLI ์ฌ์ ํ์ต (`train`)
```bash
# ๋ค์์ ์ํ ํ์ผ๋ค๋ก๋ถํฐ ๊ณตํต ํจํด์ ์์งํ์ฌ trained.dict ํ์ผ๋ก ํ์ต ์ ์ฅ
./target/release/mzc train samples/*.txt -o trained.dict
```
### 5.5 CLI ํ์ผ ๊ฒ์ฌ ๋ฐ ์์ธ ์ ๋ณด ์ง๋จ (`inspect`)
```bash
./target/release/mzc inspect output_file.mzc
```
### 5.6 ๋ฐ์คํฌํฑ GUI ์ง๋จ ๋์๋ณด๋ ๊ธฐ๋ (`gui`)
```bash
./target/release/mzc gui
# ๋๋ cargo run -- gui
```
---
## 6. ์คํ ์์ (Examples)
MZC ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ API ํํ๋ก ์ฌ์ฉํ ๋ ๋์์ ์ฃผ๋ ์คํ ์์ ์ฝ๋๊ฐ `examples/` ๋๋ ํฐ๋ฆฌ์ ์ ๊ณต๋ฉ๋๋ค.
* **๊ธฐ๋ณธ ์ธ๋ฉ๋ชจ๋ฆฌ ์์ถ ์์ **: MZC API๋ฅผ ํ์ฉํด ๋ฉ๋ชจ๋ฆฌ ์์์ ํ
์คํธ๋ฅผ ์ธ์ฝ๋ฉ/๋์ฝ๋ฉํฉ๋๋ค.
```bash
cargo run --release --example simple_compression
```
* **๊ณต์ ์ฌ์ ํ์ต ๋ฐ ์์ถ ์์ **: ์ํ ๋ง๋ญ์น๋ก๋ถํฐ ํจํด ์ฌ์ ์ ํ์ต ๋ฐ ์ถ์ถํ์ฌ ์ฌ์ ๊ธฐ๋ฐ์ผ๋ก ํ
์คํธ๋ฅผ ์์ถํฉ๋๋ค.
```bash
cargo run --release --example shared_dictionary
```
* **์ ์ง์ ์์ถ ๋ฒค์น๋งํฌ ์ธก์ ์์ **: ํ
์คํธ, ์ด๋ฏธ์ง, ์ฌ์ด๋ ํํ, ์คํ ํ์ผ์ ๋ํด MZC1๋ถํฐ MZC7๊น์ง์ ์ฑ๋ฅ์ ๋ฒค์น๋งํนํฉ๋๋ค.
```bash
cargo run --release --example benchmark
```
---
## 7. ๊ณต์ ๊ธฐ์ ๊ท๊ฒฉ์ ๋ฐ ์ฑ๋ฅ ์ธก์ ๋ณด๊ณ ์
* **[MZC ํ์ผ ํฌ๋งท ์์ธ ๊ธฐ์ ๊ท๊ฒฉ์ (docs/spec.md)](docs/spec.md)**: MZC1~MZC7์ ์ด์ง ํค๋ ๋ช
์ธ, RLE/LZ77/tANS/Context Mixing์ ๋นํธ์คํธ๋ฆผ ๊ตฌ์กฐ ๋ฐ ์ ์ฒ๋ฆฌ ํํฐ ์ํ ๊ณต์์ ์๋กํ์ต๋๋ค.
* **[MZC ์์ถ ์๊ณ ๋ฆฌ์ฆ ๋ฒค์น๋งํฌ ์ฑ๋ฅ ๋ณด๊ณ ์ (docs/benchmark_results.md)](docs/benchmark_results.md)**: ๋ค์ํ ํ์ผ ๋๋ฉ์ธ(Text, Audio, Image, Executable)์์์ ์์ถ๋ฅ ๋ฐ ์์ ์๊ฐ์ ๋ฒค์น๋งํฌ ํ๋ก๊ทธ๋จ ๊ตฌ๋ ๊ฒฐ๊ณผ์ ํจ๊ป ๊ธฐ๋กํ์ต๋๋ค.
---
## 8. ํ์ต์ฉ ์ค๊ณ ์ํคํ
์ฒ
MZC๋ ๋ชจ๋ ๊ฐ์ ์์กด์ฑ์ด ๋ช
ํํ์ฌ Rust์ ์๋ฌ ํธ๋ค๋ง, ๋นํธ ์คํธ๋ฆผ ๋ค๋ฃจ๊ธฐ, GUI ๋ฐ ๋ฉํฐ์ค๋ ๋ฉ ํ์ต์ ํ๋ฅญํ ๊ธธ์ก์ด๊ฐ ๋ฉ๋๋ค.
```mermaid
graph TD
CLI[src/cli.rs: clap ์ธ์ ํ์ฑ] --> Main[src/main.rs: ์ง์
์ ]
Main --> Lib[src/lib.rs: ํตํฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ธํฐํ์ด์ค]
Lib --> GUI[src/gui.rs: egui ๋ ๋๋ฌ & ๋น๋๊ธฐ ํ์คํฌ]
Lib --> Format[src/format.rs: ํ์ผ ํค๋ ๋ถ๊ธฐ ํ์]
Lib --> Rle[src/rle.rs: ํจํน, ์ง์ฐ๋งค์น, RLE, LZ77, ํํฐ ์ฝ์ด]
Lib --> Huffman[src/huffman.rs: Dynamic/Static ํํ๋ง ํธ๋ฆฌ]
Lib --> Ans[src/ans.rs: tANS ๋ถํธํ ์์ง]
Lib --> CM["src/cm.rs: CM ์ฐ์ ์ฝ๋ (AVX2/NEON SIMD)"]
Lib --> Filters[src/filters.rs: PNG/LPC ๋ฏธ๋์ด ์์ธก ํํฐ]
Lib --> Deflate[src/deflate.rs: GZIP/DEFLATE ๋์ฝ๋]
Lib --> Checksum[src/checksum.rs: SHA-256 ์ฒดํฌ์ฌ ๊ณ์ฐ]
Lib --> Inspect[src/inspect.rs: ์ธ์คํํฐ ๋ถ์ ์์ง]
Lib --> WASM[src/wasm.rs: WebAssembly ๋ฐ์ธ๋ฉ]
```