Flutter로 만들어진 Application은 Offline 상태에서도 작동 할 수 있지만, Online 상태에서 별도 서버와 유기적인 네트워킹을 통해 기능을 증폭적으로 넓히는데 큰 도움이 됩니다.

그렇기 위해선 Flutter에서 각종 API 서버에 연결해야하는 작업이 대다수의 앱에서 이루어지게 되고, 가장 많이 사용 되는 형태는 바로 HTTP REST 통신을 가장 많이 활용하게 됩니다.

HTTP 통신은 이미 웹이나 네이티브를 경험해보신 분들에게는 익숙한 통신 체계이실텐데요, 그런 분들께서는 화면 스크롤을 쭈욱 내리셔서 코드 구현 부분만 확인 하셔도 될 것 같습니다. TCP / IP 통신을 기반으로 한 HTTP 통신은 요청(Request)과 응답(Response)으로 이루어져 있으며, 주 데이터를 담고 있는 body / Meta Data 를 담고 있는 header로 Request와 Response가 이루어져 있습니다.

또한 GET / POST를 비롯하여 최근엔 PUT / PATCH / DELETE 등의 Method가 존재하며, 이 중 GET 방식과 여타 방식이 크게 다른데, GET방식은 전달하고자 하는 데이터를 Request body에 담는 것이 아닌, 요청하는 URL에 QueryString으로 달려 전달이 되게 됩니다. (쉽지 않죠)

더욱 자세한 HTTP REST 통신에 대해선 별도 글에서 다루기로 하고, 우리는 이 통신 체계를 사용해서 Flutter의 활용해야 한다는 점을 기억 해 둡시다.

Flutter로 HTTP 통신을 할 때 주로 사용되는 라이브러리가 크게 두 가지가 있습니다. 바로 http 와 dio 라이브러리입니다.

Untitled

Untitled

두 라이브러리 모두 2021년 11월 기준 Likes를 무려 3000을 넘긴 대단히 유명한 라이브러리이며, 이번 페이지에서의 설명은 조금 더 like수가 높고, dart 팀에서 개발 한 http 라이브러리 기준으로 하도록 하겠습니다.

라이브러리 사용 준비

우선 pubspec.yaml에 외부 라이브러리를 등록 후, flutter pub get 명령어를 실행하여야 합니다. 혹시 외부 라이브러리 등록이 생소하시다면 Import Outside Lib 문서를 확인 해주시기 바랍니다.

...
dependencies:
	flutter:
		sdk: flutter
  http: <latest_version>
...

그 후 사용 할 dart 파일 내에서 라이브러리를 import 해야 하는데, 아래와 유사하게 등록하여 사용하시면 됩니다.

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

이 구문에서 import 문에서 자주 보지 못하던 부분이 보이는데, 바로 as 문을 통해 http 라는 alias를 설정 한 부분입니다.

http 라이브러리 내에 Client, Request나 Response 객체의 경우 동일한 이름을 가진 객체를 소유한 라이브러리들이 워낙에 많기 때문에 아래 예시에서도 확인 할 수 있지만 http.Reqeust / http.Client 처럼 alias를 활용하여 많이 사용하게 됩니다.

아, 그리고 개발 당시에는 크게 중요하지 않지만 Android에서 Release를 해야 할 경우엔 권한(Permission)을 수정해야하는데, 바로 앱 에서 인터넷을 활용 할 수 있는 권한을 부여해 줘야 합니다.

<manifest ... >
	<uses-permission android:name="android.permission.INTERNET" />
	<application
		...>
	</application>
</manifest>

추후 카메라나 블루투스 등 각종 하드웨어 기능을 사용하기 위해서는 AndroidManifest에 권한을 부여하여야 하는 경우가 다수 있을 수 있으니, 조금 더 자세한 내용은 아래 링크들을 참조해주시기 바랍니다.

Uses permission : https://developer.android.com/guide/topics/manifest/uses-permission-element 부여 가능한 권한들 : https://developer.android.com/reference/android/Manifest.permission