bzip3 3분 소요

bzip2의 후계자 bzip3, 압축률을 높인 대가는 메모리였습니다

20년 넘게 자리를 지킨 bzip2에 새로운 후계자가 나왔습니다. 이름에서부터 bzip2의 뒤를 잇겠다는 뜻이 드러나는 bzip3입니다. 압축률은 더 높지만, 그만큼 만만치 않은 메모리 비용이 따릅니다.

bzip2는 왜 아직도 살아남았을까요

bzip2는 1996년에 처음 공개된 압축 방식입니다. 지금 기준으로 보면 압축과 해제 모두 빠른 편은 아닙니다. 그런데도 리눅스 배포판과 소스 코드 보관소에서는 여전히 꾸준히 쓰입니다.

이유는 분명합니다. 오랫동안 검증돼 구현이 안정적이고 압축률도 무난합니다. 최대 블록 크기가 900KB라 메모리 사용량을 예상하기도 비교적 쉽습니다.

핵심은 BWT입니다. BWT 자체가 원문을 바로 줄이는 기술은 아닙니다. 비슷한 문자가 한곳에 모이도록 데이터 순서를 바꾸는 전처리 방식입니다. 데이터를 이렇게 정리해 두면 다음 압축 단계에서 크기를 더 쉽게 줄일 수 있습니다.

다만 900KB라는 작은 블록은 이제 한계로 작용합니다. 파일 안에서 멀리 떨어져 있는 반복 패턴을 찾아내기 어렵기 때문입니다. 수십 MB짜리 프로그램이나 데이터셋을 다루는 시대에는 살펴볼 수 있는 범위가 너무 좁습니다.

bzip3는 더 큰 블록으로 멀리 봅니다

bzip3 역시 BWT를 중심으로 작동합니다. 대신 더 큰 블록을 사용하며, 반복 데이터를 미리 줄이는 LZP와 RLE 같은 기법도 함께 적용합니다.

LZP는 앞서 나온 문자열을 바탕으로 다음 내용을 예측합니다. RLE는 같은 값이 이어질 때 이를 짧게 표현하는 방식입니다. 그다음 BWT로 비슷한 문맥을 모은 뒤 엔트로피 코더로 최종 결과를 압축합니다.

책에 빗대면 차이를 이해하기 쉽습니다. bzip2가 책을 몇 쪽씩 나눠 살펴보는 방식이라면, bzip3는 한 장 전체를 펼쳐 놓고 반복되는 표현을 찾습니다. 살펴보는 범위가 넓으니 그만큼 더 많은 패턴을 발견할 수 있습니다.

이 방식은 소스 코드, 실행 파일, 텍스트 묶음처럼 반복 구조가 많은 데이터에서 특히 유리합니다. bzip2보다 결과 파일이 작아질 가능성이 큰 것도 이 때문입니다.

높은 압축률은 공짜가 아닙니다

걸림돌은 메모리입니다. 블록이 커질수록 알고리즘이 한꺼번에 기억해야 하는 데이터도 많아집니다. 여기에 BWT를 계산할 작업 공간까지 필요해 실제 메모리 사용량은 블록 크기보다 더 커집니다.

bzip2의 최대 블록은 900KB입니다. 반면 bzip3는 수 MB에서 수백 MB 규모의 블록을 활용할 수 있습니다. 설정에 따라 필요한 메모리가 수백 MB를 넘어설 수 있다는 뜻입니다.

큰 서버라면 감당할 만합니다. 하지만 컨테이너를 여러 개 띄우거나 저사양 장비에서 파일을 동시에 처리할 때는 사정이 다릅니다. 압축 작업이 몇 개만 겹쳐도 메모리가 부족해질 수 있습니다.

압축 파일을 오래 보관하는 환경이라면 비용도 따져봐야 합니다. 저장 공간을 몇 퍼센트 아끼려고 처리 시간과 메모리 사용량을 크게 늘리는 것이 언제나 경제적인 선택은 아닙니다. 결국 압축률뿐 아니라 운영 비용까지 함께 계산해야 합니다.

벤치마크 숫자보다 데이터 성격이 중요합니다

압축 알고리즘 비교표만 보면 어느 방식이 더 나은지 답이 뚜렷해 보입니다. 하지만 실제 결과는 데이터의 성격에 따라 크게 달라집니다.

텍스트와 소스 코드에는 반복되는 단어와 문법 구조가 많습니다. 큰 블록을 사용하는 bzip3가 강점을 보이기 좋은 데이터입니다. 반대로 이미 압축된 JPEG, MP4, ZIP 파일은 추가로 크기를 줄일 여지가 거의 없습니다.

그렇다고 블록 크기를 키울수록 압축률이 계속 좋아지는 것은 아닙니다. 어느 지점을 지나면 메모리 사용량은 크게 늘어나는데 결과 파일은 조금밖에 작아지지 않을 수 있습니다. 따라서 최고 설정이 항상 최적 설정인 것은 아닙니다.

벤치마크를 확인할 때도 압축된 크기만 봐서는 안 됩니다. 압축 시간과 해제 시간은 물론 최대 메모리 사용량까지 살펴봐야 합니다. 같은 장비에서 같은 데이터로 측정한 결과인지도 확인해야 합니다.

최근 30일 동안 확인 가능한 Reddit 논의는 없었습니다. 최신 커뮤니티 반응이나 추천 수를 근거로 인용하기 어려운 이유입니다. 지금으로서는 공개 벤치마크보다 자신이 실제로 다루는 파일로 시험한 결과가 더 유용합니다.

범용 압축의 세대교체가 어려운 이유

성능이 좋은 알고리즘이 나왔다고 해서 기존 표준이 곧바로 사라지지는 않습니다. 압축 형식은 파일을 만드는 쪽보다 이를 푸는 쪽의 호환성이 더 중요하기 때문입니다.

bzip2 파일은 수많은 운영체제와 도구에서 기본으로 지원합니다. 반면 bzip3는 별도 프로그램이나 라이브러리를 설치해야 할 때가 많습니다. 10년 뒤에도 파일을 문제없이 열 수 있을지도 생각해야 합니다.

선택할 수 있는 다른 방식도 많습니다. 처리 속도가 중요하다면 zstd가 강력한 후보입니다. 가능한 한 작은 보관 파일이 필요하다면 xz나 다른 고압축 방식도 고려할 수 있습니다. bzip3가 자리를 잡으려면 그 사이에서 BWT 계열 특유의 높은 압축률을 확실히 보여줘야 합니다.

bzip3는 bzip2의 오래된 한계를 현대적인 방식으로 넓힌 후계자라고 할 수 있습니다. 다만 더 작은 파일을 얻으려면 더 많은 메모리를 쓰고 호환성 문제도 감수해야 합니다. 결국 여러분의 환경에서는 저장 공간 몇 퍼센트를 아끼는 일과 운영 자원을 줄이는 일 가운데 어느 쪽이 더 중요한가요?

bzip3 데이터압축 오픈소스

댓글

    댓글을 불러오는 중...