ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Android] Android HTTP 통신 (Retrofit, HttpUrlConnection)
    Android 2021. 8. 28. 15:26
    728x90

    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();
       }

     

    1. HttpURLConnection 얻기 : URL.openConnection() 으로 HttpURLConnection을 얻는다.
    2. request 준비 : request 기본 속성은 URI이다. 또한 request header 로 credencial, content types, session cookies와 같은 metadata도 포함할 수 있다.
    3. request body 업로드 : 옵셔널이며, 있을 경우 setDoOutput(true) 로 instance에 configure 한다. URLConnection.getOutputStream() 에서 반환된 스트림에 기록하여 데이터를 전송한다.
    4. response 읽기 : response header 에는 일반적으로 response body 의 content type, length, modified dates, session cookie 와 같은 metadata가 포함된다. URLConnection.getInputStream() 에서 반환된 스트림에서 reponse body 를 읽는다.
    5. 연결 끊기 : 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()

     

     

     

     

    참고

     

    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
Designed by Tistory.