파일 여러 개를 하나로 묶어 보낼 때 ZIP으로 할지 7Z로 할지, 아니면 개발자들이 자주 쓰는 TAR.GZ로 할지 고민한 적이 있을 것입니다. 다들 "7Z가 더 작다"고 하는데, 정말 그런지, 차이가 얼마나 나는지는 막상 숫자로 보기 어렵습니다.
그래서 성격이 다른 파일을 한 폴더에 모아 세 형식으로 직접 압축해 봤습니다. 결과부터 말하면 7Z가 가장 작긴 했지만, 차이는 파일 종류에 따라 크게 흔들렸습니다.
일부러 성격이 다른 파일을 섞었습니다
압축률은 묶는 파일이 무엇이냐에 따라 천차만별입니다. 그래서 한쪽으로 치우치지 않게, 잘 줄어드는 파일과 거의 안 줄어드는 파일을 일부러 함께 담았습니다. 측정 환경은 윈도우 11, 파이썬 3.14.3이며 ZIP은 표준 라이브러리 zipfile, TAR.GZ는 tarfile, 7Z는 py7zr 1.1.3을 썼습니다.
| 파일 | 내용 | 원본 크기 |
|---|---|---|
| app.log | 반복 많은 로그 텍스트 2만 줄 | 약 1,640 KB |
| data.csv | 값이 거의 반복되는 표 2만 행 | 약 380 KB |
| random.bin | 랜덤 바이트 (이미 압축된 데이터처럼) | 약 684 KB |
로그와 CSV는 같은 문구가 계속 반복돼 압축에 아주 유리하고, random.bin은 규칙이 없어 더 줄일 여지가 거의 없는 데이터입니다. 폴더 전체 원본은 약 2,704 KB였습니다.
세 형식으로 묶은 실제 결과
같은 폴더를 기본 옵션 그대로 세 형식으로 압축한 뒤 결과 파일 크기를 쟀습니다.
| 형식 | 결과 용량 | 원본 대비 | 줄어든 비율 |
|---|---|---|---|
| ZIP (Deflate) | 약 745.3 KB | 0.276배 | 72.4% |
| TAR.GZ (gzip) | 약 748.5 KB | 0.277배 | 72.3% |
| 7Z (LZMA2) | 약 697.0 KB | 0.258배 | 74.2% |
7Z가 가장 작았지만 ZIP과의 차이는 약 48 KB, 비율로는 2%포인트 남짓이었습니다. ZIP과 TAR.GZ는 둘 다 Deflate 계열이라 거의 같았습니다. 이 데이터에서는 7Z가 1등이 맞지만, "압도적으로 작다"고 할 만한 격차는 아니었습니다.
차이를 만든 건 파일 종류였습니다
왜 격차가 작았을까요. 파일별로 따로 ZIP 압축해 보면 답이 보입니다.
app.log 원본 1680000 -> zip 11068 99.3% 감소
data.csv 원본 388906 -> zip 51845 86.7% 감소
random.bin 원본 700000 -> zip 700333 -0.0% (오히려 살짝 증가)
반복 많은 로그는 무려 99% 넘게 줄었지만, 랜덤 바이트는 전혀 줄지 않고 오히려 헤더 때문에 몇백 바이트 늘었습니다. 폴더 안에 안 줄어드는 random.bin이 약 684 KB나 차지하니, 어떤 형식을 써도 그 부분은 똑같이 남습니다.
형식 간 압축률 차이는 결국 줄어드는 부분에서만 벌어집니다. 안 줄어드는 데이터가 많이 섞일수록 ZIP이든 7Z든 결과가 비슷해지는 이유입니다. 이미 압축된 사진(JPG), 동영상(MP4), 압축 파일을 다시 묶을 때 용량이 거의 그대로인 것도 같은 원리입니다.
그래서 무엇을 언제 쓰면 될까
이번 측정은 기본 옵션 기준이고, 7Z는 압축 레벨을 더 높이거나 큰 사전을 쓰면 격차가 더 벌어질 수 있습니다. 다만 그만큼 압축 시간과 메모리를 더 쓰고, 받는 사람이 7Z를 풀 프로그램(반디집, 7-Zip 등)을 따로 갖춰야 한다는 단점이 따라옵니다.
| 이럴 때 | 이 형식 |
|---|---|
| 누구에게나 보내고 더블클릭으로 바로 열려야 할 때 | ZIP |
| 용량을 한 톨이라도 더 줄이고 싶고 받는 쪽도 7Z를 풀 수 있을 때 | 7Z |
| 리눅스 서버, 백업, 개발 환경에서 다룰 때 | TAR.GZ |
| 이미 압축된 사진이나 동영상이 대부분일 때 | 무엇이든 비슷 (묶음 편의로 선택) |
호환성이 중요하면 ZIP, 최대 압축이 목적이고 받는 쪽이 받쳐 주면 7Z, 리눅스나 백업 흐름이면 TAR.GZ가 무난합니다.
직접 확인하고 싶다면
아래 파이썬 코드를 그대로 실행하면 위와 같은 샘플 폴더를 만들고 세 형식으로 압축해 크기를 출력합니다. ZIP과 TAR.GZ는 표준 라이브러리라 추가 설치가 필요 없고, 7Z만 pip install py7zr로 설치하면 됩니다.
import os, random, zipfile, tarfile, py7zr
random.seed(42)
folder = "sample"
os.makedirs(folder, exist_ok=True)
with open(f"{folder}/app.log", "w", encoding="utf-8") as f:
for i in range(20000):
f.write(f"2026-06-25 10:00:{i%60:02d} INFO request ok status=200\n")
with open(f"{folder}/data.csv", "w", encoding="utf-8") as f:
f.write("id,status,city\n")
for i in range(20000):
f.write(f"{i},active,Seoul\n")
with open(f"{folder}/random.bin", "wb") as f:
f.write(random.randbytes(700000))
with zipfile.ZipFile("out.zip", "w", zipfile.ZIP_DEFLATED) as z:
for root, _, files in os.walk(folder):
for fn in files:
full = os.path.join(root, fn)
z.write(full, os.path.relpath(full, folder))
with tarfile.open("out.tar.gz", "w:gz") as t:
t.add(folder, arcname=".")
with py7zr.SevenZipFile("out.7z", "w") as a:
a.writeall(folder, ".")
for name in ["out.zip", "out.tar.gz", "out.7z"]:
print(name, os.path.getsize(name), "bytes")
seed를 42로 고정했으므로 같은 환경이면 비슷한 크기가 나옵니다. 단, 결과 수치는 파이썬과 각 라이브러리 버전, 그리고 무엇보다 어떤 파일을 담느냐에 따라 달라집니다. 사진이나 영상만 담으면 세 형식 모두 거의 안 줄어들고, 텍스트만 담으면 셋 다 크게 줄면서 7Z의 우위가 조금 더 또렷해집니다.
자주 묻는 질문
Q. 그럼 항상 7Z가 정답인가요?
용량만 보면 대체로 7Z가 가장 작지만, 차이는 데이터에 따라 1~2%포인트에서 그치기도 합니다. 받는 사람이 풀 수 있는지, 압축에 드는 시간을 감수할지를 함께 따져야 합니다.
Q. ZIP과 TAR.GZ는 왜 거의 같나요?
둘 다 Deflate(gzip) 계열 압축을 쓰기 때문입니다. 다만 TAR.GZ는 먼저 파일을 하나로 이어 붙인 뒤 통째로 압축해, 작은 파일이 아주 많을 때 ZIP보다 조금 유리해지는 경향이 있습니다.
Q. 이미 압축된 파일을 또 압축하면요?
거의 줄지 않습니다. 위 random.bin처럼 규칙이 없는 데이터나 JPG, MP4는 이미 압축돼 있어, 다시 묶어도 용량은 그대로이고 헤더 때문에 살짝 늘기도 합니다.
압축률 순위는 형식 이름이 아니라 담는 파일이 좌우합니다. 잘 줄어드는 텍스트가 많다면 7Z로 한 톨 더 짜낼 수 있고, 사진이나 동영상이 대부분이라면 어떤 형식을 골라도 비슷하니 호환성 좋은 ZIP이 편합니다.
'파일 형식 백과사전' 카테고리의 다른 글
| ZIP 압축을 풀었더니 파일명이 ║╕░φ╝¡ 처럼 깨질 때, 원인과 해결 (1) | 2026.07.16 |
|---|---|
| 같은 사진을 WebP, AVIF, JPG로 저장하면 용량이 얼마나 차이 날까 (직접 측정 후기) (0) | 2026.07.15 |
| XML로 받은 데이터를 JSON으로 바꾸고 싶을 때, 표준 라이브러리만으로 해결하기 (0) | 2026.07.13 |
| SVG를 PNG로 변환하는 법, 출력 크기는 어떻게 정해야 할까 (0) | 2026.07.12 |
| 앱이 만든 .db 파일, 안에 든 데이터를 들여다보는 단계별 방법 (0) | 2026.07.11 |