[flutter] 플러터 objectbox에서 데이터를 압축하는 방법과 압축률 비교하기

서론

플러터는 Google에서 개발한 크로스 플랫폼 앱 개발 프레임워크로, 다양한 디바이스와 운영체제에서 동일한 코드로 앱을 개발할 수 있습니다. 이 중에서 ObjectBox는 플러터에서 데이터를 저장하고 관리하기 위한 신뢰할 수 있는 옵션 중 하나입니다. 이번 포스트에서는 ObjectBox에서 데이터를 압축하는 방법과 압축률을 비교해보도록 하겠습니다.

ObjectBox에서 데이터 압축하기

ObjectBox는 데이터를 압축하는 기능을 제공하여 디스크 공간과 네트워크 대역폭을 절약할 수 있습니다. 압축 방법은 다음과 같은 두 가지 방법으로 제공됩니다.

1. 압축률 제어

ObjectBox에서는 압축률을 제어할 수 있는 옵션을 제공합니다. 데이터 압축률을 높일수록 저장 공간을 절약할 수 있지만, 압축과 압축 해제에 소요되는 시간이 증가할 수 있습니다.

예를 들어, 압축률을 50%로 설정하면 저장 공간은 절반으로 감소하지만, 압축 해제에는 시간이 더 걸릴 수 있습니다. 따라서 압축률은 데이터 액세스 패턴과 앱의 성능 요구 사항에 따라 조정해야 합니다.

var store = Store(getDefaultStoreOptions()
  ..directory = "path/to/db"
  ..compression = true
  ..compressionLevel = 50);

2. 컴파일된 데이터 압축

ObjectBox에서는 데이터를 다른 압축 기술(예: gzip)을 사용하여 압축하는 대신, 별도의 컴파일 타임 압축 알고리즘을 사용할 수도 있습니다. 이렇게 하면 ObjectBox와 함께 패키지된 데이터가 용량과 전송 시간을 줄일 수 있습니다.

이 기능을 사용하려면 ObjectBox 컴파일러를 실행하기 전에 objectbox.g.dart 파일을 생성하는 단계에서 --no-compress-option 플래그를 사용하면 됩니다.

flutter packages pub run build_runner build --delete-conflicting-outputs --no-compress-option

압축률 비교하기

ObjectBox에서 데이터 압축을 사용하는 것이 데이터 용량과 전송 시간을 단축할 수 있다는 것을 알았습니다. 이제 압축률을 비교해보기 위해 테스트를 수행하겠습니다.

같은 양의 데이터를 ObjectBox에 저장하고, 압축률을 0%, 25%, 50%, 75%로 설정하여 각각의 용량을 확인해보겠습니다.

var store = Store(getDefaultStoreOptions()
  ..directory = "path/to/db"
  ..compression = true
  ..compressionLevel = 0);

myBox.put(MyObject(1)); // 압축률 0%
myBox.put(MyObject(2)); // 압축률 0%
myBox.put(MyObject(3)); // 압축률 0%
// ...

var store = Store(getDefaultStoreOptions()
  ..directory = "path/to/db"
  ..compression = true
  ..compressionLevel = 25);

myBox.put(MyObject(4)); // 압축률 25%
myBox.put(MyObject(5)); // 압축률 25%
myBox.put(MyObject(6)); // 압축률 25%
// ...

// 나머지 압축률에 대한 데이터 추가

이렇게 데이터를 추가한 후에는 flutter pub run build_runner build 명령을 사용하여 ObjectBox의 압축률을 설정한 후 다시 빌드해야 합니다.

테스트 결과를 통해 각 압축률에 따른 데이터의 크기를 비교해 보실 수 있습니다.

결론

ObjectBox는 플러터에서 데이터를 압축하는 다양한 방법을 제공하여 디스크 공간과 네트워크 대역폭을 최적화할 수 있습니다. 압축률은 데이터 액세스 패턴과 앱의 성능 요구 사항에 따라 조정해야 합니다. 테스트를 통해 적절한 압축률을 설정하여 데이터 저장 공간과 전송 시간을 최소화할 수 있습니다.

참고 자료