본문 바로가기
압축

ZIP 파일을 다시 ZIP으로 묶으면 정말 더 작아질까?

by 무나주 2026. 10. 17.

메일 첨부 용량에 걸려서, 이미 만든 ZIP 파일을 한 번 더 ZIP으로 묶어 본 적이 있을 겁니다. 두 번 압축하면 조금이라도 더 줄 것 같지만, 실제로 재 보면 결과는 안에 든 파일 종류에 따라 정반대로 갈립니다.

결론부터 적으면 이렇습니다. 사진 5장을 묶은 ZIP은 다시 ZIP으로 묶자 오히려 453바이트 커졌습니다. 작은 CSV 300개를 묶은 ZIP은 다시 묶자 20% 더 줄었는데, 줄어든 몫은 대부분 파일 내용이 아니라 ZIP이 파일마다 붙이는 이름표에서 나왔습니다. 그리고 두 번 압축한 결과는 처음부터 7z로 한 번 압축한 크기의 두 배가 넘었습니다.

측정 환경은 Ubuntu 24.04, Info-ZIP Zip 3.0, 7-Zip 23.01입니다. 첫 ZIP은 기본 레벨(6)로, 다시 묶을 때는 최고 레벨(9)로, 7z는 -mx=9로 압축했습니다.

사진을 묶은 ZIP은 다시 묶으면 오히려 커졌습니다

먼저 JPG 사진 5장(합계 3,113,525바이트)으로 재 봤습니다.

방법 결과 크기 원본 대비
원본 JPG 5장 3,113,525 B 100 %
ZIP으로 한 번 3,110,056 B 99.9 %
그 ZIP을 다시 ZIP으로 3,110,509 B 99.9 % (453 B 증가)
그 ZIP을 다시 7z로 3,110,129 B 99.9 % (73 B 증가)
처음부터 7z로 한 번 3,112,719 B 100.0 %

JPG는 저장할 때 이미 압축된 형식이라 ZIP이 더 줄일 거리가 거의 없습니다. 첫 ZIP도 0.1% 줄이는 데 그쳤고, 그 ZIP을 다시 묶으면 줄일 것은 없이 새 머리말만 붙어서 오히려 커졌습니다. 이런 파일은 형식을 7z로 바꿔도 의미 있는 차이가 나지 않았습니다. 동영상이나 이미 압축된 파일이 주로 든 ZIP도 같은 경우입니다.

작은 CSV 300개는 다시 묶자 20% 더 줄었습니다

다음은 1.5KB 안팎의 작은 CSV 파일 300개(합계 446,684바이트)입니다. 날짜별로 쌓인 보고서 파일을 한꺼번에 보내는 상황과 비슷합니다.

작은 CSV 300개를 ZIP 한 번, ZIP을 다시 ZIP, ZIP을 다시 7z, 압축 없이 묶은 ZIP을 7z, 처음부터 7z로 압축한 결과 크기 비교 막대 그래프
같은 CSV 300개를 다섯 가지 방법으로 묶은 결과. 두 번 압축(주황)은 한 번 압축보다 작지만, 처음부터 7z로 한 번 압축(맨 아래)의 두 배가 넘습니다.

ZIP 한 번으로 200,571바이트가 됐고, 이 ZIP을 다시 ZIP으로 묶자 159,454바이트로 41,117바이트(20.5%) 더 줄었습니다. 7z로 다시 묶으면 153,581바이트까지 내려갔습니다. 여기까지만 보면 '두 번 압축하면 더 작아진다'가 맞는 것 같습니다.

그런데 맨 아래 막대를 보면 이야기가 달라집니다. 같은 CSV 300개를 처음부터 7z로 한 번 압축하면 72,238바이트였습니다. 두 번 압축한 결과의 절반도 안 됩니다.

두 번째 압축이 줄인 것은 파일 이름표였습니다

41KB가 어디서 줄었는지 첫 ZIP을 뜯어 봤습니다. 200,571바이트 가운데 실제로 압축된 데이터는 153,749바이트이고, 나머지 46,822바이트(23.3%)는 파일마다 붙는 머리말과 맨 끝의 목록이었습니다. ZIP은 파일 하나마다 이름, 크기, 날짜, 검사값을 적은 머리말을 붙이고, 끝에 같은 정보를 한 번 더 모아 둡니다. 300개 파일 이름이 report_000.csv, report_001.csv처럼 거의 같으니 이 부분은 다시 압축하면 잘 줄어듭니다.

반대로 압축된 데이터 153,749바이트만 따로 떼어 다시 압축하니 149,689바이트로, 2.6% 줄어드는 데 그쳤습니다. 줄어든 41KB 가운데 내용에서 나온 것은 4KB 남짓이고, 나머지 대부분은 이름표에서 나온 셈입니다.

한 번 압축된 데이터는 겉보기에 무작위에 가까워집니다. 300개 CSV에 똑같이 들어 있던 열 이름 같은 반복이 이미 감춰져서, 두 번째 압축기는 그것을 찾아내지 못합니다. ZIP이 파일을 하나씩 따로 압축하면서 놓친 반복은 두 번 압축해도 되찾을 수 없습니다. ZIP이 파일마다 따로 압축하는 구조는 작은 파일이 수천 개인 폴더 글에서 자세히 다뤘습니다.

처음부터 7z로 묶으면 왜 그렇게 작을까

7z는 기본 설정에서 여러 파일을 하나로 이어 붙인 뒤 통째로 압축합니다(솔리드 압축). 300개 CSV에 되풀이되는 열 이름과 비슷한 숫자 패턴을 한 흐름 안에서 찾아내니 원본의 16%까지 줄었습니다.

눈여겨볼 결과가 하나 더 있습니다. 압축 없이 ZIP으로 묶기만 한 파일(493,506바이트)을 7z로 압축하자 75,596바이트로, 처음부터 7z로 압축한 것과 거의 같았습니다. 압축하지 않은 ZIP 안에는 원본 내용이 그대로 들어 있어서, 7z가 그 안의 반복을 그대로 볼 수 있기 때문입니다. 결국 순서의 문제입니다. 압축은 맨 마지막에 한 번, 가장 큰 덩어리에 걸 때 가장 작아집니다.

7z 결과는 다시 돌릴 때마다 파일 시각 정보 차이로 수십 바이트씩 달라졌습니다(72,238~72,322바이트). 결론에 영향을 줄 크기는 아닙니다.

이미 받은 ZIP을 더 줄이고 싶다면

  • ZIP을 다시 ZIP으로 묶지 말고, 풀어서 원래 파일을 7z로 한 번에 압축합니다. 이번 측정에서는 200.6KB가 72.2KB로 줄었습니다.
  • 7-Zip 화면에서는 압축 형식을 7z로, 압축 레벨을 울트라로 고르면 됩니다.
  • 받는 사람이 7z를 열 수 없어 ZIP을 써야 한다면, 텍스트 파일 여러 개를 먼저 하나로 합친 뒤 ZIP으로 묶는 편이 다시 묶는 것보다 효과가 큽니다.
  • 사진이나 동영상이 주로 든 ZIP은 어떤 방법으로도 거의 줄지 않습니다. 용량 제한에 걸린다면 나눠 보내거나 해상도를 줄이는 쪽이 답입니다.

명령으로 하면 두 줄입니다.

# 받은 ZIP을 폴더로 풀고
7z x reports.zip -oreports
# 풀린 폴더를 7z로 한 번에 압축
7z a -mx=9 reports.7z reports

두 번 압축의 숨은 비용

크기가 줄어드는 경우라도 이중 압축은 받는 사람에게 불편을 넘깁니다. 압축을 두 번 풀어야 하고, 바깥 ZIP을 열어서는 안에 어떤 파일이 있는지 바로 보이지 않습니다. 파일 하나만 꺼내려 해도 안쪽 ZIP을 통째로 풀어야 합니다. 같은 수고라면 풀어서 7z로 한 번 압축하는 편이 크기도 더 작습니다.

상황별 정리

안에 든 파일 다시 압축하면 더 나은 방법
사진, 동영상, 이미 압축된 파일 줄지 않거나 오히려 커짐 그대로 보내거나 나눠 보내기
이름이 비슷한 작은 문서 수백 개 20% 안팎 줄어듦(주로 이름표 몫) 풀어서 7z로 한 번에 압축

두 번 압축해서 줄어드는 몫은 대개 첫 압축이 남긴 낭비입니다. 그 낭비는 처음부터 한 번에 묶으면 아예 생기지 않습니다.

참고한 공식 문서

함께 읽으면 좋은 글