웹서비스를 유지보수하면서 버그를 수정하거나 일부 기능을 개선하고 새로운 기능을 개발하면서 점점 Error를 처리하는게 고민거리가 되어가고 있습니다. 지금 유지보수 하고 있는 프로젝트는 Error 상황에 대해서 깊게 고민하지 않고 만들어져 있는데 그 결과 아래와 같은 문제점이 있어서 유지보수 할 수록 마음의 짐을 쌓는 기분이 들었습니다.
우선 생각나는 것만 적어보았습니다.
Error는 분명 발생하지 않는게 제일 좋은 상황이기에 저도 그동안 소홀히 생각하고 있었던 것 같습니다. 그러나 프로젝트를 유지보수 해보면서 Error 처리가 제대로 되어 있지 않을 때 개발이 어려워 지는 것을 느끼고 있고, 다양한 사용자가 다양한 환경에서 이용하는 서비스에서 Error가 발생하지 않는 다는 것은 거의 불가능하기에 Error를 제대로 처리하는 것이 개발자에게도 서비스에도 좋은 것이라는 것을 깨달았습니다.
Error Handling은 결국 'Error 상황 발생'부터 'Error 상황 종료'까지의 흐름이라고 생각합니다. (당연한 소리)
지금까지는 이 시작부터 끝까지의 흐름이 중구난방이었지만, 앞으로는 체계를 잡고 싶습니다.
이렇게 체계를 잡기 위해서는 어떤 것들을 고려해야할지 머리에 떠오르는 것들을 정리해봅니다.
Error 발생원에 따라서 Error를 감지할 수 있는 위치와 Error 내용이 다르기 때문에 발생원에 따라서 각기 다른 흐름으로 처리가 시작되어야 한다고 생각합니다.
Error가 발생하면 거의 대부분의 경우에는 사용자에게 추가적인 액션을 줘야한다고 생각합니다. 그렇지 않으면 사용자는 무작정 기다리다가 결국 '이거 왜이래. 별로네' 생각하고 서비스를 떠나버릴 것입니다.
개발자 입장에서는 Error 상황을 종료하는 방법이 정해져 있어야 사람이 바뀌거나 세월이 흘러도 항상 일관적인 Error 상황 종료를 할 수 있을 것입니다.
마지막에 넣은 Error Reporting은 단독으로 수행하면 안된다고 생각합니다. Error Reporting은 개발자가 사용자에게서 발생하는 Error 정보를 확인하기 위한 방법일 뿐이고 사용자가 화면에서 확인할 수 있는 액션은 없기 때문에 다른 종료 방법과 함께 수행되야 한다고 생각합니다.
Error 발생원 중에서 가장 예측 가능한 발생원은 Network, API Error라고 생각합니다. 저는 axiox와 react-query 라이브러리를 사용하고 있는데요. 이러한 상황에서 Error 처리 로직을 작성할 수 있는 위치는 아래와 같습니다.
위의 목록 중에는 전역적인 처리를 할 수 있는 부분도 있고 지역적인 처리만 할 수 있는 부분도 있습니다. Error 처리 방법에 따라서 전역적으로 처리하는게 좋은 경우가 있고 지역적으로 처리하는게 좋은 경우가 있을 것입니다. 이 기준이 세워져 있어야 세월이 흘러도 적절한 위치에서 Error가 처리 될 것입니다. 예를 들어서, HTTP 401 Error는 어떤 API였든간에 인증오류이기 때문에 전역적 처리 로직에서 처리하는게 좋습니다.
이번 포스팅에서는 고민과 구체화 할 것들을 풀어놓고 하나씩 리서치하면서 다음 포스팅에서 실제 프로젝트에 적용할 수 있는 원칙과 코드를 정리해보겠습니다.
MUI의 Datepicker에 사용하는 Input을 커스텀 해보자 (0) | 2022.01.12 |
---|---|
emotion을 이용해서 MUI(Material-UI)의 Tooltip 컴포넌트에 커스텀 스타일 적용하는 방법 (1) | 2021.11.10 |
AWS S3에 파일을 업로드 하기 위한 Pre-signed URL과 Pre-signed POST (0) | 2021.09.08 |
Jira 보드에 Story 이슈 기준으로 스웜레인 만드는 방법 (0) | 2021.07.14 |
AWS CloudFront의 Origin으로 S3를 사용할 때, REST API 엔드포인트를 입력하는 것과 웹사이트 엔드포인트를 입력하는 것의 차이 (0) | 2021.06.23 |
댓글 영역