서두
저는 최근 nexon open api를 이용하여 "메이플스토리" 게임의 캐릭터 정보를 검색하는 앱을 만들고 있습니다.
해당 글 또한 해당 앱을 만들면서 retrofit2.HttpException을 적절한 에러 메시지로 표시하는것을 설명한글입니다.
해당 앱에대해 더 궁금하시다면 아래 링크를 방문해주시면 감사하겠습니다.
https://github.com/hegunhee/MapleFinder
GitHub - hegunhee/MapleFinder
Contribute to hegunhee/MapleFinder development by creating an account on GitHub.
github.com
사전 설명
해당 앱은 현재 Multi Module로 구성되어있고 다음 그림과 같습니다(해당 글에 포함되는 모듈만 그려놨습니다)

밥아저씨의 클린 아키텍쳐를 차용했습니다.
현 상황
현재 캐릭터 정보를 조회할때 만약 캐릭터의 이름이 잘못 입력되었다면 (네트워크 에러가 발생할경우)
아무런 에러 표시나 경고문도 나오지 않았습니다.
유저가 잘못된 이름으로 계속 조회를 할경우
성능에도 좋지 않고 유저에게 좋지않은 경험을 주는것이라 생각했습니다.
그렇기 때문에 에러가 발생했을때 에러 문구를 표시한다면
유저가 그에 해당하는 행동을 할 수 있기때문에 에러 핸들링과 에러 확인 UI를 만들기로 했습니다
하지만 에러를 파싱해보니 retrofit2.HttpException이고 해당 Exception은 retrofit2의존성을 가져야만 확인할 수 있었습니다.
feature 모듈에서는 retrofit2 의존성이 존재하지않았고 파싱할 방법이 존재하지 않았습니다.
해결 방법
기존에 사용하고있던 에러 핸들링의 경우 Repository에서 runCatching 함수를 이용하여 Result 객체를 받아
데이터 요청 성공 실패를 구분했습니다.
여기서 core:model 모듈에 custom exception class를 정의해 core:data 모듈의
repositoryImpl에서 httpException을 분리하면 어떨까 생각했습니다.


HttpException을 파싱하기위해 createResult함수를 만들었습니다.

createResult함수는 runCatching 함수를 모티브로해서 만들었습니다.
그리고 해당 커스텀 exception을 받은 UI단에서는

해당 커스텀 exception의 에러 코드와 메시지를 사용하여 유저에게 에러 정보를 표시했습니다.
결론
retrofit2.HttpException을 파싱해 custom exception에 넣어준다면 다른 exception도 쉽게 핸들링할 수 있을것입니다.
만약 더 좋은 방법이 있다면 댓글 남겨주시면 감사하겠습니다.
긴 글 읽어주셔서 감사합니다.
'Study > Android' 카테고리의 다른 글
| 앱 현지화, 개별 앱 언어 변경 설정 (0) | 2025.05.04 |
|---|---|
| [Hilt] @Provides를 사용하는 경우 object 키워드로 클래스를 정의해야 하는 이유 (2) | 2024.12.18 |
| Moshi에서 kotlinx.serialization로 변경하게된 이유 (0) | 2024.03.03 |
| compileSdk vs targetSdk (0) | 2024.02.21 |
| BindingAdapter 적용 (0) | 2022.04.13 |