안드로이드 통신의 간단한 역사
초기 안드로이드 통신은 HttpClient를 사용했습니다. but 버그로 인해 HttpUrlConnection이 권장되어 사용되었지만 사용법이 복잡하다는 문제가 있었습니다. 이후로 Google에서 만든 Volley가 나와서 표준 라이브러리처럼 사용되었습니다.
하지만 안드로이드 5.1(롤리팝)에서 HttpClient가 Deprecated 된 후, HttpClient에 의존하던 Volley도 Deprecated 되었습니다. 이로 인해 Square에서 만들어진 라이브러리인 OkHttp와 그 래퍼인 Retrofit이 하나의 필수적인 라이브러리로 자리매김하게 되었습니다.
정리 : HttpClient -> HttpUrlConnection -> Volley -> OkHttp & Retrofit
Okhttp3 란???
Okhttp3는 REST API, HTTP 통신을 쉽게 구현할 수 있도록 다양한 기능을 제공해주는 JAVA 라이브러리입니다. 쉽게 HTTP 기반의 request/response를 할 수 있도록 도와주는 오픈소스 라이브러리이다.동기, 비동기 방식을 각각 제공하여 개발자가 선택하여 개발할 수 있다.
Okhttp 라이브러리는 Retrofit이라는 라이버러리의 베이스가 됩니다.
Retrofit
Retrofit은 OkHttp를 개발한 Square에서 2013/05/14 에 발표한 라이브러리입니다.
HttpURLConnection을 사용하기 편하도록 랩핑한게 Volley라면 Retrofit은 OkHttp를 랩핑한 것입니다.
Retrofit의 장점 :
참고 : https://medium.com/mobile-app-development-publication/okhttp-or-retrofit-for-android-fc00f7aa3daf
1. retrofit 원하는 요청 방식과 파라미터에 대해 정의할 때 가독성이 좋음.
Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())
.baseUrl(BASE_URL)
.build()
retrofit :
// retrofit
interface wikiApiServe{
@GET(END_POINT)
fun hitCountCheckCall(
@Query(PARAM_ACTION) action: String,
@Query(PARAM_FORMAT) format: String,
@Query(PARAM_LIST) list: String,
@Query(PARAM_SRSEARCH) srsearch: String)
: Call<Model.Result>
}
okhttp3 :
// okhttp3
val request = Request.Builder().url("$BASE_URL$BASE_PATH/?" +
"$PARAM_ACTION=$VALUE_QUERY&$PARAM_FORMAT=$VALUE_JSON&" +
"$PARAM_LIST=$VALUE_SEARCH&$PARAM_SRSEARCH=$searchString")
.build()
2. retrofit 에는 GsonConverterFactory 이용해 json을 바로 객체로 변환가능. 그러나 okhttp3는 별도의 과정이 더 필요하다.
3. Retrofit의 경우 enqueue를 사용하면 네트워크 호출이 자동으로 백그라운드에서 이루어진다. 그리고 결과가 반환되면 자동으로 메인스레드에 전달되기 때문에 Toast와 같은 UI 관련 메서드에 결과값을 바로 사용할 수 있다.
override fun onResponse(call: Call<Model.Result>,
response: Response<Model.Result>) {
Toast.makeText(...).show()
})
그러나 okhttp3에서는 runOnUiThread을 사용해야함
override fun onResponse(call: okhttp3.Call,
response: okhttp3.Response) {
runOnUiThread {
Toast.makeText(...).show()
}
}
Retrofit과 Okhttp 동시 사용
두 라이브러리의 이점이 다름.
- OkHttp의 경우 OkHttp Client에 네트워크 Intercepter를 통해 API가 통신되는 모든 활동을 모니터링 할 수 있으며 서버 통신 시간 조절이 가능하다는 장점이 있다
- Retorfit2의 parameter, Query, Header 등의 매핑 작업과 결과 처리 작업등 반복되는 작업들을 편하게 처리할수 있어음
Volley ?
안드로이드에서 네트워크 통신을 할때 HttpURLConnection을 사용, 하지만 요청과 응답을 위한 코드의 양이 많고 스레드를 사용하면서 더 많은 코드를 작성해야함. 그래서 나온게 Volley.
장점
- 네트워크 요청의 자동 예약
- 여러 개의 동시 네트워크 연결
- 표준 HTTP 캐시 일관성을 갖춘 투명한 디스크 및 메모리 응답 캐싱
- 요청(Request)의 우선순위 자동으로 관리
- 취소 요청 API
- 강력한 정렬 기능을 이용해 네트워크에서 비동기식으로 가져온 데이터로 UI를 올바로 채우는 작업을 쉽게 실행함
HttpClient가 Deprecated 됨
'안드로이드 자바 코틀린 기초 지식 > 안드로이드 기초 지식' 카테고리의 다른 글
Gson 이란??? (0) | 2022.08.25 |
---|---|
Room 데이터베이스 라이브러리 (0) | 2022.08.24 |
싱글톤(singleton) 패턴 (0) | 2022.08.09 |
SharedPreferences (0) | 2022.08.01 |
안드로이드 - Service (0) | 2022.08.01 |