본문 바로가기
카테고리 없음

Flutter 네트워크 처리 시 주의할 점

by lifechecking 2025. 3. 13.
반응형

flutter 네트워크 처리

 

Flutter에서 네트워크 처리는 앱의 핵심 기능 중 하나입니다. 하지만 HTTP 요청 실패, 데이터 파싱 오류, 성능 저하 등의 문제가 발생할 수 있습니다. 이 글에서는 Flutter 네트워크 처리를 할 때 발생하는 주요 문제와 해결 방법을 상세히 알아보겠습니다.

1. 네트워크 요청 실패 문제와 해결법

Flutter에서 http 패키지 또는 dio 패키지를 사용하여 API 요청을 보낼 때, 실패하는 경우가 종종 발생합니다. 주요 원인으로는 네트워크 연결 문제, 잘못된 요청 형식, 서버 오류 등이 있습니다.

주요 원인

  • 인터넷 연결이 불안정할 경우 발생합니다.
  • 잘못된 URL 또는 HTTP 메서드를 사용할 때 발생합니다.
  • API 응답 속도가 지연되었을 경우 발생합니다.
  • 서버에서 발생하는 500번대 오류가 생겼을 경우 발생합니다.

해결 방법

1. 인터넷 연결 상태 확인


import 'package:connectivity_plus/connectivity_plus.dart';

Future<bool> checkInternetConnection() async {
  var connectivityResult = await Connectivity().checkConnectivity();
  return connectivityResult != ConnectivityResult.none;
}

 

위 코드를 활용해 네트워크 상태를 미리 확인한 후 요청을 보낼 수 있습니다.

 

2. 올바른 요청 방식 사용


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

 

Uri.parse()를 사용해 URL을 올바르게 변환해야 합니다.
• GET, POST, PUT 등 올바른 HTTP 메서드를 사용해야 합니다.

 

3. 재시도 및 타임아웃 설정


try {
  final response = await http.get(Uri.parse('https://example.com/data'))
    .timeout(Duration(seconds: 5));
} catch (e) {
  print('요청 실패: $e');
}

 

timeout을 설정하여 무한 대기 상태를 방지합니다.
• 요청 실패 시 try-catch 블록을 사용하여 오류를 처리합니다.

2. JSON 데이터 파싱 오류와 해결법

API 응답을 JSON으로 받아 처리하는 과정에서 데이터 타입 오류, null 값 발생 등의 문제를 일으킬 수 있습니다.

주요 원인

  • API 응답 데이터 구조가 변경되었을 경우에 발생합니다.
  • 잘못된 JSON 형식을 통신할 경우에 발생합니다.
  • null 값을 올바르게 처리하지 않았을 경우에 발생합니다.

해결 방법

1. JSON 데이터 구조를 정확히 파악하기

API에서 반환하는 JSON 형식을 먼저 확인하고, 해당 구조에 맞게 모델 클래스를 생성하면 됩니다.

 

2. 올바른 JSON 디코딩 및 모델 변환


import 'dart:convert';

class User {
  final String name;
  final int age;

  User({required this.name, required this.age});

  factory User.fromJson(Map<String, dynamic> json) {
    return User(
      name: json['name'] ?? 'Unknown',
      age: json['age'] ?? 0,
    );
  }
}

void parseUserData(String jsonString) {
  final Map<String, dynamic> jsonData = json.decode(jsonString);
  final user = User.fromJson(jsonData);
  print('사용자 이름: ${user.name}, 나이: ${user.age}');
}

 

?? 연산자를 사용해 null 값을 방지합니다.
fromJson 팩토리 생성자를 활용해 JSON을 안전하게 파싱 합니다.

 

3. 서버 응답 데이터가 기대한 형식인지 확인하기


if (jsonData.containsKey('name') && jsonData.containsKey('age')) {
  // 데이터가 올바른 경우 처리
} else {
  throw Exception('API 응답 데이터 오류');
}

 

containsKey() 메서드를 사용해 필수 데이터가 존재하는지 확인해 보면 좋습니다.

3. 성능 최적화 및 보안 강화 방법

네트워크 요청이 많아지면 성능 저하가 발생할 수 있으며, 보안이 취약해질 수도 있습니다. 이를 방지하려면 다음 방법을 적용해야 합니다.

1) API 요청 최적화

  • 불필요한 중복 요청을 피하기 위해 캐싱(Cache)을 활용합니다.
  • 요청 빈도가 높은 경우 WebSocket을 사용하여 실시간 데이터를 주고받습니다.
  • http/2 프로토콜을 사용하여 요청 속도를 개선할 수 있습니다.

import 'package:shared_preferences/shared_preferences.dart';

Future<void> cacheData(String key, String value) async {
  final prefs = await SharedPreferences.getInstance();
  await prefs.setString(key, value);
}

Future<String?> getCachedData(String key) async {
  final prefs = await SharedPreferences.getInstance();
  return prefs.getString(key);
}

 

위 코드를 활용하면 API 데이터를 캐싱하여 불필요한 네트워크 요청을 줄일 수 있습니다.

2) API 보안 강화

  • HTTPS를 사용하여 데이터를 암호화합니다.
  • 민감한 데이터(예: API 키)는 앱 내부가 아니라 환경 변수 또는 보안 저장소에 저장합니다.
  • 요청 헤더에 인증 토큰을 추가하여 보안성을 강화합니다.

final response = await http.get(
  Uri.parse('https://example.com/data'),
  headers: {
    'Authorization': 'Bearer your_token_here',
    'Content-Type': 'application/json',
  },
);

 

Authorization 헤더를 추가해 인증을 강화합니다.
Content-Type을 명시하여 서버와의 통신을 안정적으로 유지합니다.

결론

Flutter에서 네트워크 처리 시 발생하는 주요 문제로는 요청 실패, JSON 파싱 오류, 성능 저하 및 보안 취약점이 있습니다. 이를 해결하기 위해 네트워크 상태 확인, 올바른 요청 방식 적용, JSON 파싱 오류 방지, API 요청 최적화 및 보안 강화 등의 전략을 적용해야 합니다. 올바른 네트워크 처리 방식을 익히면 더욱 안전하고 빠른 Flutter 앱을 개발할 수 있습니다.

반응형