-
[Android] Android HTTP 통신 (Retrofit, HttpUrlConnection)Android 2021. 8. 28. 15:26728x90
Android 통신 라이브러리
네트워크에 연결된 앱의 대부분은 HTTP 를 사용하여 데이터를 송수신한다.
Android 플랫폼에서는 HttpsURLConnection 클라이언트가 포함되며 이 클라이언트는 TLS, 스트리밍 업로드 및 다운로드, 시간 제한 구성, IPv6, 연결 풀링을 지원한다.
또한 Retofit, OKHttp, Volley 등의 HTTP 클라이언트 라이브러리를 사용하여 좀더 쉽게 HTTP 통신이 가능하다
- DefaultHttpClient
- HttpUrlConnection
- Volley
- OkHttp
- Retrofit2
- ion
주요 역사
- 2007/11/05 : Android가 발표 - HttpClient 였으며 몇 가지 버그가 있었다.
- 2011/09/29 : HttpURLConnection을 권장하는 블로그가 나옴
- 2013/05/06 : OkHttp 1.0.0이 릴리즈 됨
- 2013/05/14 : Retrofit 1.0.0이 릴리즈 됨
- 2013/05/21 : Volley가 릴리즈 됨 - 사용법이 복잡했던 HttpUrlConnection 의 대안
- 2016 : Android6.0에서 HttpClient가 삭제 됨 - HttpClient에 의존하는 Volley 도 Deprecated 됨
- 2016/03/12 : Retrofit2가 릴리즈 됨
HttpUrlConnection
장점
- java.net에 포함된 클래스로 별도의 라이브러리 추가가 필요 없다.
- 자신이 원하는 방식으로 커스텀하여 사용할 수 있다.
단점
- 자유도가 높은 대신 직접 고려 및 구현해야하는 것들이 많다. (연결, 캐싱, 실패요청 재시도, 스레딩, 응답 분석, 오류 처리..)
구현 방법
URL url = new URL("http://www.android.com/"); HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); try { urlConnection.setDoOutput(true); urlConnection.setChunkedStreamingMode(0); OutputStream out = new BufferedOutputStream(urlConnection.getOutputStream()); writeStream(out); InputStream in = new BufferedInputStream(urlConnection.getInputStream()); readStream(in); } finally { urlConnection.disconnect(); }
- HttpURLConnection 얻기 : URL.openConnection() 으로 HttpURLConnection을 얻는다.
- request 준비 : request 기본 속성은 URI이다. 또한 request header 로 credencial, content types, session cookies와 같은 metadata도 포함할 수 있다.
- request body 업로드 : 옵셔널이며, 있을 경우 setDoOutput(true) 로 instance에 configure 한다. URLConnection.getOutputStream() 에서 반환된 스트림에 기록하여 데이터를 전송한다.
- response 읽기 : response header 에는 일반적으로 response body 의 content type, length, modified dates, session cookie 와 같은 metadata가 포함된다. URLConnection.getInputStream() 에서 반환된 스트림에서 reponse body 를 읽는다.
- 연결 끊기 : HttpURLConnection 의 disconnect() 를 호출하여 닫는다. 연결을 끊으면 연결이 보유한 리소스가 해제되어 닫히거나 재사용될 수 있다.
Retrofit
- 안드로이드와 Java 를 위한 type-safe 한 HTTP 클라이언트 라이브러리
- type-safe : 네트워크로부터 전달된 데이터를 우리 프로그램에서 필요한 형태의 객체로 받을 수 있다는 의미
- Retrofit은 기본적으로 OKHttp에 의존하고 있다.
구현 방법
1. HTTP API 를 인터페이스로 작성한다.
interface UserApi { @GET("users") fun get(): User }
2. Retrofit 클래스로 인터페이스를 구현하여 생성한다.
val retrofit = Retrofit.Builder() .baseUrl("https://user.com/") .addConverterFactory(GsonConverterFactory.create()) .build() val api = retrofit.create(UserApi::class.java)
var user: User = api.get()
참고
- https://pluu.github.io/blog/android/2016/12/25/android-network/
- https://developer.android.com/reference/java/net/HttpURLConnection
- https://galid1.tistory.com/617
728x90'Android' 카테고리의 다른 글
[Android] MVC vs MVP vs MVVM (0) 2021.08.29 [Android] RxJava (0) 2021.08.28 [코루틴] 코틀린(Kotlin)의 코루틴(Coroutine) (0) 2021.08.27 [코루틴] 코루틴(Coroutine) 이란 (0) 2021.08.22 Android Developer Roadmaps 2020 (0) 2020.12.05