Android(Kotlin)

Retrofit에 관하여 - Call/Response, GSON, OKHttp

----___<<<<< 2022. 2. 5. 13:00

 

 Android를 개발하다보면 늘 보는 Retrofit입니다.

 

 생각없이 사용하다보면 그냥 넘어갈 수 있는 부분들을 한번 해보고 넘어가겠습니다. 예를 들면 아래와 같은 것들입니다.

 

 - Retrofit이 없어도 HTTP 통신이 가능할까?

 - GSON / OKHTTP라는 애들은 뭘까

 - Reponse / Call의 차이점은 무엇인가?

 

 와 같은 그냥 지나가기 쉬운 의문들입니다.

 

 한번 하나씩 해보겠습니다.

 

 - Retrofit이 없어도 HTTP 통신이 가능할까?

  

 당연히 가능합니다. 예전에 Retrofit이 없을 때도 Http통신을 했고, 2011/09/29 에는 구글에서 공식 블로그에 HttpURLConnection을 권장하는 글이 올라오기도 했습니다.

 

  

 이후 Retrofit이 나오고 난 이후, 대세는 Retrofit으로 변경되었습니다.

 

 - 그렇다면 Retrofit을 쓸 때 따라오는 GSON은 무엇인가?

 

 GSON 애는 찾아보면 역직렬화 뭐 이런 이야기가 나오는데 사실 별거 없습니다.

 

 아래처럼 자바 객체를 제이슨 혹은 그 반대로 하는 역할을 해주는 애입니다.

 

JSON Object -> JAVA Object

JAVA Object -> JSON Object

 

 - 그런데 Retrofit 예제를 보면 OKHttp 라는 애도 사용하던데?

 

 네크워크 통신을 할 때 OKHttp와 Retrofit를 사용하던데, 그러면 얘네들은 완전히 다른 것인가?에 대한 의문이 남습니다.

 

 이 곳을 보면 Retorift은 내부적으로 OKHttp를 사용합니다. 때문에 유사한 방식으로 Http 통신을 하는 것이라고 알고 있어도 될 것 같습니다.

 

 - 그럼 OKHttp는 어떨 때 쓰는데?

 

 여기에 대해서 궁금해하시면, interceptors라는 개념이 나오는데, 얘네들을 찾아보면 아래와 같이 나옵니다.

 

Interceptors are a powerful mechanism that can monitor, rewrite, and retry calls. Here’s a simple interceptor that logs the outgoing request and the incoming response.

 

Choosing between application and network interceptors

Each interceptor chain has relative merits.

Application interceptors

  • Don’t need to worry about intermediate responses like redirects and retries.
  • Are always invoked once, even if the HTTP response is served from the cache.
  • Observe the application’s original intent. Unconcerned with OkHttp-injected headers like If-None-Match.
  • Permitted to short-circuit and not call Chain.proceed().
  • Permitted to retry and make multiple calls to Chain.proceed().
  • Can adjust Call timeouts using withConnectTimeout, withReadTimeout, withWriteTimeout.

 

 

간단하게 설명하면 Http 통신을 할 때 다양한 편의 기능을 제공하고, Header 같은 부분을 설정할 때 용이합니다.

 

 

 - 그럼 Http 통신을 하다가 나오는 Call과 Response는 뭐가 다른데?

 

 Call같은 경우는 명시적으로 Success / Fail을 나눠서 처리할 수 있습니다.

 Response 같은 경우는 서버에서 Status Code를 받아서 케이스를 나눠 처리해줄 수 있습니다.

 

 Callback Hell을 방지하려면 Response를 이용해서 하는 것이 개인적으로 더 선호하는 방법입니다.

 

 

 

- 참조

 

https://pluu.github.io/blog/android/2016/12/25/android-network/

 

Pluu Dev - [번역] Android 통신 라이브러리의 역사를 되돌아본다

Navigating with Compose ~ Serializable/Parcelable 데이터 전달 ~ 2부 Posted on 04 Feb 2022 Navigating with Compose ~ Serializable/Parcelable 데이터 전달 ~ 1부 Posted on 03 Feb 2022 AndroidX Jetpack ~ Paging 데이터의 위치 살펴보기 Poste

pluu.github.io

https://galid1.tistory.com/501

 

Java - Json 과 Gson 이란?

Json과 Gson JSON 을 사용하기전에 당연히 여러곳에서 무엇인지를 검색한 뒤에 사용했지만 역시 설명하려고 하면 버벅거리게 되는것 같습니다. 아무래도 정확히 알지 못해서인것 같습니다. 때문에

galid1.tistory.com

https://heepie.me/282

 

[2018.03.17] 99. OkHttp VS Retrofit

도입 이번 포스팅에서는 Okhttp 라이브러리와 Retrofit 라이브러리의 개념과 차이점에 대해 정리 할 예정이다. 안드로이드 개발을 하면서 서버와 통신하기 위해 가장 많이 사용하는 라이브러리이지

heepie.me

https://square.github.io/okhttp/interceptors/

 

Interceptors - OkHttp

Interceptors Interceptors are a powerful mechanism that can monitor, rewrite, and retry calls. Here’s a simple interceptor that logs the outgoing request and the incoming response. class LoggingInterceptor implements Interceptor { @Override public Respon

square.github.io

https://medium.com/mj-studio/%EC%84%9C%EB%B2%84-%EC%9D%91%EB%8B%B5-cherry-pick-okhttp-interceptor-eaafa476dc4d

 

🍒서버 응답 Cherry Pick!🍒 (OkHttp Interceptor)

대다수의 규모가 있는 어플리케이션들은 자체 서버를 운영하며 REST API를 기반으로 둔 서버 통신들은 데이터를 JSON의 형태로 주고받습니다. 안드로이드의 개발자라면 이런 서버들과 REST API를 이

medium.com

https://jeongupark-study-house.tistory.com/208

 

Retrofit call 과 Response 차이

Android 개발 시 네트워크 작업할 때 가장 많이 쓰이는 라이브러니는 Retrofit 입니다. (Retrofit의 상세 내용은 https://square.github.io/retrofit/ 여기서 확인하면 됩니다) 여기서 알아볼 내용은 Retrofit을..

jeongupark-study-house.tistory.com