2009. 8. 5. 01:10

데이터 압축이란?

개인적으로 관심이 좀 있는 분야이기도 해서 공부를 해볼까해서 나름 공부하는 내용들을 정리하는 식으로 포스팅 해볼까 합니다.

=======================================================================================================


우리는 알게 모르게 데이터 압축을 아주 많이 사용하고 있습니다.
알집이나 win zip, win rar 같은 압축 프로그램을 이용해서 파일의 용량을 줄이는 것부터, 정말 많이 쓰이고 있는 mp3나 jpeg같은 것도 데이터 압축이지요.

압축 기술은 오래전 하드웨어의 한계상 많은 용량을 다룰 수 없었을 때 효율적으로 데이터를 보관, 이동등을 하기 위해 사용되어 왔으며, 하드웨어가 비약적으로 발달된 현재에도 그 유용성은 여전히 뛰어납니다.


데이터 압축을 위키 백과사전에서 검색해보면 다음과 같이 나옵니다.

데이터 압축은 데이터를 더 적은 저장 공간에 효율적으로 기록하기 위한 기술, 또는 그 기술의 실제 적용을 가리킨다.

네, 뭐 따로 정의하지 않더라도 이미 다 알고 있는 이야기 같습니다 =ㅅ=;;


데이터 압축은 크게 두 종류로 나눌 수 있습니다. 바로 무손실 압축과 손실 압축인데요.

예를 들자면 알집으로 파일을 압축하면 나중에 압축을 풀었을 때 원본의 데이터가 손상되지 않습니다. 이런 압축 방식을 무손실 압축이라고 합니다. 대표적인 무손실 압축 알고리즘에는 반복 길이 부호화허프만 부호화 등이 있습니다.

손실 압축은 압축 이후에는 원래의 데이터의 일부분을 손실했기 때문에 다시 복원할 수 없는 방식인데, 사람이 들을 수 없는 영역을 삭제하여 압축하는 방식인 mp3가 대표적이라 할 수 있습니다.


무손실 압축과 손실 압축을 예를 들어 더 자세하게 알아보도록 하죠.



무손실 압축

압축 알고리즘에 가장 간단한 반복 길이 부호화에 대해 알아보겠습니다.

하얀색 모니터에 검은색 점이 찍혀있는 데이터에 대해 생각해봅시다. 하얀색 픽셀을 w라고 쓰고 검은색 점을 b라고 표현한다면 다음과 같을 것입니다.

wwwwwbwwwwwbbwwwbbbw

위의 데이터를 봤을 때 자세히 보면 반복되는 데이터를 알 수 있습니다. 바로 w가 반복되다가 b가 반복되고 w가 다시 반복되는 식으로 데이터가 이루어져있습니다.

따라서 다음과 같이 표현할 수도 있을 것 같습니다.

5w1b5w2b3w3b1w

w가 5개있고 b가 1개 있고 그뒤로 w가 5개가 있고....이런 식으로 표현을 하게 되면 원래 기존의 데이터는 20개의 글자가 필요했지만 아래의 데이터에서는 14개 글자만 있으면 원래의 데이터를 다시 만들어 낼 수 있습니다.

여기에서 w와 b는 0과 1로 이루어진 비트 데이터일 때도 똑같이 적용될 수 있겠지요.

물론 데이터가 저런식으로 반복되는 경우는 그렇게 많지 않을테고 이를 위한 확장된 여러가지 알고리즘들이 있지만, 기본적으로는 위의 방식과 비슷합니다.

반복 길이 부호화를 사용하는 대표적인 파일 형식으로 PCX, BMP, ILBM 등이 있습니다.



손실 압축

위의 데이터를 다시 살펴봅시다.

위의 데이터는 모니터에 표시된 픽셀이라고 가정했는데, 자세히 보면 b가 하나 인 곳이 있습니다. 만약 모니터가 아주 크고 위의 데이터는 그 중 일부의 데이터라고 한다면, 하나의 픽셀이 검은 것은 없어지더라도 별로 표시가 나지 않을 수 있습니다. 마찬가지로 가장 마지막에 있는 w도 옆의 b로 바꾼다고 해도 그다지 표시가 나지 않을 수 있겠지요.

그렇다면 다음과 같이 바꿀 수도 있을 것 같습니다.

wwwwwwwwwwwbbwwwbbbb

이것을 다시 반복 길이 부호화로 줄인다고 하면, 다음과 같을 것입니다.

11w2b3w4b

무손실 압축에서는 압축이후에 14개의 글자가 필요했지만 이 경우에는 9개만 있으면 됩니다. 물론 이를 원래 데이터로 복원할 방법은 없겠지만, 대신 데이터가 훨씬 더 줄어드는 장점이 있습니다.

손실압축은 멀티미디어에서 아주 많이 쓰이고 있으며, 대표적으로는 JPEG과 mp3, mp4등으로 잘 알려진 MPEG 계통의 압축기술이 있습니다.




참고 사항

위키 백과사전에서 데이터 압축으로 검색을 해보면 여러 압축 기술들의 압축율에 대한 순위가 나와있는데, 잘 알려진 압축 기술들도 있고(zip이라던지 rar, arj 같은), 생소한 기술들도 있습니다.

압축은 텍스트 파일이나 html같은 파일에는 아주 높은 압축율을 보이지만, 이미 압축되어 있는 파일인 mp3나 jpg같은 파일은 그다지 크기가 줄어들지 않으며, 헤더의 추가로 오히려 늘어나는 경우도 있습니다.

순위들을 보면 rk, rar, 7-zip 이 대체적으로 높은 순위에 랭크되어 있습니다. rk와 rar는 사용 프로그램이고, 7-zip은 오픈소스로 윈도우는 물로 리눅스에서도 동작합니다.


개인적으로는 7-zip을 써보고 정말 높은 압축율에 놀랐는데, 압축하는데 무지하게 오래 걸린다는 단점이 좀 있었습니다.

'공부합시다 > 데이터 압축' 카테고리의 다른 글

허프만 알고리즘  (5) 2009.08.12