작성
·
49
0
안녕하세요 강사님. 강의 잘 듣고 있습니다.
handler.reject(err)를 발생시키는 경우가 총 3가지인 것 같은데요. 1번째는 secureStorage에 refreshToken이 없을 때, 2번째는 dio 요청 실패했을 때 즉 서버의 refresh 토큰의 기간이 만료되었을 때, 3번째는 토큰과 관계없는 서버의 예외 상황이 발생했을 때인 것 같은데요.
2번째 상황에서는 login 화면으로 다시 redirect 시키지만, 1, 3번째의 경우에는 따로 예외 스크린을 만들어서 여기로 라우팅시키는 것이 적합할까요? 만약 이렇게 처리하지 않는다면, 레드 스크린에 예외 로그가 남게 되는 것인가요?
또한 handler.reject(err)를 통해 예외가 전파되는 것 같은데, 2번째 상황에서는 어차피 로그인 화면으로 바로 넘어가므로 이를 굳이 발생시킬 필요는 없지 않나요?
답변 2
1
안녕하세요!
"로그인 화면으로 바로 넘어가므로 에러를 발생시킬 필요가 없지 않나요"
이 부분은 그렇게 볼 수도 있을 것 같습니다. 하지만 좋은 아키텍처라면 말씀하신 방식처럼 서로 다른 영역을 "묶어서" 생각하지 않는게 좋습니다. interceptor는 인터셉터의 역할만 하고 라우팅은 (뭐가 됐던) 파생된 결과에 대해 반응하는 역할만 해주는게 서로 디커플링에 유리합니다. 그러니 인터셉터는 인터셉터대로 에러를 던지고 라우트는 인터셉터와 관련 없이 토큰이 없으니 리라우팅을 하는거죠. 그럼 나중에 기능이 추가 됐을때 서로의 관계를 신경쓸 필요 없습니다.
1,3의 경우도 저는 마찬가지로 로그인 스크린으로 보낼 것 같습니다. 말씀하신 상황의 경우 사용자가 딱히 할 수 있는게 다시 로그인 해보는 것 뿐이기 때문입니다.
감사합니다!
말씀하신 부분을 아키텍처라고 부르기는 매우 애매하구요 어떻게 처리하냐는 프로젝트에 따라 다를 수 밖에 없습니다. 예를들어서 로그인을 하지 않은 상태라면 아무것도 보면 안되는 앱이라고 가정했을때 당연히 로그인 페이지 외에 다른곳으로 보내면 안되겠죠? 제가 말씀드릴 수 있는게 아니라 팀원과 상의해야할 부분입니다.
0
안녕하세요, 인프런 AI 인턴입니다. helloworld님, 질문 주셔서 감사합니다.
Flutter에서 다양한 예외 처리를 어떻게 할지에 대한 질문을 주셨네요. handler.reject(err)를 사용하는 상황에 대해 설명드리겠습니다.
SecureStorage에 refreshToken이 없는 경우: 이 경우에는 사용자가 인증되지 않은 상태로 간주되므로, 바로 로그인 화면으로 리다이렉트하는 것이 일반적입니다. 예외 화면을 따로 만드는 것보다는 사용자에게 다시 인증을 요구하는 것이 더 직관적일 수 있습니다.
Dio 요청 실패 시: 서버에서 refresh 토큰의 기간이 만료되었거나 인증이 필요할 때 주로 발생합니다. 이 상태에서는 사용자가 재인증을 해야 하므로 로그인 화면으로 리다이렉트하는 것이 맞습니다. handler.reject(err)를 통해 예외를 전파하는 것은 호출한 쪽에서 추가적인 로깅이나 특별한 처리를 할 수 있도록 하기 위함입니다. 따라서 예외가 던져지는 상황을 제어하는 것이 유리할 수 있습니다.
토큰과 관계없는 서버 예외 상황: 서버에서 에러가 발생했다면, 사용자에게 특별한 에러 메시지를 보여주거나 에러 스크린으로 리다이렉트하는 것이 유용할 수 있습니다. 이를 통해 사용자는 문제가 무엇인지 인지할 수 있으며, 개발자에게도 로그로 남아서 디버깅에 도움을 줄 수 있습니다.
추가로, handler.reject(err)를 통해 예외를 전파하는 것은 다중 에러 핸들링 체계를 갖추는 데 유용하며, 붙잡기 어려운 에러를 전체적으로 관리하는 데도 도움이 됩니다.
관련된 강의 및 질문을 확인하시고 더 깊이 있는 내용을 배우고 싶으시면, 아래 URL을 참고하세요:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
상세한 답변 정말 감사드립니다. 백엔드에서 5xx, 4xx 등의 예외를 프론트에 반환하면, 4xx인 경우 로그인 화면으로 이동하면 좋을 것 같지만, 5xx 즉 서버 내부에서 예외가 발생한 경우는 플러터에서 어떻게 처리하는 것이 좋을까요? 이도 마찬가지로 로그인 스크린으로 보내는 것이 상책일까요? 일반적으로 이를 처리하는 아키텍처가 궁금합니다.