개발에 앞에서 파일 압축 용어나 개념에 대해 한번 정리하고 가야 된다는 생각이 들었습니다.
용어가 헷갈려서
지금도 제가 압축/압축해제 프로그램을 목표로 하는지,
아니면 ZIP 압축/압축해제 프로그램을 만드는 것을 목표로 하는지 모르겠습니다.😭
개발에 들어가기에 앞서 아카이브, 압축, 압축포맷, ZIP, 압축 알고리즘등 용어등을 한번 정리해 보겠습니다.
아카이브와 압축
저는 아카이브와 압축이 같은 의미인지 알았습니다.
하지만 두 용어는 다른 개념입니다.
- 아카이브: 여러 파일을 모아서 하나의 파일로 만들기
- 압축: 압축 알고리즘을 적용하여 파일의 크기를 작게 만들기
여러 파일을 모아서 하나의 ZIP 파일을 만들면 뭉뚱거려서 압축한다고 표현하는데,
엄밀히 말하면 아카이빙을 한 것입니다. (Packing이라고 표현하기도 하더라구요.)
하지만 보통 여러 개의 파일을 하나의 파일로 합칠 때 파일 압축을 필수로 하니, 관례적으로 아카이빙 한다는 게 압축한다는 용어로 바뀐 것 같습니다.
압축의 종류
파일 압축은 디지털 콘텐츠의 용량을 줄이는 것입니다.
압축은 크기 2가지로 분류할 수 있습니다.
- 손실 압축
- 무손실 압축
손실 압축은 사진, 음악, 동영상 등에서 주로 사용하고,
무손실 압축은 파일 등을 압축할 때 사용합니다. (물론 이미지나 음악등을 무손실 압축을 할 수 있습니다. ex. PNG, FLAC)
압축 포맷
압축 포맷은 여러 가지가 존재합니다.
- ZIP
- 7z
- tar (아카이브)
- gz
- rar
- ...
등 여러 가지의 포맷이 존재합니다.
각 압축 포맷은 내부적으로 다양한 압축알고리즘(대표적으로 Deflate)등을 사용하여 파일을 압축하여 압축에 걸리는 시간이나 압축률은 상이합니다.
ZIP 이란?
ZIP은 대표적인 압축 포맷입니다.
무손실 압축 포맷으로 필 캐츠라는 개발자가 1989년에 만들었습니다.
ZIP 포맷은 압축 없이 하나의 파일로 합치는 아카이빙을 하고, 여기에 Deflate 알고리즘등을 사용해 압축을 할 수 있습니다.
압축에 사용되는 알고리즘은 원래 Deflate 알고리즘만 지원했지만, 이후 LZMA 같은 최신 압축 알고리즘도 지원하기 시작했습니다.
ZIP의 스펙은 ZIP의 개발사인 PKWARE에서 찾을 수 있습니다. (영어문서인 것은 함정)
https://pkwaredownloads.blob.core.windows.net/pkware-general/Documentation/APPNOTE-6.3.9.TXT
여기에 ZIP 파일의 전체 구조가 나와있어 ZIP 파일을 만들 때 어떤 구조로 만들어야 되는지 알 수 있습니다.
4.3.6 Overall .ZIP file format:
[local file header 1]
[encryption header 1]
[file data 1]
[data descriptor 1]
.
.
.
[local file header n]
[encryption header n]
[file data n]
[data descriptor n]
[archive decryption header]
[archive extra data record]
[central directory header 1]
.
.
.
[central directory header n]
[zip64 end of central directory record]
[zip64 end of central directory locator]
[end of central directory record]
압축 알고리즘
압축 포맷들은 위에서 언급했듯이 Deflate 같은 압축 알고리즘을 사용해서 압축합니다. (Deflate 알고리즘은 필 캐츠가 ZIP 포맷에 사용하기 위해 만들었습니다.)
압축 알고리즘은 많지만 ZIP 포맷에서 지원하는 압축 알고리즘은 다음과 같습니다.
- DEFLATE
- Deflate64
- BZIP2
- LZMA
- IBM z/OS CMPSC (메인프레임용)
- Zstandard
- XZ
- WavPack (오디오)
- PPMd (텍스트)
각 압축 알고리즘에 대해 조사하려면 깊게 들어가야 하기 때문에 이런 게 있다 정도로 일단 정리하고 넘어가겠습니다.
그래서 뭘 만들고 싶은데?
1차 목표로 만들고 싶은 프로그램의 요구사항을 간단히 정리하면
- 여러 개의 파일을 하나의 파일로 모으는 아카이빙을 할 수 있어야 한다. (패킹)
- 하나의 파일을 여러개의 파일로 다시 나누는 아카이빙 해제할 수 있어야 한다. (언패킹)
- 압축 알고리즘을 적용하여 파일을 압축할 수 있어야 한다.
입니다.
이전 포스팅에서는
- Node.js를 사용하여 파일들을 ZIP 파일로 합치고 해제하는 프로그램 작성
이라고 ZIP 포맷을 대상으로 명시했는데, 우선 ZIP 포맷이 아니더라도 압축/압축해제가 되는 프로그램을 작성하는 것을 목표로 하려고 합니다.
'우아한 테크코스 8기 프리코스' 카테고리의 다른 글
| [우테코 8기 프리코스] 오픈 미션 후기 (0) | 2025.11.23 |
|---|---|
| [우테코 8기 프리코스] 오픈 미션 시작 (0) | 2025.11.05 |
| [우테코 8기 프리코스] 3주차 과제 후기 (0) | 2025.11.04 |
| [우테코 8기 프리코스] 1주차 과제 후기 (0) | 2025.10.17 |