상세 컨텐츠

본문 제목

[알집루머] 3. alz, egg포맷, 독점하려고 만든것 아닌가 ??

STORY

by ESTsoft 2012. 1. 4. 11:00

본문


'alz포맷' 왜 만들었나?


> 2001년, 압축프로그램 사용자들의 니즈

2001년 당시, 알집 사용자들이 가장 원했던 기능은 '4GB이상 대용량 압축'과 '분할압축'기능이었습니다. 지금이야 플로피디스크는 커녕 CD도 보기 힘든시대지만, 당시에는 플로피디스크의 용량인 1.44MB로 분할해서 압축하는 경우가 많았었습니다.


> zip파일 포맷의 한계

문제는 당시의 주요압축포맷인 'zip포맷'입니다. 'zip포맷'은 파일 정보 영역에 압축크기 및 원본크기를 4바이트로 저장하게 되어 있는데, 4바이트로 나타낼 수 있는 최대 용량은 2^32인 4GB입니다. 


4GB는 처음 zip포맷이 개발된 1989년 당시에는 충분히 큰 것이었지만, 2000년대 들어서면서부터 멀티미디어 자료의 폭증으로 4GB 이상 데이터를 저장/압축해야 하는 일이 많아졌습니다.(http://en.wikipedia.org/wiki/ZIP_(file_format)#ZIP_file_limitations)

 

> 당시 'zip포맷'의 한계를 극복하고자 새로운 포맷의 개발을 시작

저희는 'zip포맷'을 변형한 포맷을 만들 것이냐, 아니면 새로운 포맷을 만들 것이냐에 대해 많은 고민을 하던 상황이었습니다. 


예를들면, 당시 zip64 등의 zip변형포맷들이 4GB이상의 분할압축을 지원했었습니다. 물론, 압축해제를 할 수 있는 Specification(명세) 또한 공개되었던 것으로 알고 있습니다. 그러나 당시에 이를 지원하지 않는 압축프로그램들이 대다수였기에 zip64 자체를 인식하지 못하는 경우가 많았습니다. zip64로 압축된 파일을 해제하려고 할 경우에, 해당 압축해제 모듈을 지원하지 않는 프로그램들은 '깨졌다'거나 '알수없다'는 등의 메시지가 나올 수 밖에 없었습니다.  또한, 분할압축 방식이 정상적인 규정을 지킨 분할압축 외에, 단순히 압축을 하고 그 압축파일을 일정크기로 나눠서 저장하는 방식이 혼용되는 등 호환성에 문제가 많았습니다.


사용자 입장에서, '고급사용자'라면 이런 압축포맷 스펙의 확장을 인지하고 지원 가능한 툴을 찾을 수 있겠지만 이런 사실을 잘 모르는 다수의 '일반사용자'들의 경우에는 해제를 포기할 수 밖에 없었습니다. 이보다는 '완전히 새로운 포맷을 만들어 그 포맷을 보면 어떤 압축해제툴을 써야하는지 확실히 알 수 있도록 해야겠다'는 것이 alz포맷을 만들게 된 이유입니다.


'alz포맷'관련 내용은 다음과 연결됩니다.


[알집루머] 1. 'alz포맷'은 베껴서 만들어놓고 독자포맷이라 우기고... 비윤리적 기업 이스트소프트??

[알집루머] 2. '알집'은 오픈소스 라이선스를 무시했다 ??



'Unalz'는 왜 공개하지 않았나?


위와 같은 이유로 만들어진 'alz포맷'은 공개하고 난뒤 회사차원에서 빠른시간내에 압축해제를 위한 Unalz의 공개나 관련 라이선스 정책등 이를 서포트하는 노력이 부족했던 사실을 인정합니다. 


미리 준비하지 못하고 안정화되면 진행하려고 작업순위에서 밀리다보니 결국 타이밍을 놓치게 되었습니다.


이런 이유로 인해 독점을 위한 알집이라는 오명을 얻었으며, 많은 분들의 질타를 받았습니다. 당시에 이런 사용자들의 편의를 위한 노력이 부족했던 점, 머리숙여 사과드립니다. 


'alz포맷'이 공개되었을당시에 알집 점유율은 이미 상당한 수준이었습니다. 굳이 새로운 포맷을 공개하여 압축파일 시장을 독점할만한 이유는 없었습니다. 'alz포맷'을 개발하게 된 이유는 위와 같은 이유에서였습니다. 그러나 압축해제를 위한 해제툴의 공개나 라이선스 정책등의 업무순위를 계속 미루다보니 Unalz를 공개하지 못했고, 이로인해 아주 배부르게 욕을 먹었지요. 


하지만 저희가 사용자들 입장에서 생각지 못하고 지원이 빠르지 못했던 점은 결론적으로 사용자분들에게 불편함을 초래했습니다. 이유를 막론하고 저희의 잘못입니다. 당시의 과오를 사과드립니다. 



그렇다면 'egg포맷'은 또 왜 나오게 되었나?


"와...이것들이 alz가 풀리니까 이제는 또 egg만들어내네...이런 무서운놈들!"


그렇게 alz라는 것으로 첫인상이 좋지 않았던 아이가 있는데, 뭘하던간에 이쁘게 보일리가 없는 아이죠. 이 아이도 그 사실을 압니다. 그런데도 읍참마속의 심정으로 또 다른 포맷인 egg를 만들었습니다. 왜? 욕먹을게 뻔한데? 이런짓을!! 그러나 egg라는 아이 ... 괜찮은 아이입니다. 정말 제대로!! 세계적인 포맷으로 키워보고자 최선을 다해 만들었습니다. ('egg포맷'은 현재, 이스트소프트에서 3년간 연구하여 개발한 AZO 자체 알고리즘과 공개된 압축알고리즘인 bzip, DEFLATE, LZMA를 사용하고 있습니다. 향후에 더 추가 될 예정입니다.)


> 8년이라는 시간이 지나면서 확실히 보이는 alz포맷의 단점

'alz포맷'은 설계상 당시의 사용자 니즈(4GB이상 분할압축지원 등)를 반영하는데에 포커싱을 두었습니다. 사용자들이 가장 원하는 기능을 넣는것을 목표로 하다보니 미래의 변화에 대한 유연함이 부족한것이 사실이었습니다. 당시에는 괜찮은 포맷이었을지 모르지만 시간이 지나면서 확장성 부족으로 인해 단점들이 지적되기 시작했습니다. 

 

예를들어, 'alz포맷'은 유니코드에 대한 고려가 충분하지 못했기 때문에 압축한 OS의 언어와 헤제하는 OS의 언어가 다른 경우 파일명이 깨져 보이는 등의 문제가 발생할 소지가 있었습니다. 


'alz포맷'의 경우 초기부터 고려하지 않는 내용을 억지로 우겨 넣다보니, 호환성의 문제 또는 데이터 중복의 비효율성이 생기게 되었습니다.  이런 문제는 기존에 널리 사용되던 다른 포맷들을 확장하는 경우에도 마찬가지로 발생합니다.

 

> 호환성에 초점을 맞춘 미래를 위한 egg포맷

'Egg포맷'의 형태를 보면 기본적으로 '필수정보'를 가지고 나머지 정보들은 '확장정보'로 간주됩니다.

 

다시 말해 압축을 해제하기 위한 기본 기능에 '필수적인 요소'(필수정보)들과 '추가적인 요소'(확장정보)로 구분됩니다. 여기서 '추가적인 요소'(확장정보)들을 일반화 하고 옵션화 하여 호환성을 높이고 향후 발생할 수 있는 요구사항에 대하여 유연하게 처리 가능하도록 설계하였습니다.

 

예를 들면 파일 속성 정보라던지, 파일에 대한 코멘트 정보라던지 하는 것들은 알지 못하더라도 파일을 생성해 내는데는 문제가 없습니다. 이런 확장정보는 이 정보가 뭔지 모른다 하더라도 적어도 파일은 해제해 낼 수 있는 것입니다.

 

'Egg포맷'은 이 확장헤더들을 통해 향후 지속적으로 기능이 추가될 수 있으며, 대다수의 소프트웨어들은 '확장정보'를 다룸에 있어서 알면 쓰고 모르면 무시하고 넘어갑니다. 압축파일에 있어서 이 말은 포맷이 업그레이드가 되더라도 적어도 해제는 가능하다는 이야기입니다.

 

또한,  기본적으로 유니코드인 utf-8을 사용하기 때문에 언어불문 사용되어질 수 있으며, 단일 파일에 대해서도 내부적으로 여러 개의 덩어리로 압축되는 것을 지원하기 때문에 원한다면 대용량 파일을 다수의 덩어리로 압축하여 필요한 부분만을 해제해 낼 수가 있습니다. 

 

그리고 그 덩어리별로 다른 알고리즘을 사용할 수 있으므로, 특정 파일 형태에 특화된 압축률도 기대할 수 있습니다.(파일의 내부 형태에 따라 덩어리를 나누어 각각에 유리한 알고리즘을 선택할 수 있습니다) 물론, 반대의 개념인 Solid압축도 지원하구요.


egg포맷은 확장헤더를 통해 향후 기능 추가시에도 하위 호환성을 유지할 수 있도록 설계 되었습니다. 아울러 alz의 과오를 범하지 않고, 'egg포맷'이 더욱 편리하고 유용한 압축포맷으로서 폭넓게 활용될 수 있도록 Specification을 공개했습니다(Unegg 헤제모듈과 헤제프로그램도 제공하고 있습니다.) egg포맷 라이선스는 알툴즈 홈페이지에서 확인할 수 있습니다.

   

egg포맷명세, 해제모듈, Unegg소스코드(리눅스용), Unegg 안드로이드 활용 샘플 보기

관련글 더보기

댓글 영역