IT기술/플러터 (flutter)

Flutter API 연동 및 네트워크 통신 완벽 가이드: http vs dio 패키지 비교

후스파 2025. 7. 7. 12:45
반응형

플러터에서 API 연동 및 네트워크 통신을 구현하려면 대표적으로 http와 dio 패키지를 사용합니다.
두 라이브러리 모두 REST API, JSON 데이터 송수신 등 다양한 네트워크 작업을 쉽게 처리할 수 있습니다.


http 패키지 사용법

설치

pubspec.yaml에 아래를 추가합니다.

dependencies:
  http: ^1.2.0

GET 요청 예시

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

Future fetchData() async {
  final response = await http.get(Uri.parse('https://jsonplaceholder.typicode.com/posts/1'));
  if (response.statusCode == 200) {
    final data = jsonDecode(response.body);
    print(data);
  } else {
    throw Exception('Failed to load data');
  }
}
  • GET, POST, PUT, DELETE 등 다양한 HTTP 메서드 지원
  • 결과는 비동기(Future)로 반환되며, jsonDecode로 JSON 파싱

POST 요청 예시

final response = await http.post(
  Uri.parse('https://jsonplaceholder.typicode.com/posts'),
  headers: {'Content-Type': 'application/json; charset=UTF-8'},
  body: jsonEncode({'title': 'foo', 'body': 'bar', 'userId': 1}),
);

dio 패키지 사용법

설치

pubspec.yaml에 아래를 추가합니다.

dependencies:
  dio: ^5.4.0

설치 후 flutter pub get 실행.

GET 요청 예시

import 'package:dio/dio.dart';

Future fetchDataWithDio() async {
  final dio = Dio();
  final response = await dio.get('https://jsonplaceholder.typicode.com/posts/1');
  print(response.data);
}

dio의 주요 기능

  • 인터셉터(Interceptors): 요청/응답 가로채기 및 로깅, 토큰 자동 갱신 등 가능
  • 에러 처리: try-catch로 네트워크 오류 세분화
  • 파일 업로드/다운로드: Multipart 지원
  • 요청 취소, 진행률 표시 등 고급 네트워크 기능 제공
  • 기본 헤더, 타임아웃, 프록시 등 커스터마이징

공통 실전 팁

핵심 개발 포인트

  • 비동기 처리: Future, async/await 패턴 활용
  • 모델 클래스 사용: JSON 데이터를 Dart 객체로 변환할 때 factory 생성자 활용
  • 에러 및 예외 처리: 네트워크 오류, 타임아웃, 잘못된 응답 등 예외 처리 필수

안드로이드 권한

AndroidManifest.xml에 다음을 추가:

예시: API 데이터 리스트 가져오기

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

class Post {
  final int id;
  final String title;
  Post({required this.id, required this.title});
  factory Post.fromJson(Map json) =>
      Post(id: json['id'], title: json['title']);
}

Future> fetchPosts() async {
  final response = await http.get(Uri.parse('https://jsonplaceholder.typicode.com/posts'));
  if (response.statusCode == 200) {
    final List jsonList = jsonDecode(response.body);
    return jsonList.map((json) => Post.fromJson(json)).toList();
  } else {
    throw Exception('Failed to load posts');
  }
}

dio와 http 비교

사용 난이도쉬움중간~상
인터셉터미지원지원
파일 업로드제한적강력(Multipart)
에러 처리기본세분화 가능
권장 용도단순 요청/소규모 앱대규모/복잡한 앱

 

마무리

간단한 REST API 연동: http 패키지로 충분
복잡한 네트워크, 고급 기능 필요: dio 패키지 추천
공통: 비동기, 예외 처리, 모델 매핑 등은 필수
실제 프로젝트에서는 두 패키지 모두 널리 사용되며, 상황에 따라 선택해 사용하면 됩니다.
프로젝트 규모와 요구사항에 맞는 패키지를 선택하여 효율적인 네트워크 통신을 구현해보세요. http는 학습이 쉽고 가벼운 프로젝트에 적합하며, dio는 엔터프라이즈급 앱 개발에 필요한 고급 기능들을 제공합니다.

반응형