본문 바로가기

파일 형식 백과사전

같은 폴더를 ZIP, 7Z, TAR.GZ로 압축하면 용량이 얼마나 다를까, 3종 직접 측정

파일 여러 개를 하나로 묶어 보낼 때 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 KB0.276배72.4%
TAR.GZ (gzip)약 748.5 KB0.277배72.3%
7Z (LZMA2)약 697.0 KB0.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이 편합니다.