압축 알고리즘 정리

현장에서 다양한 이유로 데이터 압축을 사용하고 있습니다.
네트워크 트래픽을 줄이기 위해
저장소의 공간을 절약하기 위해

그리고 세상에는 생각보다 많은 압축 알고리즘이 존재합니다.
우리가 많이 쓰는 JPG, MP3, MP4 와 같은 형식들도 크게 보면 압축이라 할 수 있죠.
하지만 여기에서 말하는 압축은 위와 같은 손실이 발생하는 것은 제외하고
순수하게 데이터 크기를 줄이는 비손실 압축만을 얘기해 보겠습니다.

1. 압축 알고리즘의 선택 기준

  • 속도
  • 지원하는 언어
  • 압축률
  • 압축시 사용되는 메모리와 디스크 공간
등이 크게 영향을 미치는 기준이라 할 수 있죠.
어플리케이션 특성상 압축률이 좋지 않더라도 빠르게 압축하고 해제 하는 것이 필요할 수도 있고,
CPU 점유가 높아지고 많은 메모리를 소모하더라도 높은 압축률이 필요할 수도 있습니다.
실행되는 플랫폼과 H/W에 따라서는 최소한의 메모리를 사용해야 할 경우도 있구요.

2. 라이브러리 소개
BS가 추후에 쓰일지도 모르겠다 생각하여 찾은 C/C++용 라이브러리 들입니다.

이름 

링크 

특징 

QuickLZ 


 http://www.quicklz.com/

빠른 속도가 특징
GPL 라이선스로 무료로 사용할 수 있으며
GPL 라이선스가 아닌 것을 구매할 수도 있다.
직접 테스트해 본 결과 무척 빨랐음. 

 zlib


http://www.zlib.net/

 

완전한 공개 라이브러리
그닥 빠르지 않지만 상용 어플리케이션에서도 사용할 수 있다는 장점
압축 해제는 그런대로 빠름 

 bzip2


http://www.bzip.org/

 

압축 효율은 좋은 편이지만 속도가 좀 느리다.
역시 공개 라이브러리 

 lzo


http://www.oberhumer.com/opensource/lzo/

 

빠르다. 하지만 QuickLZ보다는 좀 느리다.
이것도 GPL
상용 어플리케이션에 쓰고 싶으면 제작자에게 따로 연락을 하란다. 

 Snappy


http://code.google.com/p/snappy/

 

목표가 압축률이 아닌 속도에 있는 빠른 압축알고리즘으로 BSD 라이센스를 따르기 때문에 사용하는데 큰 제약이 없을 것 같다.
구글의 일부 서비스에 적용되어 있다고 한다. 

참고글) 네이버 개발자 센터 공식 블로그 포스트

글쓴이

BS

BS == Programmer