Search

dio

dio

HTTP ์š”์ฒญ ์ฒ˜๋ฆฌ ๋ฐ ์ธํ„ฐ์…‰ํ„ฐ๋ฅผ ์ง€์›ํ•˜๋Š” Dart ์–ธ์–ด ๊ธฐ๋ฐ˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
Flutter์—์„œ Dio๋Š” ๊ฐ•๋ ฅํ•˜๊ณ  ์œ ์—ฐํ•œ HTTP ๋„คํŠธ์›Œํ‚น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. Dio๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด HTTP ์š”์ฒญ์„ ์‰ฝ๊ฒŒ ๋งŒ๋“ค๊ณ  ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” GET, POST, PUT, DELETE ๋“ฑ์˜ ๋ชจ๋“  HTTP ๋ฉ”์†Œ๋“œ๋ฅผ ์ง€์›ํ•˜๋ฉฐ, ์ฟ ํ‚ค ๊ด€๋ฆฌ, ํŒŒ์ผ ์—…๋กœ๋“œ ๋ฐ ๋‹ค์šด๋กœ๋“œ, ์š”์ฒญ ์ทจ์†Œ, ์š”์ฒญ ํƒ€์ž„์•„์›ƒ ๋“ฑ์˜ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ๋„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์š”๊ธฐ๋Šฅ

โ€ข
HTTP ์š”์ฒญ ์ฒ˜๋ฆฌ
โ€ข
์ธํ„ฐ์…‰ํ„ฐ
โ€ข
์ฟ ํ‚ค ๊ด€๋ฆฌ
โ€ข
ํŒŒ์ผ ์—…๋กœ๋“œ ๋ฐ ๋‹ค์šด๋กœ๋“œ
โ€ข
์š”์ฒญ ์ทจ์†Œ ๋ฐ ํƒ€์ž„์•„์›ƒ ์„ค์ •

์˜์กด์„ฑ

Dart install ๋ช…๋ น์–ด

dart pub add dio
Dart
๋ณต์‚ฌ

Flutter install ๋ช…๋ น์–ด

flutter pub add dio
Dart
๋ณต์‚ฌ

pubspec.yaml

dependencies: dio: ^5.8.0+1
Dart
๋ณต์‚ฌ

import

import 'package:dio/dio.dart';
Dart
๋ณต์‚ฌ

๊ธฐ๋ณธ ์˜ˆ์‹œ์ฝ”๋“œ

import 'package:dio/dio.dart'; void fetchData() async { Dio dio = Dio(); try { Response response = await dio.get('https://api.example.com/data'); print(response.data); } catch (error) { print('Error: $error'); } }
Dart
๋ณต์‚ฌ

dio ์ฃผ์š” ๋ฉ”์†Œ๋“œ

๋ฉ”์†Œ๋“œ

๊ธฐ๋Šฅ
์ฃผ์š” ๋ฉ”์†Œ๋“œ
GET
dio.get(url, {options, cancelToken, onReceiveProgress})
POST
dio.post(url, data, {options, cancelToken, onSendProgress, onReceiveProgress})
PUT
dio.put(url, data, {options, cancelToken, onSendProgress, onReceiveProgress})
DELETE
dio.delete(url, {data, options, cancelToken})

๋ฉ”์†Œ๋“œ ์ธ์ž(parameters)

์†์„ฑ
์„ค๋ช…
data
POST ๋ฐ PUT ์š”์ฒญ์—์„œ ์ „์†กํ•  ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์ •
options
์š”์ฒญ์— ๋Œ€ํ•œ ๋‹ค์–‘ํ•œ ์„ค์ •์„ ํฌํ•จํ•˜๋Š” ์˜ต์…˜ ๊ฐ์ฒด
cancelToken
์š”์ฒญ์„ ์ทจ์†Œํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ํ† ํฐ
onSendProgress
์—…๋กœ๋“œ ์ง„ํ–‰ ์ƒํ™ฉ์„ ์ถ”์ ํ•˜๋Š” ์ฝœ๋ฐฑ ํ•จ์ˆ˜
onReceiveProgress
๋‹ค์šด๋กœ๋“œ ์ง„ํ–‰ ์ƒํ™ฉ์„ ์ถ”์ ํ•˜๋Š” ์ฝœ๋ฐฑ ํ•จ์ˆ˜

์š”์ฒญ ๋ฉ”์†Œ๋“œ ๋ณ„ ์˜ˆ์‹œ์ฝ”๋“œ

โ€ข
get()
โ€ข
post()
โ€ข
put()
โ€ข
delete()

get()

import 'package:dio/dio.dart'; void fetchData() async { Dio dio = Dio(); try { Response response = await dio.get('https://api.example.com/data'); print(response.data); } catch (error) { print('Error: $error'); } }
Dart
๋ณต์‚ฌ

post()

import 'package:dio/dio.dart'; void postData() async { Dio dio = Dio(); Map<String, dynamic> data = { 'username': 'john_doe', 'email': 'john@example.com', }; try { Response response = await dio.post('https://api.example.com/users', data: data); print(response.data); } catch (error) { print('Error: $error'); } }
Dart
๋ณต์‚ฌ

put()

import 'package:dio/dio.dart'; void updateData() async { Dio dio = Dio(); Map<String, dynamic> data = { 'username': 'john_doe_updated', 'email': 'john@example.com', }; try { Response response = await dio.put('https://api.example.com/users/1', data: data); print(response.data); } catch (error) { print('Error: $error'); } }
Dart
๋ณต์‚ฌ

delete()

import 'package:dio/dio.dart'; void deleteData() async { Dio dio = Dio(); try { Response response = await dio.delete('https://api.example.com/users/1'); print(response.data); } catch (error) { print('Error: $error'); } }
Dart
๋ณต์‚ฌ

http vs dio

Dart์—์„œ HTTP ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•  ๋•Œ http ํŒจํ‚ค์ง€์™€ dio ํŒจํ‚ค์ง€๋Š” ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. ๊ฐ๊ฐ์˜ ์ฐจ์ด์ ์„ ํ‘œ๋กœ ์ •๋ฆฌํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

http vs dio ๋น„๊ต ํ‘œ

ํ•ญ๋ชฉ
http ํŒจํ‚ค์ง€
dio ํŒจํ‚ค์ง€
์„ค์น˜
dart pub add http
dart pub add dio
์‚ฌ์šฉ ๋ฐฉ์‹
๊ธฐ๋ณธ์ ์ธ HTTP ์š”์ฒญ ์ง€์›
๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์„ ๊ฐ–์ถ˜ HTTP ํด๋ผ์ด์–ธํŠธ
JSON ๋ณ€ํ™˜
์ˆ˜๋™์œผ๋กœ jsonDecode() ์‚ฌ์šฉ
์ž๋™์œผ๋กœ JSON ๋ณ€ํ™˜ ์ง€์›
์š”์ฒญ/์‘๋‹ต ์ธํ„ฐ์…‰ํ„ฐ
์—†์Œ
์š”์ฒญ/์‘๋‹ต ์ธํ„ฐ์…‰ํ„ฐ ์ง€์›
ํƒ€์ž„์•„์›ƒ ์„ค์ •
์—†์Œ
connectTimeout, receiveTimeout ์ œ๊ณต
FormData ์ง€์›
multipart ๋ฐฉ์‹ ์‚ฌ์šฉ
FormData ํด๋ž˜์Šค ์ œ๊ณต
ํŒŒ์ผ ์—…๋กœ๋“œ
์ง์ ‘ multipart/form-data ๊ตฌํ˜„
FormData์™€ onSendProgress ์ง€์›
์ŠคํŠธ๋ฆผ ์ง€์›
http.StreamedRequest ์‚ฌ์šฉ
๊ธฐ๋ณธ์ ์œผ๋กœ ์ŠคํŠธ๋ฆผ์„ ์ง€์›
์ทจ์†Œ ๊ธฐ๋Šฅ
์ง€์›ํ•˜์ง€ ์•Š์Œ
CancelToken์„ ์‚ฌ์šฉํ•ด ์š”์ฒญ ์ทจ์†Œ ๊ฐ€๋Šฅ
์—๋Ÿฌ ์ฒ˜๋ฆฌ
๋‹จ์ˆœํ•œ try-catch ์‚ฌ์šฉ
์ƒ์„ธํ•œ ์˜ˆ์™ธ ๋ฐ ์—๋Ÿฌ ํ•ธ๋“ค๋ง ์ง€์›

์–ด๋–ค ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•ด์•ผ ํ• ๊นŒ?

โ€ข
http ํŒจํ‚ค์ง€
โ—ฆ
๊ฐ„๋‹จํ•œ REST API ํ˜ธ์ถœ๋งŒ ํ•„์š”ํ•œ ๊ฒฝ์šฐ
โ—ฆ
ํŒจํ‚ค์ง€ ํฌ๊ธฐ๋ฅผ ์ตœ์†Œํ™”ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ
โ€ข
dio ํŒจํ‚ค์ง€
โ—ฆ
์ธํ„ฐ์…‰ํ„ฐ, ํƒ€์ž„์•„์›ƒ, ์š”์ฒญ ์ทจ์†Œ, ํŒŒ์ผ ์—…๋กœ๋“œ ๋“ฑ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ
โ—ฆ
JSON ๋ณ€ํ™˜๊ณผ ๊ฐ™์€ ํŽธ์˜ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ
http๋Š” ๊ฐ€๋ณ๊ณ  ๊ฐ„๋‹จํ•˜์ง€๋งŒ, dio๋Š” ๋” ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ์˜ ์š”๊ตฌ์‚ฌํ•ญ์— ๋”ฐ๋ผ ์„ ํƒํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค!