본문 바로가기
개발

javascript 로 문자열 압축 하기

by 테크냥이 2023. 2. 23.

안녕하세요. 이번 포스팅에서는 javascript로 문자열을 압축하는 방법에 대해 알아보겠습니다. 특히 자바스크립트에서 대용량 문자열을 압축하기 좋은 라이브러리로는 pako와 lz-string이 있습니다. 오늘 안내할 라이브러리는 pako와 LZ-String 입니다.
 

1. pako 

Pako는 JavaScript에서 사용할 수 있는 zlib 구현체 중 하나입니다. 이를 사용하여 데이터를 압축하고 해제할 수 있습니다. 이를 사용하면 서버에서 클라이언트로 전송되는 데이터 양을 줄이고, 네트워크 대역폭을 절약할 수 있습니다.

장점

  • 빠르고 강력한 압축 기능을 제공합니다.
  • JavaScript에서 사용할 수 있어서 웹에서 파일 전송, 게임 등 다양한 분야에서 활용할 수 있습니다.
  • zlib의 API와 비슷하게 사용할 수 있어서 기존의 zlib 사용 경험이 있는 개발자들이 쉽게 적용할 수 있습니다.

단점

  • 큰 파일을 압축하는 데는 시간이 오래 걸릴 수 있습니다.
  • 브라우저에서 실행될 때에는 메모리 사용량이 높아질 수 있습니다.

pako는 Zlib 라이브러리의 JavaScript 구현체입니다. 높은 압축률과 빠른 압축 속도를 제공하며, 대용량 데이터도 처리할 수 있습니다. pako는 브라우저와 Node.js 환경에서 모두 사용할 수 있습니다.

아래는 pako를 사용한 예제입니다.

반응형
const data = "Hello, world!";
const compressedData = pako.deflate(data, { level: 9 });
const uncompressedData = pako.inflate(compressedData, { to: "string" });

console.log(`Original data: ${data}`);
console.log(`Compressed data: ${compressedData}`);
console.log(`Uncompressed data: ${uncompressedData}`);

 
압축된 데이터가 더 작은 경우에만 압축하는 것이 일반적으로 좋습니다. 이를 위해 pako.deflate() 함수에 압축 레벨 인자를 지정할 수 있습니다. 압축 레벨은 0에서 9까지의 값을 가질 수 있으며, 0이 가장 빠르고 9가 가장 강력한 압축을 수행합니다.

예를 들어, 압축 레벨 5로 데이터를 압축하는 코드는 아래와 같이 작성할 수 있습니다.

const compressedData = pako.deflate(inputData, { level: 5 });

압축 레벨을 지정하지 않으면 기본값으로 6이 사용됩니다.

 

2.LZ-String

LZ-String은 JavaScript에서 구현된 압축 라이브러리입니다. pako에 비해 덜 효율적인 압축률을 보이지만, 압축 속도가 매우 빠르고, 자바스크립트에서 압축된 문자열을 다른 프로그래밍 언어에서도 압축 해제할 수 있습니다.

 

장점:

  • 압축 속도가 매우 빠릅니다.
  • 자바스크립트에서 압축된 문자열을 다른 프로그래밍 언어에서도 압축 해제할 수 있습니다.

단점:

  • pako에 비해 덜 효율적인 압축률을 보입니다.
  • 대용량 데이터를 처리하기 어렵습니다.

아래는 LZ-String을 사용한 예제입니다.
 

const data = "Hello, world!";
const compressedData = LZString.compress(data);
const uncompressedData = LZString.decompress(compressedData);

console.log(`Original data: ${data}`);
console.log(`Compressed data: ${compressedData}`);
console.log(`Uncompressed data: ${uncompressedData}`);

위 두 라이브러리 중에서 데이터 크기, 압축률, 압축/해제 속도 등의 요소에 따라서 선택하는 것이 좋습니다. 큰 데이터를 처리할 때는 pako가 적합하며, 작은 데이터를 빠르게 압축/해제해야 할 때는 LZ-String이 적합합니다.
 
다음은 lzstring 압출을 이용한 서버 이미지 전송에 대해 포스팅을 해보겠습니다. 감사합니다.

반응형

댓글