[flutter] 플러터에서 http_mock_adapter를 이용한 데이터 압축 테스트

플러터는 Google에서 개발한 현대적인 크로스 플랫폼 앱 개발 프레임워크로, HTTP 통신을 테스트할 때 많이 사용됩니다. 이번에는 플러터에서 HTTP 요청 및 응답 데이터를 압축하는 방법을 알아보고, 이를 테스트해보기 위해 http_mock_adapter 패키지를 사용해보겠습니다.

http_mock_adapter란?

http_mock_adapter는 플러터에서 HTTP 요청을 가로채서 가짜 응답을 제공하는 Mocking 라이브러리입니다. 이 라이브러리를 사용하면 테스트 코드에서 실제 서버로 요청을 보내지 않고도 가짜 응답을 제어할 수 있어 테스트를 더욱 효율적으로 수행할 수 있습니다.

데이터 압축 테스트를 위한 http_mock_adapter 설정

먼저, http 패키지와 http_mock_adapter 패키지를 pubspec.yaml 파일에 추가해주세요.

dependencies:
  flutter:
    sdk: flutter
  http: ^0.13.4
  http_mock_adapter: ^2.2.0

이제 압축 테스트를 위한 간단한 HTTP 요청 코드를 작성해보겠습니다. 아래의 예제는 GET 요청을 보내고 응답 데이터를 출력하는 예제입니다.

import 'dart:convert';

import 'package:http/http.dart' as http;

void main() async {
  final client = http.MockClient();

  final url = Uri.parse('https://api.example.com/data');
  final response = await client.get(url);

  if (response.statusCode == 200) {
    final responseData = utf8.decode(response.bodyBytes);
    print(responseData);
  } else {
    print('Request failed with status: ${response.statusCode}');
  }
}

위의 코드에서는 http.MockClient를 사용하여 가짜 HTTP 요청을 보내고, 응답을 받아서 출력하는 간단한 예제입니다. 이제 이 코드에 데이터 압축을 적용해보겠습니다.

데이터 압축 적용

http_mock_adapter에서는 onGet, onPost, onPut, onDelete 등의 메서드를 제공하여 요청에 따라 가짜 응답을 제공할 수 있습니다. 우리는 HTTP 요청을 보낼 때 Accept-Encoding 헤더를 설정하여 서버에게 데이터 압축을 요청하는 방법을 사용하겠습니다.

void main() async {
  final client = http.MockClient();

  client.onGet(
    'https://api.example.com/data',
    headers: {'Accept-Encoding': 'gzip'}, // gzip 압축 지원 요청
    body: {'data': 'Hello, World!'}, // 가짜 응답 데이터
  ).reply(
    200,
    'compressed data', // 가짜 응답 데이터 압축
    headers: {'Content-Encoding': 'gzip'}, // 가짜 응답 헤더 설정 (압축 형식)
  );

  final url = Uri.parse('https://api.example.com/data');
  final response = await client.get(url);

  if (response.statusCode == 200) {
    final responseData = utf8.decode(response.bodyBytes);
    print(responseData);
  } else {
    print('Request failed with status: ${response.statusCode}');
  }
}

위의 예제 코드에서는 client.onGet 메서드를 사용하여 GET 요청에 대한 가짜 응답을 설정합니다. 여기서 우리는 headers 매개변수를 사용하여 Accept-Encoding 헤더를 설정하여 서버에게 gzip 압축을 요청합니다. 이후, reply 메서드를 사용하여 응답 데이터와 헤더를 설정합니다.

데이터 압축 테스트 진행

이제 코드를 실행하면 가짜 응답 데이터가 압축 형식으로 출력되는 것을 확인할 수 있습니다. 압축 데이터를 처리하기 위해서는 압축을 해제하는 과정이 필요하므로, 실제 서버에서 데이터를 받을 때와 마찬가지로 압축을 해제해야 합니다.

데이터 압축은 네트워크 대역폭을 절약할 수 있고, 데이터 전송에 소요되는 시간을 줄일 수 있어 성능 향상에 도움이 됩니다. 따라서, 플러터 앱에서 HTTP 통신을 사용하는 경우 데이터 압축을 적용해보는 것이 좋습니다.

참고자료