일전에 허프만 압축 방법을 소개했다.
오늘은 압축과 인코딩을 간단하게 소개하고자 한다.
1. Compression VS Encoding
먼저 많은 사람들이 헷갈려 하는 부분이다.
포맷과 압축을 혼용하는 사람들도 많다.
Compression과 Encoding의 차이부터 짚고 넘어가야 할 듯 하다.
1) Compression
일반적으로 Compression 이란 작업전 크기보다 작업후 크기가 줄어드는 것을 의미한다.
굳이 컴퓨터에서는~
이라는 어려운 해석을 가미할 가치가 없다.
Compression은 그냥 압축이다.
이사를 가려고 짐을 싸거나 물건을 나르기 불편한 모양새거나 너무 커서 부피를 좀 줄일 필요가 있을 수 있다.
사과 500 개를 나를때나, 쌀을 100kg 나를때, 사람보다 2-3배 더 큰 곰인형 20개를 이동시킨다고 하자.
뭐 염동력을 가지고 있다면 동시에 이동시키면 된다.
나는 그런 마법을 쓸 수 없는 종족이기에 상자에 담아서 이동시킬테다.
사과나 쌀을 담고나면 당연히 본래 부피보다 커질지도 모른다. 빈 공간이 생기기 때문이다.
그러나 인형의 경우 구겨 넣으면 본래보다 작아질 수 있다.
위 두가지 모두 Compression이다.
부피가 더 커진 경우는 압축효율이 떨어지는 파일을 압축하는 형태이다.
압축시 압축률이 1을 넘어서는 것을 의미한다.
반면 인형들은 부피가 줄어드니까 당연히 압축효율이 큰 것이다.
이렇듯 실제 크기가 줄거나 더 커지거나 변함 없거나 하는 일련의 작업이 Compression이다.
2) Encoding
Encoding은 무엇일까.
이미 앞서 허프만 코드 부호화를 보고 왔다면 사실 이 부분을 볼 필요는 없을 것이다.
인코딩은 사실 설명은 못해도 많이들 사용하는 용어이다.
대충 그 뜻도 어렴풋이 알고 있을 것이다.
엄밀히 설명하려면 Compression VS Encoding가 아니라 Decoding VS Encoding 으로 갔어야 한다.
Encoding (인코딩)은 한글로 번역하면 더 어려워진다.
그냥 간단하게 이야기하자면 컴퓨터에서 표현하는 문자 체계로 바꾸는 작업이다.
물론 raw 데이터에 대한 인코딩 뿐 아니라 이미 인코딩이 된 데이터를 인코딩하기도 한다.
말이 많이 어렵다면 사람을 보면 된다.
우주가 하나의 거대한 인터넷의 바다라고 한다면, 아프리카 사람과 한국사람이 다른 언어를 구사하는 것을 컴퓨터에 빗대어 볼 수 있을 것이다.
조커를 본 한국인과 아프리카 사람이 동일한 생각을 가지고 똑같은 표현을 SNS 에 게시한다고 하자.
같은 것을 보고 같은 느낌을 가지고 같은 표현을 하더라도 사용하는 언어가 다르면 알아 들을 수가 없다.
(번역을 하지 않는 이상, 다른 나라 언어를 알고 있지 않은 이상. 이러한 언어 변환작업은 컨버팅이라고 본다.)
이렇게 눈으로 본 입력 데이터는 같더라도 사용하는 언어가 다르므로 다른 언어로 구사하는 것이다.
마찬가지로 문자, 영상, 이미지 등 다양한 컴퓨터 리소스에 대해서 포맷이라는 기준이 존재한다.
문자에 ASCII, BCD, UNICODE 등이 있고 모두 제각각 표현방법이 다르다.
이미지에도 JPEG, PNG, BMP 등 다양한 포맷들이 존재한다. 영상도 마찬가지다.
이러한 포맷들은 하드웨어의 발전이나 소프트웨어의 발전으로 추가되거나 개발된 것이 존재한다.
또는 특별한 소프트웨어나 하드웨어에서만 사용하기 위해 만들어진 포맷일 수도 있다.
어떠한 형태로 보여지든 컴퓨터 언어로 작성(번역)되는 것이 인코딩이라 볼 수 있다.
일련의 인코딩 작업에서 Compression은 빈번하게 발생할 수 있다.
반대로 인코딩처리된 데이터를 역으로 우리가 알아볼 수 있는, 사람의 데이터로 회귀하는 작업을 디코딩(Decoding)이라 한다.
2. Compression VS Decompression
당연하게도 컴퓨터라고 하는 한정적 자원에 우리의 일상을 기록한다면 당연히 부하가 걸릴 수 밖에 없다.
따라서 인코딩 과정에서 당연하게 Compression이 발생할 수 있다.
예를들어 A반 학생 50명의 국어 성적이 모두 30점일때, 굳이 한명한명 국어=30점 이렇게 적어줄 필요는 없다.
다른 성적들을 각각 적어준뒤, 국어만 '전원 국어=30' 이렇게만 적어도 알아보기는 쉽다.
특히 이러한 부분은 영상이나 이미지, 사운드에서 빈번하게 발생한다.
인간의 감각기관은 그렇게나 또렷하지가 못하다.
Raw 데이터의 선명하고 맑은 사운드는 디지털로 표현할때 해당 기기가 표현가능한 범위내에서 가장 비슷한 만큼만 고려되고 나머지는 버려져도 출력이 같다.
이미지도 실제 세상은 세포단위의 해상도를 갖지만 컴퓨터는 그런 작은 단위까지 표현할 필요는 없다. 출력할 디바이스(모니터, 핸드폰, HMD 등)의 해상도까지만 정보를 갖고 나머지 정보는 버린다고 해도 출력에 지장이 생기는 것도 아니고 저장 측면에서 좋다.
뿐 아니라 영상에서는 사운드나 이미지에서 언급한 내용을 공통으로 가지면서 동시에 이미지 변경 시각(frame)을 정정하여 가시가능한 정지영상만 남기고 그 사이 출력되지 않는 정지영상은 모두 버리는 것도 가능하다.
(예를들어 1400fps 에서 120fps 로 줄인다면 그 사이 초당 1280장의 이미지를 버릴수 있다.)
이렇게 컴퓨터에 저장할때 복원부분을 고려하지 않고 날려버리는 저장방식이 손실압축 방식이다. 당연히 압축을 풀어도 삭제된 부분이 복원되지 않거나 복원할 방법이 없는 그런 것들을 손실압축이라고 한다.
이와는 반대로 최대한 Raw 입력 데이터로 복원되는 것을 무손실압축이라고 한다.
참고 : https://en.wikipedia.org/wiki/Data_compression
Data compression - Wikipedia
From Wikipedia, the free encyclopedia Jump to navigation Jump to search "Source coding" redirects here. For the term in computer programming, see Source code. Process of encoding information using fewer bits than the original representation In signal proce
en.wikipedia.org
'programming > 용어정리' 카테고리의 다른 글
[REST/API] REST (0) | 2022.06.13 |
---|---|
[SQL] 1.1. 데이터 모델링의 이해 (0) | 2022.06.13 |
[용어 정리] 일괄 처리 VS 실시간 처리 (0) | 2019.10.25 |
Big O notation, 점근표기법과 시간복잡도 (0) | 2019.06.04 |
허프만과 인코딩-디코딩 (Huffman Tree, Huffman-Compressor) (0) | 2019.06.03 |