[dart] HTTP 요청 시에 에러 복구 처리하기

Dart 언어를 사용하여 HTTP 요청을 보낼 때, 때로는 네트워크 연결이 불안정하거나 서버에서 오류가 발생하는 경우가 있습니다. 이러한 상황에서 우리는 요청을 재시도하거나 에러를 적절히 처리하여 사용자 경험을 향상시킬 수 있습니다.

Retry 로직 추가하기

Dart 언어에서는 http 패키지를 사용하여 HTTP 요청을 보낼 수 있습니다. 요청을 보낼 때마다 일정 횟수만큼 요청을 재시도하도록 하는 로직을 추가할 수 있습니다.

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

Future<void> sendRequestWithRetry() async {
  const maxRetries = 3;
  int attempts = 0;

  while (attempts < maxRetries) {
    try {
      final response = await http.get(Uri.parse('https://example.com/api'));
      if (response.statusCode == 200) {
        // 성공한 경우
        print(response.body);
        return;
      } else {
        // 에러 처리 로직
        print('서버 오류: ${response.statusCode}');
        return;
      }
    } catch (e) {
      // 에러 발생 시 재시도
      attempts++;
      print('에러 발생, 재시도: $attempts');
    }
  }
  print('요청에 실패했습니다');
}

위 코드에서 sendRequestWithRetry 함수는 최대 3회까지 요청을 재시도하는 로직을 포함하고 있습니다. http.get을 통해 요청을 보내고, 응답 상태 코드를 확인하여 성공과 실패를 처리합니다. 요청이 실패하는 경우, 재시도 횟수를 증가시키고 해당 내용을 출력합니다.

에러 핸들링

또 다른 방법은 요청을 보내는 중 발생하는 에러를 적절히 처리하는 것입니다. Dart에서는 try-catch 구문을 사용하여 에러를 핸들링할 수 있습니다.

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

Future<void> sendRequestWithErrorHandling() async {
  try {
    final response = await http.get(Uri.parse('https://example.com/api'));
    if (response.statusCode == 200) {
      // 성공한 경우
      print(response.body);
    } else {
      // 에러 처리 로직
      print('서버 오류: ${response.statusCode}');
    }
  } catch (e) {
    // 에러 핸들링
    print('에러 발생: $e');
  }
}

sendRequestWithErrorHandling 함수는 http.get을 통해 요청을 보내고, try-catch 구문을 사용하여 모든 종류의 에러를 핸들링합니다. 에러가 발생한 경우, 해당 내용을 출력합니다.

결론

Dart 언어를 사용하여 HTTP 요청을 보낼 때, 네트워크 연결이 불안정하거나 서버에서 오류가 발생하는 상황을 고려하여 적절한 에러 복구 처리 로직을 추가하는 것이 중요합니다. 위에서 소개된 방법들을 활용하여 안정적인 애플리케이션을 개발할 수 있습니다.

참고 자료