ZIP 파일 압축
여러 파일을 ZIP 압축 파일로 패키징, 드래그 앤 드롭 업로드 지원, 브라우저 로컬 처리
파일을 여기에 드래그하거나 클릭하여 선택하세요
모든 파일 형식 지원, 여러 파일 업로드 가능
ZIP 압축이란?
ZIP 압축은 선택한 여러 파일을 하나의 다운로드 가능한 아카이브로 묶는 작업입니다. 여러 파일을 함께 보내거나, 전달용 패키지를 만들거나, 스크린샷을 정리하거나, 이메일에 여러 문서를 첨부하거나, 작은 백업을 만들 때 유용합니다. ZIP은 무손실 아카이브 형식이므로 압축을 풀면 원본 파일이 그대로 복원되어야 합니다. 다만 JPG, PNG, MP4, PDF처럼 이미 압축된 형식은 크기가 크게 줄지 않을 수 있습니다. 이 브라우저 도구는 로컬에서 ZIP을 만들기 때문에 선택한 파일을 서버에 업로드할 필요가 없습니다. 중간 규모의 파일 묶음에 적합하며 매우 큰 파일은 메모리를 많이 사용할 수 있습니다. ZIP 압축은 암호화가 아니므로 민감한 파일은 별도의 비밀번호 보호나 보안 절차가 필요합니다.
사용 방법
사용 방법
- 업로드 영역에 파일을 드래그하거나 '파일 선택' 버튼을 클릭해 추가하세요
- 파일 목록을 확인하고 필요 없는 파일은 제거하세요
- ZIP 파일 이름을 입력하세요(선택 사항)
- 'ZIP 아카이브 만들기' 버튼을 클릭하면 압축 파일이 다운로드됩니다
아카이브 참고사항
- 아카이브를 만들기 전에 파일 이름과 폴더 구조를 검토하세요. ZIP은 경로를 그대로 보존하므로 의도하지 않은 파일명이 노출될 수 있습니다.
- 장기 보관하거나 다른 시스템과 공유할 때는 파일명에 지원되지 않는 문자가 없는지 확인하세요.
활용 사례
기술 원리
ZIP 컨테이너는 PKWARE의 APPNOTE 사양(현재 개정판 6.3.10)으로 정의됩니다. `.zip` 파일은 세 가지 레코드 타입의 시퀀스입니다. 각 저장 파일 앞에는 4바이트 시그니처 `0x04034b50`(PK\x03\x04)의 Local File Header가 오고, 그 뒤에 압축 데이터가옵니다. 마지막 파일 이후에는 Central Directory(File Header 시그니처 `0x02014b50`)가 있으며, 각 엔트리의 이름, 크기, CRC-32, 로컬 헤더 오프셋을 기록하는 테이블입니다. 마지막으로 End of Central Directory 레코드(시그니처 `0x06054b50`)가 파일 맨 끝에 위치하며, Central Directory의 시작 위치를 가리킵니다. 리더는 `.zip`을 뒤에서부터 파싱합니다: 파일 끝에서부터 EOCD 시그니처를 역방향 스캔하고, Central Directory로 이동한 뒤 각 로컬 헤더로 이동합니다. 이것이 ZIP이 스트리밍 추가와 전체 아카이브를 읽지 않고도 단일 엔트리에 빠르게 무작위 접근할 수 있는 이유입니다. 이 도구는 브라우저에서 아카이브를 조립하기 위해 JSZip 라이브러리를 사용합니다(더 빠른 대안으로 fflate도 가능). 사용자가 선택한 각 `File` 객체는 `ArrayBuffer`로 읽히고, `zip.file(name, buffer)`로 추가된 뒤, `zip.generateAsync({ type: 'blob', compression: 'DEFLATE', compressionOptions: { level: 6 } })`가 `Blob`을 생성하여 `URL.createObjectURL()`를 통해 다운로드로 제공됩니다. DEFLATE는 RFC 1951에 정의된 표준 ZIP 압축 방식으로, LZ77 슬라이딩 윈도우 사전 매칭과 Huffman 코딩을 결합합니다. 압축 레벨 6(기본값)은 균형점입니다. 레벨 1은 약 4배 빠르지만 5~15% 크고, 레벨 9는 6보다 2~3배 느려서 보통 1~2% 정도만 추가로 줄어듭니다. 무결성은 IEEE 802.3 다항식 `0xEDB88320`(역순)으로 계산된 CRC-32로 보장되며, 로컬 파일 헤더와 Central Directory 엔트리 양쪽에 저장됩니다. 파일명은 범용 플래그 비트 11이 설정되면 UTF-8로 기록됩니다(APPNOTE 6.3.0, 2006부터 필수). 이 플래그가 없으면 이전 도구가 로컬 OEM 코드 페이지(DOS의 CP437, 중국어 Windows의 CP936/GBK)를 사용하여 비 ASCII 이름이 깨집니다. 클래식 ZIP 형식은 크기와 오프셋에 32비트 필드를 사용하여 단일 엔트리와 전체 아카이브를 약 4GiB(2^32 - 1 = 4,294,967,295바이트)로 제한합니다. APPNOTE 4.5+에 정의된 ZIP64는 추가 필드를 통해 64비트로 확장하지만, JSZip의 인메모리 빌드는 탭 메모리가 부족해지기 전에 실질적인 아카이브 크기를 수백 MB로 제한합니다.
- ZIP 파일 구조 (PKWARE APPNOTE 6.3.10): Local File Header (`0x04034b50`) + 파일 데이터, 그 다음 Central Directory (`0x02014b50`), 마지막에 EOCD (`0x06054b50`).
- 리더는 끝에서부터 파싱: EOCD 시그니처를 역방향 스캔한 뒤 Central Directory로 이동 - 전체 아카이브를 스트리밍하지 않고도 빠른 단일 파일 추출 가능.
- DEFLATE 압축 (RFC 1951) = LZ77 슬라이딩 윈도우 사전 + Huffman 코딩. 레벨 6이 기본 균형점, 레벨 9는 약 1~2% 더 작아지는 대신 2~3배 느림.
- 무결성: IEEE 802.3 다항식 `0xEDB88320`(역순) 기반 CRC-32를 로컬 헤더와 Central Directory 양쪽에 저장. 추출 시 검증.
- UTF-8 파일명은 범용 플래그 비트 11(APPNOTE 6.3.0, 2006)이 필요. 없으면 이전 도구가 CP437/로컬 OEM 페이지로 폴백하여 비 ASCII 이름이 깨짐.
- 클래식 ZIP은 파일당, 아카이브당 크기를 2^32 - 1 = 4,294,967,295바이트로 제한. ZIP64 추가 필드(APPNOTE 4.5+)는 64비트로 확장하여 더 큰 파일 처리 가능.
- 브라우저 구현: JSZip / fflate가 각 `File`을 `arrayBuffer()`로 읽고, 메모리에서 아카이브를 빌드한 뒤 `Blob` 다운로드로 스트리밍 - 서버 업로드 불필요.
예시
프로젝트 파일 패키징
입력: src/, package.json, README.md (수십 개의 파일)
출력: project-2026-06-11.zip (단일 아카이브, deflate 압축)
용도: 팀원과 스냅샷 공유 또는 릴리스에 첨부여러 파일 전송 (오버헤드 감소)
입력: 작은 이미지 100개, 각 5-50 KB (총 ≈ 3 MB)
출력: photos.zip (단일 파일, HTTP 요청 1회, 파일별 오버헤드 없음)
용도: 파일별로 과금하는 이메일이나 스토리지 서비스에 다수의 작은 파일을 업로드할 때문서 정리
입력: invoice.pdf, contract.docx, signed-acknowledgement.png
출력: documents-2026Q2.zip
용도: 세무, 법무, HR 기록을 보관 정책에 따라 날짜별 단일 아카이브로 묶기자주 묻는 질문
ZIP을 만들 때 데이터가 업로드되나요?
아니요. ZIP 파일은 JSZip을 사용해 브라우저에서 생성됩니다. 원본 파일은 FileReader API로 읽고 로컬에서 압축한 뒤 다운로드 형태로 제공됩니다. 어떤 데이터도 네트워크로 나가지 않습니다.
어떤 압축 레벨이 사용되나요?
기본값은 DEFLATE 레벨 6으로, 대부분의 ZIP 도구가 사용하는 속도와 용량의 균형점입니다. 텍스트 위주 콘텐츠(로그, JSON, 소스 코드)는 잘 압축되지만 이미 압축된 콘텐츠(JPEG, MP4, ZIP)는 거의 줄지 않습니다.
비밀번호를 걸 수 있나요?
JSZip은 암호화된 ZIP 항목을 지원하지 않습니다. 빌드에 비밀번호 보호 기능이 있더라도 보통 ZipCrypto 방식인데, 이는 안전하지 않은 것으로 알려져 수십 년 전부터 깨져 있습니다. 실제 비밀번호 보호가 필요하다면 데스크톱의 7-Zip에서 AES-256을 사용하세요.
파일 개수와 용량 한도는 어느 정도인가요?
현실적인 한도는 브라우저 메모리입니다. 합쳐서 수백 MB 정도까지는 대부분의 데스크톱에서 잘 동작합니다. 모바일 브라우저는 한도가 더 좁습니다. 아주 큰 패키징 작업에는 디스크에서 스트리밍하는 데스크톱 도구(7-Zip, WinRAR, 명령줄 zip)를 쓰세요.
폴더 구조가 유지되나요?
네. 파일 시스템에서 폴더를 통째로 드래그하면 ZIP 내부에 상대 경로가 그대로 보존됩니다. 페이지에서 트리 뷰로 구조를 미리 확인한 뒤 생성할 수 있는 경우도 있습니다.
Windows, macOS, Linux 모두에서 정상적으로 열리나요?
네. JSZip은 표준 ZIP 파일을 만듭니다. UTF-8 파일명은 최신 환경에서는 어디서나 잘 동작하며, 아주 오래된 Windows에서는 코드 페이지가 UTF-8이 아닐 경우 한글이나 일본어 파일명이 깨져 보일 수 있습니다. 최신 macOS와 Linux는 항상 UTF-8을 올바르게 처리합니다.
ZIP과 7Z의 차이는 무엇인가요?
ZIP은 DEFLATE 압축을 사용하며 모든 OS에서 보편적으로 읽을 수 있습니다. 7Z는 LZMA/LZMA2를 사용해 텍스트에서 훨씬 좋은 압축률을 얻지만, 압축 해제에는 7-Zip 또는 호환 소프트웨어가 필요합니다. 본 페이지는 ZIP만 출력합니다.