묶기와 압축은 같은 일이 아닙니다
“압축 파일”이라는 말 아래에는 서로 다른 두 가지 작업이 뒤섞여 있습니다. 묶기는 여러 파일을 이름과 폴더 구조를 유지한 채 하나의 파일에 담는 것이고, 압축은 바이트를 더 작게 만드는 것입니다. TAR는 묶기만 합니다. .tar 파일의 용량은 안에 든 파일을 모두 더한 크기와 같습니다. Gzip은 압축만 하며, 그것도 한 번에 하나의 스트림만 처리합니다. 그래서 먼저 묶고 그 묶음을 압축하는 .tar.gz가 생겼습니다. ZIP은 파일마다 두 가지를 한꺼번에 하고, 안에 무엇이 들었는지 목록을 따로 보관합니다.
이 차이가 형식의 동작 방식을 결정합니다. ZIP은 끝부분에 목록을 저장하고 파일을 하나씩 따로 압축하기 때문에, 10 GB짜리 압축 파일도 목록을 즉시 보여 주고 중간의 파일 하나만 나머지를 건드리지 않고 풀 수 있습니다. 저희 ZIP 리더가 바로 이렇게 동작해서, 무언가를 요청하기 전까지는 아무것도 압축을 풀지 않습니다. 솔리드 압축 파일은 모든 내용을 하나의 연속된 스트림으로 압축하므로 파일 경계를 넘나드는 반복까지 찾아내 결과가 더 작아지며, 소스 코드나 로그처럼 비슷한 작은 파일이 많을 때는 훨씬 작아지기도 합니다. 대신 중간에 있는 파일 하나에 가볍게 접근할 방법이 없어서, 그 앞의 내용을 모두 먼저 풀어야 합니다. TAR.GZ는 태생적으로 솔리드이고, 7z는 솔리드 블록 단위로 압축하며, RAR는 여기서 목록이 아니라 처음부터 끝까지 읽어서 처리합니다.
이미 압축된 내용은 다시 압축되지 않습니다. JPEG, PNG, MP3, MP4, PDF와 최신 Office 파일은 모두 압축이 내장되어 있어서, deflate가 시간을 들여도 얻는 것이 없고 오히려 몇 바이트가 늘어나기도 합니다. 사진 폴더를 ZIP으로 묶어도 폴더와 같은 크기로 나오는 이유가 이것이고, 그래서 많은 분들이 도구가 고장 났다고 생각합니다. ZIP 파일 만들기는 이런 형식을 알아보고 압축하는 척하지 않고 그대로 저장합니다. 사진은 순식간에 끝나고 텍스트는 시간이 걸리는 이유입니다.
압축 파일이 담는 메타데이터는 디스크의 메타데이터와 다릅니다. ZIP은 수정 시각을 MS-DOS 형식으로 저장하는데, 이 형식은 2초 단위이고 1980년 이전이나 2099년 이후 날짜를 표현하지 못합니다. 여기서는 이 범위를 벗어난 날짜 때문에 압축 파일 전체가 실패하지 않도록 범위 안으로 맞춥니다. 날짜가 0으로 기록된 RAR를 변환하다가 실제로 겪은 버그입니다. TAR는 Unix 권한, 소유자, 심볼릭 링크를 저장합니다. 브라우저는 이 중 어느 것도 디스크에서 읽거나 다시 쓸 수 없기 때문에, TAR 파일 만들기는 적절한 기본 권한을 기록하고, 저희 압축 풀기 도구는 권한과 링크를 복원하지 않고 목록으로 보여 줍니다. 넣은 그대로 되돌려야 하는 백업이라면 해당 컴퓨터에서 tar로 직접 만들고 복원해야 합니다.
ZIP 암호화는 두 종류이고, 쓸 만한 것은 하나뿐입니다. 원래의 ZipCrypto 방식은 장식에 불과할 만큼 뚫려 있어서, 알려진 평문 공격으로 평범한 하드웨어에서도 몇 초 만에 내용이 복구되는데도 대부분의 프로그램이 여전히 기본값으로 제공합니다. 나중에 추가된 AES-256은 진짜 암호화이며 깨지지 않습니다. 여기서는 어느 것도 제공하지 않습니다. 뚫린 방식은 내놓지 않을 것이고, 최신 방식은 허용적 라이선스로 쓸 수 있는 브라우저 기본 구현이 없기 때문입니다. 어느 쪽이든 알아 둘 점이 있습니다. ZIP은 파일 이름을 절대 암호화하지 않으므로, 암호화된 압축 파일의 목록은 누구나 읽을 수 있습니다. “Invoices/2024/Settlement-confidential.pdf”는 비밀번호 없이도 보입니다.
압축 파일은 여는 프로그램을 내용물로 공격할 수 있는 유일한 종류의 파일입니다. 안에 든 파일 이름을 “../../.bashrc”로 지어 풀리는 폴더 밖으로 빠져나갈 수 있고, 몇 KB짜리 파일을 테라바이트 단위로 부풀도록 만들어 탭을 다운시킬 수도 있습니다. 두 가지 모두 화면에 무언가 보이기 전에 처리됩니다. 상위 폴더로 올라가는 경로, 절대 경로, Windows 드라이브 문자, 예약된 장치 이름, 확장자를 숨기는 보이지 않는 문자 같은 악의적인 이름은 안전하게 고쳐지고 고친 내역이 모두 표시됩니다. 부풀어 오르는 비율은 측정해서, 시도하지 않고 거부합니다. 압축 파일 안의 심볼릭 링크는 표시만 하고 절대 따라가지 않습니다.
브라우저가 정말 맞지 않는 경우
이 도구들은 압축 파일을 비공개로 지키기 위해 만들어졌고, 그 대가가 있습니다. 작업 도중에 알게 되시는 것보다 여기서 미리 말씀드리는 편이 낫습니다.
매우 큰 압축 파일. 모든 것을 기기 메모리에 올리기 때문에, 한계는 요금제가 아니라 탭의 메모리입니다. 큰 ZIP의 목록 보기는 목록만 따로 읽으므로 가볍지만, 압축 풀기는 그렇지 않습니다. 수 GB짜리 압축 파일은 휴대폰에서는 버거워하고 노트북에서도 실패할 수 있습니다. 7-Zip, GNU tar, bsdtar는 디스크에서 스트리밍으로 처리하므로 파일 크기에 구애받지 않습니다.
RAR나 7z 만들기. 둘 다 여기서는 불가능하며, 이유는 서로 다릅니다. RAR 압축은 독점 기술이고, 이를 만들 수 있는 유일한 코드의 라이선스가 다른 압축 프로그램 제작에 쓰는 것을 금지합니다. 그래서 어떤 브라우저 도구도 정직하게 RAR 만들기를 제공할 수 없으며, ZIP RAR 변환 페이지는 바로 이 점을 설명하려고 있습니다. 7z는 독자적으로 작성된 구현 덕분에 읽기는 가능했지만, 쓰기에는 아직 그런 방법이 없습니다. 둘 중 하나가 필요하다면 RAR는 WinRAR로, 7z는 7-Zip으로 만드세요. 7-Zip은 무료이고 이 작업에서는 어떤 웹 페이지보다 낫습니다.
암호화된 모든 것. 비밀번호로 보호된 압축 파일은 만들 수도, 열 수도 없습니다. 만드는 데는 AES-256을 쓰는 7-Zip이 무료 해답이며, 어떤 웹 페이지보다 나은 장점이 하나 더 있습니다. 비밀번호를 인터넷의 입력란이 아니라 직접 설치한 프로그램에 입력한다는 점입니다.
원본 그대로의 백업. 권한, 소유자, 심볼릭 링크와 하드 링크, 확장 속성, 스파스 파일, 정확한 타임스탬프가 바로 백업의 목적인데, 브라우저는 이 중 어느 것에도 접근할 수 없습니다. GNU tar와 bsdtar는 무료이고 macOS와 Linux에 이미 설치되어 있으며, 이 작업에 맞는 도구입니다.
자동화와 최대 압축. 이 도구들은 사람이 클릭할 때 동작합니다. 매일 밤 디렉터리를 압축하는 일은 명령줄의 몫이며, tar, zip, 7z, zstd 모두 무료입니다. 용량이 가장 중요하다면, deflate는 1990년대 알고리즘입니다. 높은 레벨의 zstd나 xz는 같은 파일의 ZIP보다 훨씬 작게 만들지만, 받는 사람이 열지 못하는 형식일 수 있다는 대가가 따릅니다.
비슷해 보이는 도구 중에서 고르기
ZIP 압축 풀기 vs RAR 압축 풀기 vs 7Z 압축 풀기 vs TAR 압축 풀기. 실제로는 어느 페이지에 들어오셨든 상관없습니다. 모두 확장자가 아니라 처음 몇 바이트로 파일을 식별하므로 네 페이지 모두 모든 형식을 열고, 파일이 실제로 어떤 형식이었는지도 알려 줍니다. 메일 필터를 피하려고 .zip으로 이름을 바꾼 RAR가 흔하기 때문에 중요한 점입니다. 실제로 차이가 나는 것은 페이지가 아니라 형식입니다. ZIP은 목록 덕분에 즉시 내용을 보여 주지만, RAR는 안에 무엇이 들었는지 알려면 한 번 처음부터 끝까지 읽어야 합니다.
ZIP 파일 만들기 vs TAR 파일 만들기. 사람이 열 파일이라면 ZIP입니다. 아무것도 설치하지 않은 어떤 컴퓨터에서도 열립니다. 기계나 Linux 사용자가 열 파일이거나, 비슷한 작은 파일이 많다면 TAR.GZ입니다. 이런 경우 묶음을 하나의 스트림으로 압축하는 쪽이 파일을 하나씩 압축하는 것보다 확실히 작습니다. 압축하지 않는 일반 TAR는 내용이 이미 압축되어 있거나 이후 단계에서 압축을 맡을 때만 고를 만합니다.
RAR ZIP 변환 vs ZIP RAR 변환. 하나는 변환이고 다른 하나는 설명입니다. RAR ZIP 변환은 실제로 RAR를 읽어 ZIP을 만들며, 파일은 다시 인코딩하지 않고 바이트 그대로 옮겨집니다. ZIP RAR 변환은 왜 아무도 그 작업을 할 수 없는지 알려 주는 페이지입니다. 이 페이지가 없으면 그 검색어는 파일을 자기 서버로 가져가거나 이름만 바꾼 ZIP을 건네는 사이트들 차지가 되기 때문입니다.
ZIP 파일 만들기 vs 용량을 줄이려고 압축하기. 두 목적은 같지 않습니다. 보내기 위해 여러 파일을 하나로 묶는 것은 어떤 파일에나 통합니다. 큰 파일을 작게 만드는 것은 대개 통하지 않습니다. 사람들이 줄이고 싶어 하는 큰 파일, 즉 동영상, 사진, PDF는 이미 압축되어 있기 때문입니다. 이런 파일에는 이 사이트의 이미지, 동영상, PDF 용량 줄이기 도구가 내용을 다시 인코딩하며, 실제로 용량을 줄이는 방법은 이것뿐입니다.