카테고리 없음
프로그래밍: 압축 파일 포맷 컨테이너의 특징
키플러
2010. 8. 4. 14:17
* 보통 압축파일이라고 하면 zip, rar 등의 파일을 의미한다. 하지만 압축파일도 동영상 파일등과 마찬가지로 컨테이너+압축 알고리즘으로 구분을 할 수 있다.
예를 들자면 zip 파일 포맷은 보통 deflate 라는 알고리즘을 이용해서 압축을 하지만, 최근에는 bzip2 나 lzma 와 같은 알고리즘도 사용할 수 있다 (확장 정의되었다.)
압축 파일 컨테이너는 압축파일에 대한 정보(헤더) 와 실제 압축된 데이타(알고리즘) 를 파일에 어떻게 집어 넣을것인가 하는 정의를 말한다.
여기서는 압축 알고리즘은 제껴두고 압축 컨테이너의 특징중 생각나는것을 정리해 본다.
* zip: 제일 많이 쓰는 압축 포맷. 특이한 점으로 파일 헤더가 두군데 위치한다는 것이다.
: 헤더1 : 데이타1 : 헤더2 : 데이타2 : ........... 헤더n : 데이타n : 헤더1, 헤더2 ...... 헤더n
즉, 헤더와 데이타가 순서대로 나오다가 맨 마지막에 헤더를 쭉 몰아서 다시한번 더 나열을 하도록 되어 있다. 앞에 헤더는 로컬헤더라고 부르고 뒤에 헤더는 센트럴헤더라고 부르는데 내용은 약간 다르지만 기본적인 내용은 동일하다.
왜 이렇게 만들었을까? 장/단점을 꼽자견
단점: 파일의 크기가 커진다.
장점:
1. 파일을 순차적으로 만들 수 있다. 즉 스트리밍으로만 저장이 가능하거나 할 경우 (네트웍 전송, 테이프 저장장치) 로컬헤더에는 대충 정보를 적어놓고 (압축이 완료되기 전까지는 압축된 크기를 알수가 없다!) 센트럴 헤더에 완벽한 정보를 적는 식으로 만드는게 가능하다.
보통의 압축파일은 이런식으로 스트리밍으로 파일을 만드는게 불가능하지만(압축을 안하는 경우만 가능하다..), zip 파일은 가능하다.
2. 파일 헤더가 뒤쪽에 몰려있기 때문에 파일 헤더분석 시간이 짧어진다. 파일이 한 10기가쯤 되고 파일이 1만개쯤 되면 그 차이를 몸으로 실감할 수 있게 된다.
* rar : 많이 쓰는 압축포맷..
: 헤더1 : 데이타1 : 헤더2 : 데이타2 :.......... 헤더n : 데이타n
rar 도 도스시절부터 만들던 포맷이라서 포맷이 그지같다. 단지 winrar 와 같은 프로그램에서 처리를 잘해주고, 다양한 기능 (분할 압축, 솔리드 압축, 데이타 복원) 을 가지고 있기 때문에 많이 사용하고는 있지만.... 포맷 자체는 오래된 포맷에 계속 추가 기능을 추가한 덕분에 상당히 난해한 포맷이 되어버렸다.
* lzh : 일본에서 만든 포맷
이것도 rar 과 대동소이하게 헤더-데이타가 나열된 구조다. 단지 개발이 중지된 관계로 파일에 암호도 지원하지 않고, 분할압축에 대한 정의도 되어 있지 않다.
* 7zip: 최강의 압축 포맷
최강의 압축알고리즘인 lzma 를 지원할 뿐만 아니라 컨테이너 자체도 최강이다. 보통 다른 컨테이너는 파일 사이즈를 저장하거나 할때 4byte 고정폭으로 저장해서 4GB 이상을 지원 못하던가 하는데, 7zip 은 모든 데이타를 가변폭으로 저장을 하기 때문에 이런 제약도 없고 헤더가 차지하는 크기도 매우 작다
또한 파일 포맷도
헤더 위치 | 파일 데이타 ................................ | 헤더1, 헤더2 ... 헤더 n
과 같이 되어 있다. 즉, 파일정보 헤더가 맨 뒤에 모여있기 때문에 파일 분석도 매우 빠르고, 헤더 크기도 작고, 솔리드 압축등을 처리할때도 유리하다.
단지 단점이라면, 파일의 맨 앞에 헤더의 위치를 저장해야 되기 때문에 스트리밍 형식으로 압축 파일은 만드는것이 불가능하지 않을까.... 싶기도 하고...... (사실 이거는 파일 뒤쪽 뒤져도 되기 때문에 테스트 안해봐서 잘 모르겠다. )
* hv3 : 내가 만든 포맷..
이놈은 특이하게 파일의 맨 앞에만 헤더가 존재한다. 즉
헤더1, 헤더2,...... 헤더 n | 데이타1, 데이타2...................... 데이타n
이런식으로 되어 있다. 장점으로는 파일의 헤더 분석 속도가 빠르고, 스트리밍으로 데이터를 전송받으면서 압축해제가 가능하다는 장점이 있다.
단점으로는 헤더가 앞에 존재하기 때문에 데이타를 압축하거나 할 경우 임시 폴더등에 데이타를 전부 압축한 다음에 다시 묶는 과정등이 필요하게 된다. 즉, 압축 해제는 쉬운데 압축파일 만들기가 지랄 같다.
따라서 일반적인 범용목적으로 사용하고자 만든것이 아니라, 특수 목적 - 스트리밍 적합, 파일 분석 쉬움 - 에 적합한 포맷이다.
헤더는 그 크기가 큰편에 속한다. 이유는 각각의 헤더를 마치 xml 처럼 저장할 수 있도록 만들어 놓았기 때문이다. 따라서 헤더는 일반적인 압축 포맷보다 불필요하게 커지기는 하지만 하위 호완성 및 확장성이 좋게 되어 있다.