목차
노트 요령 중 아직 안 쓴 것이 하나 남았다. 안 중요한 건 아예 안 적는 것이다.
안 적은 것은 다시 못 적는다
앞의 세 글은 전부 같은 약속 위에 있었다. 줄인 것을 펼치면 원본이 정확히 돌아온다. 〃는 위와 같은 말이고, (거리 18, 길이 8)은 정확히 그 여덟 글자다.
그런데 학생이 노트에서 실제로 가장 많이 줄이는 방법은 그게 아니다. 교수의 잡담, 반복 설명, 예시 두 개 중 하나를 통째로 안 적는다. 강의 두 시간이 노트 세 장이 되는 건 기호를 잘 써서가 아니라 대부분을 안 적어서다.
이게 손실 압축이다. 그리고 대가는 명확하다. 안 적은 것은 어디에도 남아 있지 않다. 노트를 아무리 들여다봐도 안 적은 잡담은 복원되지 않는다.
되돌아오는 길이 있느냐 없느냐
두 방식의 차이를 그림 하나로 못 박아 두면 나머지가 쉬워진다.
달라진 것은 딱 하나다. 아래 판에서만 조각이 밖으로 떨어지고, 그래서 끝 칸이 출발한 무늬로 돌아오지 못한다.
위쪽은 왕복이다. 줄였다 펼치면 출발한 자리로 정확히 돌아온다. 텍스트, 소스 코드, 실행 파일, 데이터베이스가 여기 있어야 한다. 한 비트가 달라지면 프로그램이 안 돌고 계약서 숫자가 바뀐다.
아래쪽은 편도다. 줄이는 순간 떨어져 나간 조각은 사라지고, 펼쳐도 그 자리는 비슷한 것으로 메워질 뿐이다. 사진, 음악, 영상이 여기 있다.
여기서 압축의 성격이 갈린다. 무손실은 “같은 것을 짧게 적는 법”을 찾는 일이고, 손실은 **“무엇을 버려도 되는지 판단하는 일”**이다. 뒤엣것에는 판단이 들어가고, 판단에는 기준이 필요하다.
여기가 노트 비유의 갈림길이다
이 시리즈를 시작하면서 노트 비유가 깨지는 자리를 한 번 짚었다. 노트는 사람이 알아보면 되지만 압축은 기계가 정확히 되돌려야 한다는 것이었다.
손실 압축은 그 선의 반대편이다. 여기서는 비유가 오히려 정확해진다. 잡담을 안 적기로 한 학생의 판단과 사진의 미세한 색 차이를 안 적기로 한 인코더의 판단은 하는 일이 같다. 둘 다 “받는 쪽이 어차피 못 알아챈다”에 걸고 버리는 것이다.
다만 여전히 다른 게 하나 남는다. 학생은 자기가 무엇을 안 적었는지 안다. 인코더는 그걸 기록해 두지 않는다. 그래서 나중에 “무엇을 잃었는지”를 파일에서 알아낼 방법이 없다. 원본과 나란히 놓고 비교하는 수밖에 없고, 원본을 버렸다면 그마저 불가능하다.
버릴 기준은 사람의 감각이다
무엇을 버려도 되는지는 데이터만 봐서는 못 정한다. 최종적으로 그것을 볼 사람의 감각이 기준이 된다.
사진에서 흔히 쓰는 기준은 둘이다.
- 눈은 급한 변화보다 완만한 변화에 예민하다. 하늘처럼 색이 서서히 바뀌는 면은 대충 적어도 티가 안 나고, 미세한 잔무늬는 거칠게 뭉개도 못 알아챈다
- 눈은 밝기보다 색에 둔감하다. 그래서 밝기 정보는 촘촘히 남기고 색 정보는 성기게 남기는 방식이 널리 쓰인다
소리도 원리가 같다. 큰 소리 바로 옆의 작은 소리는 사람 귀에 안 들린다. 그러면 그 작은 소리는 아예 안 적어도 된다. 사람이 들을 수 있는 범위 밖의 아주 높거나 낮은 성분도 마찬가지다.
그래서 손실 압축은 데이터에 대한 기술이 아니라 사람에 대한 기술이다. 같은 바이트라도 사람이 볼 사진이면 버릴 것이 잔뜩 있고, 계측 장비가 분석할 데이터면 하나도 못 버린다. 이 구별이 나중에 판단의 기준이 된다.
손잡이를 돌려 정도를 고른다
손실 압축에는 무손실에 없던 조절 손잡이가 하나 더 있다. 얼마나 버릴 것인가.
- 조금만 버리면 원본과 눈에 띄는 차이가 없고 크기도 조금만 준다
- 많이 버리면 확 작아지지만 뭉개진 얼룩이나 경계선 주변의 지저분한 무늬가 보이기 시작한다
앞 글의 압축 레벨과 헷갈리기 쉬운데 완전히 다른 손잡이다. 무손실의 레벨은 “얼마나 열심히 찾을까”라서 결과물의 내용은 어느 레벨이든 똑같다. 손실의 품질 설정은 결과물 자체가 달라진다.
같은 손잡이가 잘 안 맞는 데이터도 여기서 드러난다. 글자나 선처럼 경계가 뚜렷한 그림은 손실 압축에 약하다. 급한 변화를 대충 적는 방식이라, 검은 글자 가장자리에 흐릿한 얼룩이 생긴다. 스크린샷을 사진 형식으로 저장했을 때 글씨가 지저분해 보이는 이유가 이것이다.
다시 저장할 때마다 나빠진다
편도라는 성질이 실무에서 가장 아프게 드러나는 자리가 여기다.
손실로 저장한 파일을 열어서 고치고 다시 저장하면, 이미 한 번 버린 데이터에서 또 버린다. 원본에서 버리는 게 아니라 이미 상한 것에서 다시 버리는 것이라 손해가 쌓인다. 이 짓을 몇 번 반복하면 눈에 띄게 뭉개진다.
노트로 치면 줄여 적은 노트를 보고 다시 줄여 적는 것과 같다. 두 번째 학생은 첫 학생이 안 적은 잡담을 애초에 모르고, 자기 기준으로 또 덜어낸다. 강의에서 두 단계 멀어진다.
그래서 원칙 하나가 나온다.
원본은 손실 없는 형태로 따로 보관하고, 손실 형식은 내보낼 때 한 번만 만든다.
이미지 파이프라인을 만들 때 이 원칙을 안 지키면 조용히 품질이 새어 나간다. 사용자가 올린 사진을 썸네일로 만들고, 그 썸네일을 다시 리사이즈하고, 그걸 또 워터마크 붙여 저장하는 식의 흐름이 흔한 사고 지점이다.
이미지 포맷은 무엇으로 고르나
포맷 이름을 외우는 것보다 무엇을 묻고 고르는지를 아는 편이 오래 간다. 질문은 셋이다. 되돌릴 필요가 있나, 투명한 부분이 있나, 그림인가 사진인가.
| 포맷 | 되돌아오나 | 잘 맞는 것 |
|---|---|---|
| PNG | 무손실 | 스크린샷, 로고, 글자가 든 그림, 투명 배경이 필요한 것 |
| JPEG | 손실 | 사진. 색이 완만하게 변하는 그림 |
| WebP | 둘 다 됨 | 웹에 올릴 대부분. 같은 품질에서 위 둘보다 대체로 작다 |
| AVIF | 둘 다 됨 | 더 작지만 만드는 데 시간이 더 든다. 큰 이미지를 많이 내보낼 때 값을 한다 |
| SVG | 그림을 그리는 명령이라 개념이 다르다 | 로고·아이콘. 얼마나 키워도 안 깨진다 |
여기서 자주 하는 실수 둘을 짚어 둔다.
- 스크린샷을 JPEG으로 저장한다. 글자 경계가 지저분해지고, 색이 몇 개 안 되는 그림이라 무손실로 저장해도 어차피 작다. 손해만 본다
- 사진을 PNG으로 저장한다. 사진은 인접한 픽셀이 조금씩 다 달라서 반복도 치우침도 약하다. 무손실로는 거의 안 줄어들어 파일이 몇 배가 된다
PNG은 색 종류가 적고 같은 색이 넓게 이어질 때 강하고, JPEG은 그 반대일 때 강하다. 이 문장 하나가 위 두 실수를 다 막는다.
오디오와 영상도 뿌리가 같다
소리와 영상 형식도 같은 자리에 놓고 보면 새로 배울 게 별로 없다.
소리는 사람이 못 듣는 성분을 버린다는 점에서 사진과 같다. 무손실로 담는 형식도 있는데, 원본을 보관하거나 편집할 때 쓰고 최종 배포에는 손실 형식을 쓰는 것이 보통이다. 이미지에서의 원칙과 똑같다.
영상은 여기에 하나가 더 붙는다. 앞 장면과 다음 장면이 거의 같다는 것이다. 그래서 영상 형식은 장면을 통째로 담지 않고 가끔 한 장을 온전히 담고, 나머지는 앞 장면과의 차이만 적는다.
이건 사실 새로운 아이디어가 아니다. 반복을 두 번 적지 않는다는 시리즈의 첫째 아이디어를 시간 방향으로 적용한 것뿐이다. 그래서 영상은 손실과 무손실의 원리를 함께 쓴다. 움직임이 적은 영상이 파일이 작은 이유도 같은 설명으로 끝난다.
실무에서: 무엇을 손실로 다뤄도 되는가
판단의 기준은 딱 하나로 정리된다. 이 데이터를 최종적으로 소비하는 것이 사람의 감각인가, 기계의 계산인가.
| 데이터 | 손실을 써도 되나 |
|---|---|
| 사용자에게 보여 줄 사진·영상·소리 | 된다. 오히려 안 쓰면 대역폭이 감당이 안 된다 |
| 소스 코드·설정·문서·JSON | 절대 안 된다. 한 글자만 달라도 뜻이 바뀐다 |
| 데이터베이스와 백업 | 안 된다. 압축을 걸더라도 무손실이어야 한다 |
| 의료 영상·계측 데이터·법적 증빙 | 안 된다. 사람 눈에 안 보이는 차이가 판단의 근거일 수 있다 |
| 사용자가 올린 원본 | 보관은 무손실, 보여 줄 때만 손실로 변환 |
이 표를 관통하는 감각은 부동소수점에서 본 것과 같다. 정확해야 하는 값인가, 근사해도 되는 값인가. 거기서는 소수를 담는 이야기였고 여기서는 그림과 소리를 담는 이야기지만, 물어야 할 것은 한 문장으로 같다.
하나 더 있다. 손실 파일에는 얼마나 잃었는지가 안 적혀 있다. 그래서 “이 이미지는 몇 번 재저장된 것인가”를 파일만 보고는 알 수 없다. 이미지 파이프라인을 만들 때 원본 보관 여부를 처음부터 정해 두는 것이 나중에 되돌릴 수 없는 일을 막는 유일한 방법이다.
정리
- 손실 압축은 되돌리기를 포기하는 대신 훨씬 많이 줄이는 거래다.
- 무손실은 왕복, 손실은 편도다. 떨어져 나간 조각은 파일 어디에도 없다.
- 무엇을 버릴지는 사람의 감각이 정한다. 눈과 귀가 못 알아채는 것부터 버린다.
- 그래서 경계가 뚜렷한 그림에는 안 맞는다. 스크린샷을 사진 형식으로 저장하면 글자가 지저분해진다.
- 다시 저장할 때마다 나빠진다. 원본은 무손실로 두고 손실 형식은 내보낼 때 한 번만 만든다.
- 포맷 선택은 세 질문이다. 되돌릴 필요가 있나, 투명한 부분이 있나, 사진인가 그림인가.
- 영상은 여기에 앞 장면과의 차이만 적는다를 더한 것이다. 반복 지우기를 시간 방향으로 쓴 셈이다.
다음 글은 이 시리즈에서 가장 자주 나오는 질문을 정면으로 다룬다. 왜 무엇이든 반으로 줄여 주는 프로그램은 없는가.