압축은 파일이 많을수록 이득이 커진다고 생각하기 쉽습니다. 여러 개를 하나로 묶는 일이니 그럴 법도 합니다. 그런데 텍스트만 든 폴더인데도 압축률이 안 나오는 경우가 있습니다.
알맹이는 같고 몇 개의 파일로 쪼개져 있느냐만 다른 경우, 결과가 얼마나 갈리는지 직접 재 봤습니다. 총량을 300만 바이트로 고정하고 파일 개수만 1개에서 3,000개까지 늘렸습니다.

내용이 같은데 압축 결과가 세 배 차이 났습니다
주문 내역 형태의 텍스트를 만들어 총 3,000,000바이트를 채웠습니다. 1개짜리 파일 하나로 담은 경우부터 1KB씩 3,000개로 쪼갠 경우까지 네 가지를 준비하고 같은 방식으로 압축했습니다.
| 파일 개수 | ZIP 크기 | ZIP 압축률 | TAR.GZ 크기 | TAR.GZ 압축률 |
|---|---|---|---|---|
| 1개 | 398,190 B | 13.3 % | 366,080 B | 12.2 % |
| 30개 | 412,790 B | 13.8 % | 371,692 B | 12.4 % |
| 300개 | 495,785 B | 16.5 % | 380,899 B | 12.7 % |
| 3,000개 | 1,211,555 B | 40.4 % | 458,658 B | 15.3 % |
담긴 글자는 네 경우가 모두 같습니다. 그런데 ZIP은 398KB에서 1.2MB로 세 배 넘게 부풀었습니다. 압축률이 13.3퍼센트에서 40.4퍼센트로 나빠진 원인은 내용이 아니라 개수입니다.
파일 하나마다 붙는 고정 비용
ZIP은 안에 든 파일마다 별도의 자리를 마련합니다. 파일 앞에 이름과 크기와 검사값을 적은 머리말이 붙고, 압축 파일 맨 뒤에는 그 목록을 한 번 더 적은 색인이 붙습니다. 이름이 길수록 이 자리도 커집니다.
측정값에서 이 비용을 역산할 수 있습니다. 1개일 때와 3,000개일 때의 차이를 개수로 나누면 항목 하나마다 약 271바이트가 늘어난 셈입니다. 1KB짜리 파일에 271바이트가 따라붙으니 부담이 4분의 1에 이릅니다.
더 큰 이유는 따로 있습니다. ZIP은 파일 하나하나를 따로 압축합니다. 압축은 앞에서 본 표현을 뒤에서 다시 만났을 때 짧게 줄이는 방식으로 이득을 냅니다. 그런데 1KB에서 끊고 다음 파일로 넘어가면 그 기억이 초기화됩니다. 3,000개의 파일이 각자 처음부터 시작하니 줄일 여지를 거의 못 찾습니다.
TAR.GZ는 왜 거의 그대로였나
TAR.GZ는 순서가 반대입니다. 먼저 모든 파일을 하나의 긴 덩어리로 이어 붙이고, 그 덩어리를 통째로 한 번 압축합니다. 압축기 입장에서는 3,000개가 아니라 3MB짜리 파일 하나를 만난 것과 비슷합니다.
그래서 개수가 3,000배로 늘어도 압축률이 12.2퍼센트에서 15.3퍼센트로 조금 나빠지는 데 그쳤습니다. 남은 차이는 파일마다 붙는 512바이트 단위의 tar 머리말 몫입니다.
ZIP : [헤더][파일1 압축] [헤더][파일2 압축] ... [전체 목록]
파일마다 따로 압축, 앞 내용을 뒤에서 재활용하지 못함
TAR.GZ : [파일1 + 파일2 + ...] 를 한 줄로 이은 뒤 -> 통째로 압축
전체를 한 흐름으로 보므로 반복을 넓게 잡아냄
이 실측은 서로 닮은 텍스트 3,000개라는 조건에서 나온 값입니다. 파일마다 내용이 완전히 달라 겹치는 표현이 없다면 두 방식의 차이는 지금보다 줄어듭니다.
그래서 어떻게 하면 되나
메일이나 메신저로 보낼 때 크기를 꼭 줄여야 한다면 순서를 이렇게 잡습니다.
1. 잘게 쪼개진 로그나 텍스트가 수천 개라면 형식을 TAR.GZ로 바꾸는 것만으로 크게 줄어듭니다. 윈도우에도 tar 명령이 기본으로 들어 있어 별도 설치가 필요 없습니다.
2. 받는 쪽이 ZIP만 열 수 있다면, 텍스트 파일들을 먼저 하나로 합친 뒤 ZIP으로 묶습니다. 개수를 줄이는 것이 곧 압축률입니다.
3. 파일 이름이 길고 폴더 단계가 깊으면 항목마다 붙는 비용이 커집니다. 불필요한 상위 폴더를 걷어 내고 묶습니다.
명령 프롬프트에서 폴더를 TAR.GZ로 묶는 것은 한 줄이면 됩니다.
tar -czf logs.tar.gz logs
반대로 개수가 적고 파일 하나하나가 크다면 ZIP으로도 손해가 거의 없습니다. 위 표에서 30개까지는 두 방식 차이가 1퍼센트대에 그쳤습니다.
압축이 안 되는 다른 이유들
압축 결과가 실망스러울 때 원인은 세 갈래입니다. 지금 글은 개수가 원인인 경우입니다. 안에 든 것이 사진이나 동영상이라 이미 압축된 상태라면 형식을 바꿔도 소용이 없고, 그쪽은 재압축을 다룬 글에서 따로 확인했습니다. 형식별로 얼마나 차이가 나는지는 같은 폴더를 ZIP, 7Z, TAR.GZ로 묶어 재 본 글에 정리돼 있고, 압축해도 여전히 용량 제한에 걸린다면 조각으로 나눠 보내는 방법 쪽이 답이 됩니다.
압축했는데 기대만큼 안 줄었다면 폴더 안의 파일 개수부터 세어 보세요. 수천 개라면 형식을 바꾸거나 먼저 합치는 것만으로 결과가 달라집니다.
위 수치는 윈도우 11에서 파이썬 3.14.6의 표준 라이브러리 zipfile과 tarfile로 같은 총량을 개수만 바꿔 묶어 얻은 값입니다. 알맹이는 서로 닮은 주문 내역 텍스트라서, 내용이 제각각인 파일에서는 차이가 더 작게 나옵니다.
'압축' 카테고리의 다른 글
| 최고 압축을 고르면 얼마나 더 줄어들까, 레벨 0부터 9까지 재 봤습니다 (0) | 2026.09.27 |
|---|---|
| 사진과 동영상을 ZIP으로 묶으면 용량이 줄 거라는 생각, 실제로는 거의 그대로입니다 (0) | 2026.09.22 |
| ZIP이 손상되었다고 뜰 때, 어디가 깨졌는지부터 확인하면 살릴 수 있습니다 (0) | 2026.08.30 |
| 용량 제한에 걸린 큰 파일, 조각으로 나눠 보내고 받은 쪽에서 합치는 법 (0) | 2026.08.10 |
| ZIP 압축을 풀었더니 파일명이 ║╕░φ╝¡ 처럼 깨질 때, 원인과 해결 (1) | 2026.07.16 |