Retrofit에 대한 간단 정리
https://superohinsung.tistory.com/151
OkHttp란
OkHttp는 안드로이드 개발에서 인터넷을 통한 데이터 교환을 위해 널리 사용되는 오픈소스 HTTP 클라이언트 라이브러리이다.Square Inc.에 의해 개발되었으며, HTTP 요청을 보내고 받는 것을 간소화하고, 네트워크 속도가 느린 환경에서도 효율적으로 동작하도록 설계되었다. OkHttp는 자동으로 네트워크 연결문제를 감지하고, 필요한 경우 요청을 재시도한다. 그리고 HTTPS 통신을 기본적으로 지원해서 보안성을 강화한다.
주요 기능
- HTTP/2 지원 : 여러 HTTP 요청을 동시에 처리할 수 있어 효율성을 높인다.
- 연결 풀링 : 서버와의 연결을 재사용하여, 연결 시간을 줄이고 전체적인 네트워크 성능을 향상 시킨다.
- GZIP 압축 : 네트워크를 통해 전송되는 데이터의 크기를 줄여, 데이터 사용량과 전송 시간을 절약할 수 있다.
- 캐싱 : 자주 요청되는 데이터를 로컬에 저장하며, 서버에 대한 요청 수를 줄이고 빠르게 데이터를 로드할 수 있다.
- 자동 재시도 및 리다이렉션 : 네트워크 오류나 3xx 응답 코드에 대해서 자동으로 처리한다.
OkHttp 사용기
Gradle 의존성 추가
implementation 'com.squareup.okhttp3:okhttp:4.x.x'
Kotlin 사용기
val client = OkHttpClient()
val url = "https://www.example.com"
val request = Request.Builder()
.url(url)
.build()
client.newCall(request).enqueue(object : Callback {
override fun onFailure(call: Call, e: IOException) {
e.printStackTrace()
}
override fun onResponse(call: Call, response: Response) {
response.use {
if (it.isSuccessful) {
val myResponse = it.body?.string()
// 응답 처리
}
}
}
})
OkHttp와 retrofit 비교
OkHttp : HTTP 클라이언트 라이브러리로, HTTP와 HTTPS 통신을 위한 효율적인 방법을 제공한다. OkHttp는 네트워크 요청을 직접적으로 처리하며, 연결풀링, GZIP압축, 캐싱 등의 기능을 통해 네트워크 통신을 최적화한다. 또한 요청의 자동 재시도, 요청 실패 시 복구 매커니즘 등을 제공하여 안정적인 네트워크 통신을 보장한다.
Retrofit : REST API를 자바 인터페이스로 변환해주는 타입-세이프한 HTTP 클라이언트 라이브러리이다. Retrofit은 내부적으로 OkHttp를 사용하며, OkHttp 위에 빌드되어 좀 더 고수준의 추상화를 제공한다. Retrofit을 사용하면, HTTP 요청을 보내고 받는 코드를 작성하는 대신, 인터페이스에 어노테이션을 추가하여 네트워크 요청을 선언적으로 처리할 수 있다.
- 목적과 사용성: OkHttp는 HTTP 통신의 기본적인 요소를 직접 제어할 수 있는 낮은 수준의 라이브러리이다. 반면, Retrofit은 REST API 호출을 쉽게 만들어주는 더 높은 수준의 추상화를 제공한다.
- 기능성: OkHttp 자체는 네트워크 요청과 응답 처리에 집중하고 있다. Retrofit은 OkHttp 위에 구축되어 API 호출의 선언적 정의, JSON 변환(예: Gson, Moshi), 멀티파트 요청 등의 추가 기능을 제공한다.
- 사용 사례: 단순한 HTTP 요청이나 매우 특수한 네트워크 요구 사항이 있는 경우 OkHttp를 직접 사용할 수 있다. 하지만 대부분의 REST API 통신을 구현하는 경우 Retrofit이 더 편리하고 효율적이다.
결론적으로, OkHttp와 Retrofit은 각각의 장점이 있는 서로 다른 레벨의 라이브러리이며, 프로젝트의 요구 사항에 따라 선택하여 사용할 수 있다. 많은 안드로이드 개발자들은 이 두 라이브러리를 함께 사용하여 네트워크 통신의 효율성과 개발의 편리성을 동시에 높이고 있다.
OkHttp Code와 Retrofit Code
Okhttp Code
val client = OkHttpClient()
val request = Request.Builder()
.url("https://www.example.com")
.build()
client.newCall(request).enqueue(object : Callback {
override fun onFailure(call: Call, e: IOException) {
e.printStackTrace()
}
override fun onResponse(call: Call, response: Response) {
if (response.isSuccessful) {
val myResponse = response.body?.string() // 응답 처리
// UI 업데이트는 메인 스레드에서 실행해야 합니다.
}
}
})
Retrofit Code
val retrofit = Retrofit.Builder()
.baseUrl("https://www.example.com")
.addConverterFactory(GsonConverterFactory.create()) // JSON 파싱을 위한 Gson 컨버터
.build()
interface ApiService {
@GET("endpoint")
fun getMyData(): Call<MyDataType>
}
val service = retrofit.create(ApiService::class.java)
val call = service.getMyData()
call.enqueue(object : Callback<MyDataType> {
override fun onResponse(call: Call<MyDataType>, response: Response<MyDataType>) {
if (response.isSuccessful) {
val data = response.body() // 서버로부터 받은 데이터
// UI 업데이트는 메인 스레드에서 실행해야 합니다.
}
}
override fun onFailure(call: Call<MyDataType>, t: Throwable) {
t.printStackTrace()
}
})
'Android > Study' 카테고리의 다른 글
[Android] runOnUiThread()에 대해서 공부해보자 (0) | 2024.06.01 |
---|---|
[Android] onNewIntent()에 대해서 알아보자. (0) | 2024.04.20 |
[Android] JUnit4으로 테스트 코드 작성하기 (0) | 2024.03.12 |
[Android] Room이란 (0) | 2024.03.11 |
[Android] abstract class를 이용하여 ViewBinding을 쉽게 사용하기 (0) | 2024.02.29 |