{
  "experiment_id": "lab-002-zip-compression",
  "title": "ZIP으로 묶으면 얼마나 줄어들까?",
  "measured_at_utc": "2026-09-15T02:11:00.675382+00:00",
  "environment": {
    "python": "3.12.14",
    "os": "Windows-11-10.0.26200-SP0",
    "zlib_compile": "1.3.2",
    "zlib_runtime": "1.3.2"
  },
  "settings": {
    "compression": "ZIP_DEFLATED",
    "compresslevel": 6,
    "entries_per_archive": 1,
    "timestamp": "1980-01-01T00:00:00 (fixed ZIP metadata, not measurement time)",
    "create_system": 3,
    "file_mode_octal": "100644",
    "extra_and_comment": "empty",
    "size_includes": "compressed payload and all ZIP headers",
    "text_encoding": "UTF-8, no BOM, LF",
    "text_rows": 1000
  },
  "limitations": [
    "Synthetic repetitive text and a single text-and-shapes image; no photographic samples.",
    "Ratios describe these files and these settings, not every TXT, PNG or JPG.",
    "Compression time, encryption, multi-file archives and other ZIP programs were not compared.",
    "ZIP bytes can vary with metadata, compression settings and Python/zlib versions."
  ],
  "sources": [
    "https://docs.python.org/3/library/zipfile.html",
    "https://www.w3.org/TR/png-3/"
  ],
  "results": [
    {
      "input": "repeated-text.txt",
      "label": "반복 텍스트 1,000행",
      "source_path": "/lab/zip-compression/repeated-text.txt",
      "zip_file": "repeated-text.txt.zip",
      "original_bytes": 33073,
      "zip_bytes": 2581,
      "compressed_payload_bytes": 2449,
      "zip_metadata_bytes": 132,
      "saving_percent": 92.1961,
      "original_sha256": "84ad9e52edac6ef75b2a0997edf64860da40feae62be226ffddabafc51129815",
      "zip_sha256": "0adb266466729445e0713e790ef90b9f4db3220db9fbd86deb2ec646b2d70d03",
      "restored_sha256": "84ad9e52edac6ef75b2a0997edf64860da40feae62be226ffddabafc51129815",
      "crc32": "14bdf73c",
      "restored_bytes_identical": true,
      "crc_check_passed": true,
      "repeated_zip_bytes_identical": true
    },
    {
      "input": "original.png",
      "label": "PNG 시험 화면",
      "source_path": "/lab/capture-format/original.png",
      "zip_file": "original.png.zip",
      "original_bytes": 57368,
      "zip_bytes": 53498,
      "compressed_payload_bytes": 53376,
      "zip_metadata_bytes": 122,
      "saving_percent": 6.7459,
      "original_sha256": "7b320cd043284aa6cc7dca865d82dde0d159460137ff4141e4b762c18d5c5c13",
      "zip_sha256": "2951de7f2b99d34d643803a0d853d7fe01352a03f55aa7cc8a4118267dd51cc7",
      "restored_sha256": "7b320cd043284aa6cc7dca865d82dde0d159460137ff4141e4b762c18d5c5c13",
      "crc32": "6f97da2d",
      "restored_bytes_identical": true,
      "crc_check_passed": true,
      "repeated_zip_bytes_identical": true
    },
    {
      "input": "jpeg-q75.jpg",
      "label": "JPG 시험 화면",
      "source_path": "/lab/capture-format/jpeg-q75.jpg",
      "zip_file": "jpeg-q75.jpg.zip",
      "original_bytes": 87456,
      "zip_bytes": 59095,
      "compressed_payload_bytes": 58973,
      "zip_metadata_bytes": 122,
      "saving_percent": 32.4289,
      "original_sha256": "69773a8ca6309c431587896037f79b75db33ec3dd97916d326a9438466d822b2",
      "zip_sha256": "91c46147a8a4a4aa6d3380f616fd0f46d108975c38cf5edadcd96956bb1a4e7d",
      "restored_sha256": "69773a8ca6309c431587896037f79b75db33ec3dd97916d326a9438466d822b2",
      "crc32": "1b9e39ad",
      "restored_bytes_identical": true,
      "crc_check_passed": true,
      "repeated_zip_bytes_identical": true
    }
  ]
}
