ZIP, TAR, GZ 차이 정확히 설명해봄 + 실무 압축 명령어 모음

Views: 0

개념 한 줄 정리

  • ZIP: 여러 파일을 하나의 컨테이너에 담으면서 각 파일을 개별적으로 압축하고 바로 찾기 쉬운 포맷.
  • TAR: 파일과 디렉터리를 이어 붙여 하나의 “아카이브”로 만드는 포맷(압축 기능 없음).
  • GZ(gzip): 단일 파일을 DEFLATE로 압축하는 포맷(대개 TAR 결과에 적용해 tar.gz 또는 tgz를 만든다).

왜 이런 차이가 생겼을까

  • ZIP은 처음부터 백업·교환 목적을 위해 “파일 목록 + 메타데이터 + 중앙 디렉터리” 구조를 가졌다. 그래서 아카이브와 압축을 한 번에 처리하며, 특정 파일만 빠르게 꺼낼 수 있다.
  • TAR는 “테이프에 순차 기록”이라는 유닉스 전통에서 출발했다. 파일을 순서대로 이어 붙인 스트림이기 때문에 권한·소유권·심볼릭 링크 같은 POSIX 메타데이터 보존에 강하다. 대신 자체 압축은 하지 않는다.
  • GZ는 단일 스트림을 DEFLATE로 압축한다. TAR가 만든 긴 스트림을 GZ로 감싸면 전반적으로 중복 탐지가 유리해 다수의 작은 파일을 ZIP으로 각각 압축하는 것보다 용량이 잘 줄어드는 상황이 잦다.

구조로 이해하는 차이

ZIP의 구조적 특징

  • 중앙 디렉터리(파일 목록 인덱스)가 있어 무작위 접근(random access)이 빠르다.
  • 파일별로 압축/비압축을 선택 가능하며, 손상 시에도 다른 파일은 복구될 가능성이 높다.
  • 윈도우·macOS·리눅스에서 OS 차원의 기본 지원이 넓다.

TAR의 구조적 특징

  • 파일·디렉터리를 “연속 스트림”으로 이어 붙인 아카이브. 권한, 소유자, 타임스탬프, 링크 정보를 충실히 담는다.
  • 자체 압축은 없고, gzip(.gz), bzip2(.bz2), xz(.xz), zstd(.zst) 등 외부 압축과 조합한다.
  • 스트리밍·파이프 친화적이라 네트워크 전송, 원격 백업, 도커 컨텍스트 패킹 등에서 강력하다.

GZ의 구조적 특징

  • 단일 입력을 압축하는 포맷. 여러 파일을 직접 담지 못한다.
  • TAR와 결합해 tar.gz 또는 tgz가 된다.
  • CRC32 무결성 체크를 제공한다.

언제 무엇을 써야 할까

  • 크로스플랫폼 공유, 특정 파일만 즉시 열람 필요: ZIP이 편하다.
  • 리눅스/컨테이너 환경 배포, 권한·소유권·링크 보존, 파이프라인 처리: TAR + GZ(tar.gz) 또는 TAR + Zstd(tar.zst).
  • 최고 압축률이 우선: TAR + XZ(.tar.xz)나 TAR + Zstd(고레벨). 단, 압축/해제 속도와 CPU 사용량을 고려.

성능과 사용성 비교 포인트

  • 압축률: tar.gz ≈ zip(Deflate)이나, “하나의 큰 스트림을 압축”하는 tar.gz가 코드베이스처럼 중복이 많은 데이터에서 더 유리한 경우가 많다. xz, zstd는 더 좋은 압축률을 제공할 수 있다.
  • 속도: gzip은 빠른 편, zstd는 속도와 압축률 균형이 좋다. xz는 느리지만 압축률 우수.
  • 무작위 접근: ZIP 우세. tar.gz는 스트림 특성상 특정 파일만 즉시 꺼내려면 인덱스가 없어 비효율적일 수 있다.
  • 메타데이터 보존: TAR 우세. 배포 스크립트나 패키징에서 권장되는 이유.

실무에서 바로 쓰는 명령어 모음(리눅스·macOS)

TAR 기본

# 아카이브 생성(압축 없음)
tar cf archive.tar dir_or_files...

# 해제
tar xf archive.tar

# 상대 경로 제거하고 특정 디렉터리 기준으로 패킹
tar -C /path/to/project -cf src.tar src/

tar.gz(tgz)

# 생성(일반)
tar czf archive.tar.gz dir_or_files...

# 해제
tar xzf archive.tar.gz

# 압축 수준 조절 (1=빠름, 9=고압축)
tar czf archive.tar.gz --gzip --options gzip:compression-level=9 dir/

tar.zst(Zstandard, 빠른 고압축)

# 생성 (GNU tar 1.31+)
tar --zstd -cf archive.tar.zst dir/

# 해제
tar --zstd -xf archive.tar.zst

# 레벨 조절
tar --zstd='-19' -cf archive.tar.zst dir/

tar.xz(최고 압축률 위주)

tar cJf archive.tar.xz dir/
tar xJf archive.tar.xz

gzip 단독 사용(GZ)

# 단일 파일 압축(원본 삭제)
gzip file.log

# 원본 유지(-k)
gzip -k file.log

# 해제
gunzip file.log.gz

병렬 gzip(pigz)로 더 빠르게

# 설치 후 사용(멀티코어 활용)
pigz -k file.log
tar --use-compress-program=pigz -cf codebase.tar.gz src/

ZIP

# 생성(-r: 재귀, -9: 고압축)
zip -r -9 archive.zip dir_or_files...

# 해제
unzip archive.zip

# 특정 파일만 추가/제외
zip -r archive.zip project -x "project/node_modules/*"

윈도우에서의 실무 예시

PowerShell 기본 제공

# ZIP 생성
Compress-Archive -Path C:\work\project -DestinationPath C:\backup\project.zip -CompressionLevel Optimal

# 해제
Expand-Archive -Path C:\backup\project.zip -DestinationPath C:\restore

7-Zip(명령행 7z)로 포맷 다양하게

# ZIP
7z a -tzip archive.zip .\project

# tar.gz (두 단계)
7z a -ttar archive.tar .\project
7z a -tgzip archive.tar.gz archive.tar

# 바로 tgz (일부 빌드/스크립트에서 지원)
7z a -ttar -so .\project | 7z a -tgzip -si archive.tar.gz

자주 겪는 함정과 팁

  • tar의 경로 제어: -C 옵션으로 기준 디렉터리를 잡고 상대 경로만 담아야 해제 시 불필요한 절대경로가 생기지 않는다.
  • 제외 패턴: --exclude 또는 --exclude-from으로 로그·빌드 산출물 제외.
tar czf src.tar.gz src/ --exclude='src/**/*.log' --exclude='src/build/*'
  • 권한/실행비트 보존: 배포 대상이 유닉스면 ZIP보다 tar 계열이 안전하다. ZIP도 권한 필드를 담을 수 있지만 구현마다 적용이 엇갈린다.
  • 무결성 체크: gzip/zip은 CRC32를 포함한다. tar 자체는 스트림이므로 압축 레이어 무결성에 의존한다. 장기 보관은 해시(SHA256 등)를 함께 저장해 검증한다.
sha256sum archive.tar.zst > archive.tar.zst.sha256
sha256sum -c archive.tar.zst.sha256
  • 대용량 스트리밍: 파이프 조합으로 디스크 임시파일 없이 전송 가능.
# 원격 서버로 바로 보냄
tar czf - /var/www | ssh user@host "cat > www-$(date +%F).tar.gz"
  • 특정 파일만 빠르게 보고 싶다면: ZIP은 인덱스 덕분에 빠르다. tar.gz는 tar tzf로 목록 확인 후 꺼낼 수 있지만 구조상 전체를 스캔한다.
tar tzf archive.tar.gz | head
tar xzf archive.tar.gz path/inside/archive.txt

실무 선택 가이드

  • 협업 상대가 윈도우 사용자 위주, 특정 파일만 수시로 열람: ZIP
  • 서버 배포·이미지 빌드·권한 유지·자동화 파이프라인: tar.gz 또는 tar.zst
  • 저장 공간 극대화, 릴리스 아티팩트 최소화: tar.xz 또는 고레벨 zstd
  • 수십 GB 로그를 병렬 압축: pigz 또는 zstd

마무리 요약

ZIP은 사용성과 호환성이 뛰어나며, 개별 파일 접근이 빠르다. TAR는 메타데이터와 스트리밍 친화성이 강점이고, GZ는 이를 압축해 효율을 끌어올린다. 협업 환경과 성능·압축률 요구사항을 기준으로 ZIP, tar.gz, tar.zst, tar.xz 가운데 적합한 조합을 선택하면 된다.