• 카테고리

    질문 & 답변
  • 세부 분야

    모바일 앱 개발

  • 해결 여부

    해결됨

네트워크 통신 에러 처리

23.09.06 14:20 작성 조회수 170

0

안녕하세요. 수강 잘 하고 있습니다.

dio package를 사용하여 네트워크 처리를 하고 있는데 에러 처리관련해서 어디 부분에서 하는 것이 좋을 지 고민하다가 질문 올립니다.

현재는 viewmodel -> usecases -> usecase -> repository -> remoteDataSource -> dio 이렇게 의존성을 받고 있고, remoteDatasource 에서 필요한 데이터만 List<StudentModel> 이런식으로 뷰모델까지 보내고 있습니다. 그러나 네트워크 에러가 발생했을 때는 remoteDataSource에서 List<StudentModel> 이 아닌 실패했을 떄 모델을 전송하게 되는데 (ErrorModel) 그렇게 되면 뷰모델까지 타입이 동적으로 전해지기때문에 이게 맞나 생각이 들기도 합니다.

혹은 dio 부분에서 400 500 에러 일때 alert 를 띄울까 생각을 했지만 그렇게 되면 context를 dio 까지 끌고 가야되고 전역으로 관리해야 되서 맞지 않다고 생각했습니다. 실제로는 어떻게 처리하는 것이 현명할지 질문드립니다. 감사합니다.

답변 1

답변을 작성해보세요.

0

원하시는 해답은 중급 1편 - 클린아키텍처의 이미지 검색 앱에서 이미 다루었는데요.

Result 클래스를 만들어서 활용하시면 됩니다.

freezed 를 사용한 코드로 예시를 들면 다음과 비슷한 형태로 하시면 되겠습니다.

@freezed
sealed class Result<T> with _$Result<T> {
  const factory Result.success(T data) = Success;
  const factory Result.error(ErrorModel errorModel) = Error;
}

소스코드 참고: https://github.com/junsuk5/flutter-clean-architecture-course/blob/master/image-search-app/lib/data/data_source/result.dart

요즘은 freezed 보다 dart 공식 문법을 활용하는 것을 추천하오니 관련 내용 유튜브에 올린 영상을 참고하시기 바랍니다. https://youtu.be/Cl9FcNNbiu8?si=I6teJPb0K8WOG5-4

 

또한, dio 의 에러 처리의 경우에 alert 을 띄우려는 경우에도, 역시 중급 1편의 이미지 검색 앱에서 네트워크 에러 처리를 했던 것 처럼 UI 까지 이벤트를 Stream을 통해 끌고 올라와서 UI 에서 alert 을 띄우는 것을 추천합니다. Context 를 UI 보다 아래로 내려보내는 것은 대표적인 안티패턴이니까요.

이해가 안 되는 부분이 있다면 또 질문 주시기 바랍니다.

김보겸님의 프로필

김보겸

질문자

2023.09.07

제가 필요했던 답변입니다. 감사합니다!!