Android를 개발하다보면 늘 보는 Retrofit입니다.
생각없이 사용하다보면 그냥 넘어갈 수 있는 부분들을 한번 해보고 넘어가겠습니다. 예를 들면 아래와 같은 것들입니다.
- Retrofit이 없어도 HTTP 통신이 가능할까?
- GSON / OKHTTP라는 애들은 뭘까
- Reponse / Call의 차이점은 무엇인가?
와 같은 그냥 지나가기 쉬운 의문들입니다.
한번 하나씩 해보겠습니다.
- Retrofit이 없어도 HTTP 통신이 가능할까?
당연히 가능합니다. 예전에 Retrofit이 없을 때도 Http통신을 했고, 2011/09/29 에는 구글에서 공식 블로그에 HttpURLConnection을 권장하는 글이 올라오기도 했습니다.
- 2007/11/05 : Android가 발표
- 2011/09/29 : HttpURLConnection을 권장하는 블로그가 나옴
- 2013/05/06 : OkHttp 1.0.0이 릴리즈 됨
- 2013/05/14 : Retrofit 1.0.0이 릴리즈 됨
- 2013/05/21 : Volley가 릴리즈 됨
- 2016 : Android6.0에서 HttpClient가 삭제 됨
- 2016/03/12 : Retrofit2가 릴리즈 됨
이후 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/
https://galid1.tistory.com/501
https://square.github.io/okhttp/interceptors/
https://jeongupark-study-house.tistory.com/208
'Android(Kotlin)' 카테고리의 다른 글
Android Notification (0) | 2022.03.06 |
---|---|
Android Studio Bumblebee classpath (0) | 2022.02.20 |
Retrofit - Custom Request Headers | Android Studio Tutorial (0) | 2022.02.04 |
Retrofit - Send a simple POST Request | Android Studio Tutorial (0) | 2022.02.03 |
Retrofit - Display results in a RecyclerView | Android Studio Tutorial (0) | 2022.02.03 |