ToolActToolAct

ZIP 압축 해제

ZIP 압축 파일을 업로드하여 파일 미리보기 및 추출, 개별 다운로드 또는 일괄 압축 해제 지원

ZIP 파일 업로드

ZIP 파일을 여기에 드래그하거나 클릭하여 선택하세요

.zip 형식의 압축 파일 지원

ZIP 압축 해제란?

ZIP 압축 해제는 아카이브를 열어 그 안에 저장된 파일을 복원하는 과정입니다. 압축된 패키지를 받았을 때 전체를 받기 전에 내용을 확인하거나, 묶음에서 필요한 파일만 꺼내거나, 파일명과 크기를 확인하고 싶을 때 유용합니다. 일반 파일에서 ZIP 해제는 무손실이므로 꺼낸 내용은 압축 전과 같아야 합니다. 하지만 압축을 푼다고 해서 알 수 없는 파일이 안전해지는 것은 아닙니다. 아카이브에는 헷갈리는 파일명, 예상치 못한 폴더, 해제 후 매우 커지는 데이터, 바로 열면 안 되는 실행 파일이 포함될 수 있습니다. 이 브라우저 도구는 로컬에서 ZIP을 읽고 선택한 파일을 다운로드하게 해 주지만, 의심스러운 압축 파일에 대한 보안 검토를 대신하지는 않습니다.

사용 방법

사용 방법

  1. ZIP 파일을 업로드 영역에 끌어다 놓거나 'ZIP 파일 선택' 버튼을 클릭하세요
  2. 압축 파일 내부의 파일 목록과 정보를 확인하세요
  3. 단일 파일 옆 '다운로드'를 클릭하면 해당 파일만 추출됩니다
  4. '모두 추출'을 클릭하면 모든 파일이 ZIP으로 다운로드됩니다

추출 안전 수칙

  • 출처를 알 수 없는 압축 파일의 경우, 추출된 항목을 다운로드하기 전에 파일 목록을 반드시 확인하세요.
  • 실행 파일, 중첩된 압축 파일, 의심스러운 파일명에는 각별히 주의하세요.

활용 사례

압축 해제 전에 ZIP 내용 미리 확인.zip 파일을 드롭하면 파일 유형 아이콘, 확장 가능한 폴더, 계산된 파일 크기가 포함된 정렬된 폴더 트리를 생성합니다. 개별 파일을 다운로드하기 전에 아카이브에 예상한 문서, 에셋, 코드가 포함되어 있는지 빠르게 확인할 수 있습니다. 리더는 파일 끝의 End of Central Directory 레코드를 읽어 중앙 디렉토리를 찾으므로, 우연히 잘리거나 추가되었지만 유효한 EOCD 마커로 끝나는 .zip은 일부 로컬 헤더가 손상되었더라도 선언된 항목을 표시합니다.
실제로 필요한 파일만 다운로드파일 하나, 폴더 전체, 여러 중첩 항목 또는 아카이브 내 모든 항목을 선택한 뒤 선택한 파일을 브라우저에서 다운로드하세요. 선택 로직은 폴더를 포함된 파일로 확장하므로, 큰 아카이브에서 필요한 항목 몇 개만 추출할 수 있습니다.
브라우저 측 압축 해제로 가벼운 아카이브 검토JSZip은 아카이브를 로컬에서 읽고, 압축 해제된 각 파일은 개별 브라우저 다운로드로 처리됩니다. 일괄 압축 해제는 원본 폴더 트리를 디스크에 재현하거나 새 ZIP을 생성하지 않으므로, 전체 백업 복원보다는 검토, 분류, 소규모 파일 회수 작업에 적합합니다.
압축 해제 전에 의심스러운 파일명 식별report.pdf.exe 같은 이중 확장자, 숨겨진 시스템 파일, `..` 세그먼트로 디렉토리를 이탈하려는 경로가 있는지 파일 목록을 확인하세요. 출처가 익숙해 보여도 알 수 없는 아카이브는 신뢰하지 말고, 실행 가능한 파일은 열기 전에 백신으로 검사하세요. 범용 플래그 비트 11이 설정된 파일명은 UTF-8로 저장되므로 비 ASCII 이름이 올바르게 디코딩되지만, 플래그가 없으면 모지바케(깨진 문자)가 나타날 수 있으며 이 자체가 변조 또는 재패키징된 아카이브의 단서가 됩니다.
나머지를 다운로드하지 않고 백업 ZIP에서 설정 파일 하나만 추출폴더 트리를 탐색하고, 원하는 config.json이나 인증서만 선택하여 해당 항목만 다운로드하세요. 수 기가바이트 백업에서 필요 없는 부분의 대역폭을 소모하지 않고 분실된 파일 하나를 빠르게 복구하는 방법입니다. 4GB를 초과하는 아카이브는 ZIP64 확장에 의존하며, 이 도구는 비압축 크기, 압축 크기, 로컬 헤더 오프셋에 대한 ZIP64 확장 필드를 읽으므로 클래식 32비트 제한을 초과하는 백업에서도 단일 파일 복구가 가능합니다.

기술 원리

ZIP 아카이브의 읽기는 쓰기의 역순으로 진행됩니다. 브라우저는 File API(`file.arrayBuffer()`)를 통해 파일을 `ArrayBuffer`로 받고, 리더는 파일 끝에서부터 역방향으로 End of Central Directory 시그니처 `0x06054b50`(PK\x05\x06)를 스캔합니다. EOCD는 최대 22바이트에 최대 65,535바이트의 선택적 주석이 더해질 수 있으므로 스캔 범위가 제한됩니다. EOCD는 Central Directory의 오프셋과 크기를 가리키며, Central Directory에는 각 엔트리마다 하나의 File Header(`0x02014b50`)가 있습니다. 각 File Header에는 압축 크기, 비압축 크기, CRC-32, 압축 방식, 파일명, 그리고 대응하는 Local File Header(`0x04034b50`)의 오프셋이 기록됩니다. 이렇게 하면 이전 엔트리를 파싱하지 않고도 특정 엔트리에 직접 접근할 수 있어, 수 GB 백업에서 단일 파일 추출이 빠릅니다. 압축 해제는 메서드 바이트에 따라 달라집니다: `0x00`은 저장(압축 없음, memcpy만), `0x08`은 RFC 1951의 DEFLATE(실제 아카이브의 약 99%), `0x0C`는 BZIP2, `0x0E`는 LZMA, `0x5D`는 구형 PPMd입니다. 이 도구는 JSZip을 사용합니다(더 높은 처리량을 위해 fflate도 가능 - fflate의 `unzipSync`는 일반적인 10MB DEFLATE 아카이브를 수십 밀리초 만에 디코딩하며, JSZip보다 수 배 빠릅니다). 압축 해제 후 원시 바이트의 CRC-32를 재계산하여 Central Directory의 값과 비교하고, 불일치하면 손상 또는 변조를 나타냅니다. 모든 추출 코드 경로에 두 가지 보안 문제가 있습니다. 첫째는 Zip Slip 취약점(Snyk, 2018)입니다. 악성 아카이브에 `../../etc/passwd` 같은 경로 탐색 시퀀스가 포함될 수 있으며, naive한 추출기가 엔트리 이름을 대상 디렉토리에 결합하면 의도된 샌드박스 밖에 쓰게 됩니다. 해결 방법은 결합된 경로를 `path.resolve()`로 정규화하고 쓰기 전에 대상 디렉토리로 시작하는지 검증하는 것입니다. 이 도구는 각 엔트리를 `URL.createObjectURL(new Blob([bytes]))`를 통해 개별 브라우저 다운로드로 제공하며, 브라우저가 대상을 샌드박싱하므로 디렉토리 탐색이 사용자 Downloads 폴더를 벗어날 수 없습니다. 하지만 서버 측 추출기에서는 동일한 아카이브가 악용될 수 있습니다. 둘째, 암호화된 아카이브는 처리하지 않습니다: 전통적인 ZipCrypto는 3바이트 known-plaintext 공격으로 쉽게 깨지는 32비트 스트림 암호이고, 최신 WinZip AES-256(PKWARE APPNOTE 7.0)은 HMAC-SHA1 인증이 필요한 AE-2 추가 필드를 요구합니다 - 둘 다 여기서는 구현되지 않았습니다. 4GiB를 초과하는 아카이브는 ZIP64 확장의 추가 필드에 의존하여 64비트 크기와 오프셋을 사용하며, 파서가 32비트 Central Directory 필드 대신 이를 읽어야 합니다.

  • 파싱 순서: 파일 끝에서부터 EOCD 시그니처 `0x06054b50` 역방향 스캔 (끝에서 최대 22 + 65535바이트) → Central Directory로 이동 → 각 Local File Header로 이동.
  • 압축 방식: `0x00` 저장, `0x08` DEFLATE (RFC 1951, 아카이브의 약 99%), `0x0C` BZIP2, `0x0E` LZMA, `0x5D` PPMd.
  • 무결성: IEEE 802.3 다항식 `0xEDB88320`(역순) 기반 CRC-32를 추출된 바이트에 재계산하고 Central Directory 값과 비교.
  • Zip Slip (Snyk 2018): `../` 경로 탐색이 포함된 엔트리가 추출 디렉토리 밖에 쓸 수 있음. 해석된 경로를 정규화하고 쓰기 전에 검증하여 수정.
  • 브라우저 구현: `File.arrayBuffer()` → JSZip / fflate `unzipSync()` → 엔트리별 `URL.createObjectURL(new Blob([bytes]))`로 다운로드, 서버 왕복 없음.
  • 암호화 미처리: ZipCrypto는 known-plaintext 3바이트로 깨짐; WinZip AES-256 (APPNOTE 7.0, HMAC-SHA1이 있는 AE-2 추가 필드)은 여기서 구현되지 않음.
  • ZIP64 (APPNOTE 4.5+)는 32비트 크기/오프셋 필드를 추가 필드를 통해 64비트로 확장. 4GiB(2^32 - 1바이트) 초과 아카이브 또는 단일 엔트리에 필요.

예시

압축 파일 내용 보기

압축 해제 소프트웨어를 설치하지 않고도 브라우저에서 ZIP 압축 파일의 파일 목록을 바로 확인

단일 파일 추출

전체를 압축 해제하지 않고 압축 파일에서 필요한 파일만 다운로드

일괄 추출

한 번의 클릭으로 압축 파일 내 모든 파일을 추출하고 다운로드

자주 묻는 질문

압축 해제를 위해 ZIP이 업로드되나요?

아니요. 페이지는 FileReader API로 ZIP을 로컬에서 읽고 JSZip을 사용해 브라우저 내에서 항목을 압축 해제합니다. 파일은 기기 밖으로 나가지 않으며, 추출 중 네트워크 탭에서 직접 확인할 수 있습니다.

어떤 ZIP 변형을 지원하나요?

가장 일반적인 변형인 DEFLATE 압축을 사용하는 표준 ZIP 파일을 지원합니다. Stored(비압축) 항목도 처리됩니다. ZIP64(4GB 초과 아카이브)는 대부분의 빌드에서 지원합니다. 암호화된 항목(비밀번호 보호)과 7Z, RAR, TAR은 지원하지 않으니 전용 도구를 사용하세요.

비밀번호가 걸린 ZIP도 풀 수 있나요?

일반적으로 불가능합니다. JSZip은 ZipCrypto 또는 AES로 암호화된 항목을 처리하지 않습니다. 데스크톱에서 7-Zip이나 WinRAR로 먼저 복호화한 뒤, 구조를 살펴보고 싶다면 다시 패킹해 여기에 올리세요.

ZIP 안에 한글이나 일본어 파일명이 있다면요?

페이지는 기본적으로 파일명을 UTF-8로 읽습니다. 오래된 Windows에서 만든 ZIP은 UTF-8 플래그를 켜지 않은 채 파일명을 GBK(중국어)나 Shift_JIS(일본어)로 저장하기도 하는데, 이런 경우 글자가 깨져 보입니다. UTF-8을 지원하는 도구로 ZIP을 다시 만들거나, 데스크톱 7-Zip에서 적절한 코드 페이지를 설정해 풀어주세요.

파일 크기 한도는 얼마인가요?

브라우저 메모리에 따라 결정됩니다. 최신 데스크톱은 1GB 이상의 ZIP도 처리할 수 있지만, 모바일 브라우저는 수백 MB 정도에서 메모리가 부족해집니다. 매우 큰 아카이브에는 디스크에서 스트리밍하는 데스크톱 도구를 쓰세요.

압축을 풀지 않고 내용을 미리 볼 수 있나요?

텍스트 파일은 가능합니다. 항목을 클릭하면 내용이 표시됩니다. 이미지는 썸네일로 미리 보이고, 바이너리 항목(실행 파일, 안에 든 또 다른 ZIP 등)은 메타데이터만 보이므로 살펴보려면 다운로드해야 합니다.

도트 파일과 숨김 파일도 추출되나요?

네. ZIP에는 '숨김' 속성이라는 개념이 없으며 모든 항목이 그대로 보입니다. .gitignore, .env처럼 점으로 시작하는 파일명도 일반 파일과 동일하게 추출되니 평범한 파일로 다루면 됩니다.