네트워크 통신
2024년 12월 2일약 1 분기술문서
Flutter 애플리케이션에서 네트워크 통신은 데이터를 가져오고 서버와 상호작용하는 중요한 요소입니다. 이 문서에서는 Flutter에서 사용 가능한 주요 네트워크 라이브러리인 Http, Dio, Retrofit, Chopper, graphql_flutter를 비교하고, 각 라이브러리의 특징과 사용법을 설명드리겠습니다.
Http
Http는 Flutter에서 기본적으로 제공되는 간단한 네트워크 통신 라이브러리입니다.
주로 소규모 프로젝트나 간단한 REST API 호출에 적합합니다.
주요 특징
- 간단한 GET, POST, 요청 처리합니다.
- 추가 설정 없이 빠르게 시작 가능합니다.
설치 방법
- pubspec.yaml에 추가:
dependencies:
http: ^1.2.2- 터미널에서 설치:
flutter pub add http
flutter pub get사용법
GET 요청
import 'package:http/http.dart' as http;
import 'dart:convert';
void fetchData() async {
final url = Uri.parse('https://example.com');
final response = await http.get(url);
if (response.statusCode == 200) {
var data = json.decode(response.body);
print('Data: $data');
} else {
print('Request failed with status: ${response.statusCode}');
}
}POST 요청
import 'package:http/http.dart' as http;
import 'dart:convert';
void sendData() async {
final url = Uri.parse('https://example.com');
final response = await http.post(
url,
headers: {'Content-Type': 'application/json'},
body: json.encode({'key': 'value'}),
);
if (response.statusCode == 201) {
var data = json.decode(response.body);
print('Created: $data');
} else {
print('Request failed with status: ${response.statusCode}');
}
}Dio
Dio는 강력한 HTTP 클라이언트로, 복잡한 네트워크 작업을 처리하기 위한 고급 기능을 제공합니다.
주요 특징
- Interceptor 지원합니다
- 파일 업로드/다운로드합니다
- 요청 취소 및 타임아웃 설정합니다
설치 방법
- pubspec.yaml에 추가:
dependencies:
dio: ^5.7.0- 터미널에서 설치:
flutter pub add dio
flutter pub get사용법
기본 설정
import 'package:dio/dio.dart';
void main() async {
Dio dio = Dio();
dio.options = BaseOptions(
baseUrl: "https://api.example.com",
connectTimeout: 5000,
receiveTimeout: 3000,
headers: {
"Content-Type": "application/json",
"Accept": "application/json",
},
);
}GET 요청
void fetchData() async {
var dio = Dio();
try {
final response = await dio.get('https://example.com');
print('Data: ${response.data}');
} catch (e) {
print('Error: $e');
}
}Interceptor 사용
void setupDioWithInterceptor() {
var dio = Dio();
dio.interceptors.add(InterceptorsWrapper(
onRequest: (options, handler) {
print('Request: ${options.method} ${options.path}');
return handler.next(options);
},
onResponse: (response, handler) {
print('Response: ${response.data}');
return handler.next(response);
},
onError: (DioError e, handler) {
print('Error: ${e.message}');
return handler.next(e);
},
));
}Retrofit
Retrofit은 Dio를 기반으로 설계된 HTTP 클라이언트로, REST API를 구조적으로 관리할 수 있도록 도와줍니다.
주요 특징
- API 호출 메서드를 인터페이스로 정의합니다
- 코드 생성 및 유지보수 용이합니다
설치 방법
- pubspec.yaml에 추가:
dependencies:
retrofit: ^3.0.0
dio: ^5.0.0
build_runner: ^2.0.0- 터미널에서 설치:
flutter pub get사용법
import 'package:retrofit/retrofit.dart';
import 'package:dio/dio.dart';
part 'api_service.g.dart';
@RestApi(baseUrl: "https://api.example.com")
abstract class ApiService {
factory ApiService(Dio dio, {String baseUrl}) = _ApiService;
@GET("/data")
Future<List<dynamic>> fetchData();
}Chopper
Chopper는 HTTP 요청을 모듈화하고 관리하기 쉽게 만들어주는 패키지입니다.
주요 특징
- 코드 생성으로 반복 작업 감소합니다
- JSON 데이터 직렬화/역직렬화 지원합니다
설치 방법
- pubspec.yaml에 추가:
dependencies:
chopper: ^4.0.0
build_runner: ^2.0.0- 터미널에서 설치:
flutter pub get사용법
import 'package:chopper/chopper.dart';
part 'api_service.chopper.dart';
@ChopperApi(baseUrl: "/data")
abstract class ApiService extends ChopperService {
@Get()
Future<Response> fetchData();
static ApiService create() {
final client = ChopperClient(
baseUrl: 'https://api.example.com',
services: [_$ApiService()],
);
return _$ApiService(client);
}
}graphql_flutter
graphql_flutter는 GraphQL API와의 통신을 지원하는 라이브러리로, GraphQL 쿼리와 뮤테이션을 처리할 수 있습니다.
주요 특징
- GraphQL 전용 기능입니다
- 실시간 데이터 구독 가능합니다
- 캐싱을 통한 성능 최적화합니다
설치 방법
- pubspec.yaml에 추가:
dependencies:
graphql_flutter: ^5.0.0- 터미널에서 설치:
flutter pub get사용법
import 'package:graphql_flutter/graphql_flutter.dart';
void fetchData() async {
final HttpLink httpLink = HttpLink('https://api.example.com/graphql');
final GraphQLClient client = GraphQLClient(link: httpLink, cache: GraphQLCache());
const String query = '''
query {
allItems {
id
name
}
}
''';
final QueryResult result = await client.query(QueryOptions(document: gql(query)));
print(result.data);
}비교 요약
| 패키지 | 주요 특징 | 장점 | 단점 |
|---|---|---|---|
| Dio | 고급 HTTP 클라이언트입니다 | Interceptor, 파일 처리 지원합니다 | 다소 복잡할 수 있습니다 |
| Http | 기본 HTTP 요청 지원합니다 | 가볍고 간단합니다 | 고급 기능입니다 부족합니다 |
| Retrofit | REST API 관리합니다 | 코드 생성 및 구조화 지원합니다 | 초기 설정합니다 필요합니다 |
| Chopper | 모듈화된 REST 요청 관리합니다 | 간단한 코드 생성과 유지보수입니다 | 제한된 기능입니다 |
| graphql_flutter | GraphQL API 통신 지원합니다 | 실시간 데이터 처리 가능합니다 | REST와 통합합니다 어렵습니다 |
- Http: 소규모 프로젝트나 간단한 통신 작업에 적합합니다.
- Dio: 대규모 프로젝트나 복잡한 네트워크 작업에 적합합니다.
- Retrofit: REST API를 구조적으로 관리하고자 할 때 추천됩니다.
- Chopper: 간단한 코드 생성과 유지보수가 필요할 때 적합합니다.
- graphql_flutter: GraphQL API를 사용하는 프로젝트에 적합합니다.
기업자
abdulaziz박종열