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' 등
참고문서
'Android > 기본' 카테고리의 다른 글
[Android] 앱 아키텍처 가이드 (0) | 2024.11.12 |
---|---|
[Android]안드로이드 스튜디오 로그(Log) 가이드 (0) | 2024.11.10 |
[Android] Android 자동 테스트 작성 및 유형 (0) | 2024.09.06 |
[Android] 발생할 수 있는 Exception종류와 처리 방법 (1) | 2024.06.14 |
[Android] Deep Link 딥링크 (0) | 2024.03.18 |
[Android] MVVM 패턴(Model-View-ViewModel) (1) | 2024.03.14 |
[Android] Activity Lifecycle 액티비티 생명주기 (0) | 2024.03.08 |
[Android] App components 앱 구성요소 (0) | 2024.03.06 |