BWTSorter는 Java로 만든 파일 압축 프로그램으로, Silesia 테스트 자료 12개를 압축했을 때 전체 크기가 46.6MB로 비교 대상 가운데 가장 작았다. 다만 1.4MB/s로 압축과 복원을 처리해 복원 속도는 zip, xz, 7-Zip보다 느리다. 제작자는 이 도구가 자주 열지 않는 자료를 보관할 때 알맞다고 설명한다.
BWTSorter는 문서, 소스 코드, 로그, CSV 데이터, 데이터베이스 같은 텍스트 파일에 특히 효과적이다. 제작자 설명에 따르면 이런 파일은 원래 크기의 5분의 1에서 20분의 1까지 줄어들 수 있다. 사진·음악·동영상·이미 압축된 zip 파일은 대체로 크기가 비슷하게 유지된다. 프로그램 파일에서는 7-Zip과 xz가 더 작게 압축한 사례도 있다.
Silesia 자료 212MB를 각 프로그램의 최대 압축 설정으로 처리한 결과는 다음과 같다.
| 프로그램 | 압축 후 전체 크기 |
|---|---|
| BWTSorter | 46.6 MB |
| bsc | 46.8 MB |
| 7-Zip (PPMd mode) | 47.7 MB |
| xz | 48.5 MB |
| 7-Zip (normal mode) | 48.8 MB |
| brotli | 49.6 MB |
| zstd | 52.4 MB |
| bzip2 | 54.5 MB |
| gzip / zip | 67.6 MB |
| lz4 | 77.4 MB |
BWTSorter는 bsc보다 근소하게 앞섰고, 일반적인 zip 파일보다 테스트 자료의 크기를 약 30% 줄였다. 파일 유형별 결과에서는 소설이 10.2MB에서 2.25MB로, 영어 사전이 41.5MB에서 6.64MB로 줄었다. 반면 Firefox 프로그램 파일은 BWTSorter로 16.0MB가 됐고, 7-Zip은 13.3MB, xz는 13.4MB였다. 비교에서 7-Zip은 일반 모드를 사용했으며, 표의 zip은 같은 방식을 쓰는 gzip을 뜻한다.
처리 속도는 압축과 복원 모두 초당 약 1.4MB다. 10MB 문서 하나에 각각 약 7초, 테스트 자료 전체에는 각 방향으로 약 2분 30초가 걸렸다. 제작자는 최대 압축 설정에서 압축 속도는 다른 도구와 비슷하고 xz와 brotli보다 빠르지만, 복원은 훨씬 느리다고 설명한다. zip, xz, 7-Zip은 파일을 1~2초 만에 풀 수 있다고 덧붙였다.
사용하려면 Java 11 이상이 설치돼 있어야 하며, 메모리는 4GB 이상이면 된다. BWTSorter 저장소에서 BWTSorter.java를 내려받아 폴더에 둔 뒤, 터미널에서 해당 폴더로 이동해 한 번 컴파일한다.
java -version
cd ~/BWTSorter
javac BWTSorter.java
압축과 복원은 다음 명령으로 실행한다. 압축 파일은 BWTSorter 형식으로 만들어져 다른 압축 프로그램에서는 열 수 없다. 이 도구는 한 번에 파일 하나만 처리하므로 폴더를 압축하려면 먼저 tar 같은 도구로 단일 파일로 묶어야 한다.
java BWTSorter -c myfile.txt myfile.bwts
java BWTSorter -d myfile.bwts myfile-restored.txt
기본 블록 크기는 32MB다. 더 큰 블록을 지정하면 파일의 더 넓은 범위에서 반복을 찾아 압축 결과를 줄일 수 있지만 메모리를 더 쓴다. 압축 파일에 복원에 필요한 블록 크기가 기록되므로 복원할 때 이를 기억할 필요는 없다. 메모리가 부족하면 프로그램이 더 작은 블록 크기를 제안한다. 복원할 파일 이름이 이미 있으면 확인 없이 덮어쓰므로 보존하려면 다른 이름을 지정해야 한다.
각 블록에는 체크섬이 있어 복원 과정에서 데이터가 일치하는지 확인한다. 압축 파일이 손상됐거나 일부만 받아진 경우에는 오류를 알리고, BWTSorter로 만든 파일이 아니어도 오류를 표시한다. 다만 버전 3에서 형식이 바뀌어 이전 버전으로 만든 압축 파일은 열리지 않는다. 해당 파일은 이전 버전으로 먼저 복원해야 한다.
BWTSorter는 Java로 작성됐으며, 저장소의 크레딧은 Claude(Anthropic의 AI 모델)가 구현과 문서화를 맡았다고 밝힌다. 작동 원리는 1994년 발표된 Burrows–Wheeler 변환과 문맥 혼합(context mixing) 방식의 예측을 결합한 것이다. 자세한 설명은 기술 문서에서 볼 수 있다. Java는 Adoptium에서 받을 수 있다.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요