본문 바로가기
Android/기본

[Android] Retrofit2와 RxJava의 통신 실패 관리

by LoseyKim 2024. 3. 13.
Retrofit2와 RxJava를 함께 사용하면, 비동기 네트워크 요청을 보다 선언적이고 반응형으로 처리할 수 있습니다.

 

안녕하세요.

Android앱 개발 시 네트워크 요청을 Retrofit2과 RxJava 를 많이 이용하는데요.

처음엔 RxJava의 'Throwable'과 Retrofit2의 'Response.isSuccessful() = false인 경우의 차이를 잘 몰랐었어요.

이 글에서는 차이가 무엇인지 설명해보려고 합니다.


Retrofit2와 RxJava의 조합

Retrofit2는 HTTP API를 자바 인터페이스로 쉽게 변환해주는 강력한 라이브러리입니다. RxJava와의 결합은 네트워크 요청의 비동기 처리를 더욱 효율적이고 선언적으로 만들어 줍니다. 이 조합을 통해 개발자는 네트워크 상태, 데이터 처리 등의 복잡한 로직을 간결하게 관리할 수 있게 됩니다.


오류 처리 예시

myApiCall.subscribe({ response ->
    if (response.isSuccessful) {
        // 응답 처리
    } else {
        // 서버 오류 처리 : Retrofit2의 Response.isSuccessful() 메서드 활용
        Log.e("Server Error", response.code().toString())
    }
}, { throwable ->
    // RxJava의 Throwable 오류 처리
    Log.e("API Error", throwable.message)
})

RxJava의 Throwable 오류 처리

Retrofit2와 RxJava를 함께 사용할 때, 'subscribe()' 메서드의 두 번째 인자는 네트워크 요청 실패 시 'Throwable' 객체를 받습니다.

  • 네트워크 통신 오류: 인터넷 연결 문제, 타임아웃, DNS 문제 등 네트워크와 관련된 오류가 발생할 경우 Throwable이 발생합니다.
  • 요청 구성 오류: 잘못된 URL, 헤더 또는 파라미터 등으로 인해 요청 자체가 잘못 구성되었을 때 발생합니다.
  • Serialization/Deserialization 오류: 요청의 본문이나 응답을 파싱하는 과정에서 발생하는 오류로, 주로 JSON이나 XML 등의 데이터 포맷이 예상과 다를 때 발생합니다.
  • e.g) 'IOException', 'HttpException', 'JsonParseException' 등

Retrofit2의 Response.isSuccessful() 메서드 활용

'subscribe()' 메서드의 첫 번째 인자는 요청이 성공적으로 수행되었을 때 응답을 받습니다. 여기서 'Response.isSuccessful()' 메서드를 통해 false인 경우 요청에 실패했다고 확인할 수 있습니다.

  • 서버 측 오류 응답: HTTP 상태 코드가 200-299 범위에 속하지 않는 경우, 즉 서버가 클라이언트의 요청을 성공적으로 처리하지 못했음을 나타내는 경우입니다.
  • 비즈니스 로직 오류: 요청이 성공적으로 서버에 도달했으나, 서버 측에서 처리하는 과정에서 발생한 오류나 조건 불충족으로 인해 실패한 경우입니다. 이러한 경우, 응답 본문에 오류에 대한 추가적인 정보가 포함될 수 있습니다.
  • e.g) '404 Not Found', '500 Internal Server Error' 등

참고문서

https://square.github.io/retrofit/

 

Retrofit

A type-safe HTTP client for Android and Java

square.github.io

https://github.com/ReactiveX/RxJava

 

GitHub - ReactiveX/RxJava: RxJava – Reactive Extensions for the JVM – a library for composing asynchronous and event-based p

RxJava – Reactive Extensions for the JVM – a library for composing asynchronous and event-based programs using observable sequences for the Java VM. - ReactiveX/RxJava

github.com