반응형

플러터에서 API 연동 및 네트워크 통신을 구현하려면 대표적으로 http와 dio 패키지를 사용합니다.
두 라이브러리 모두 REST API, JSON 데이터 송수신 등 다양한 네트워크 작업을 쉽게 처리할 수 있습니다.
http 패키지 사용법
설치
pubspec.yaml에 아래를 추가합니다.
dependencies:
http: ^1.2.0GET 요청 예시
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는 엔터프라이즈급 앱 개발에 필요한 고급 기능들을 제공합니다.
반응형
'IT기술 > 플러터 (flutter)' 카테고리의 다른 글
| Flutter 로컬 데이터 저장 완벽 가이드: Shared Preferences vs SQLite vs Hive 비교 (0) | 2025.07.09 |
|---|---|
| Flutter와 Firebase 연동 완벽 가이드: 인증, 실시간 DB, 스토리지 구현하기 (2) | 2025.07.08 |
| Flutter 성능 최적화 완벽 가이드: 최신 기법으로 앱 성능 극대화하기 (2) | 2025.07.07 |
| Flutter 상태 관리 솔루션 완벽 비교: Provider vs Bloc vs Riverpod vs GetX (0) | 2025.07.06 |
| Flutter 앱 아키텍처 완벽 가이드: MVC, MVVM, Clean Architecture 비교 분석 (0) | 2025.07.05 |