Java :: Generic exception은 쓰면 안 된다?

숑숑·2022년 10월 2일
3

어느날 API 개발하다.. SonarLint에 Critical Code Smell 이 잡혔다.

sonar rules 에 있는 설명을 자세히 읽어봤다.

원인

Using such generic exceptions as Error, RuntimeException, Throwable, and Exception prevents calling methods from handling true, system-generated exceptions differently than application-generated errors.

Error, RuntimeException, Throwable, Exception 등의 오류를 throw 하지 말라는 뜻이다. 실제 시스템 생성 오류를 적절히 처리할 수 없기 때문이다.

말로만 예상해보면, Generic Exception이 거의 모든 에러를 커버하고 있기 때문에 필수적으로 발생시켜야 할 에러(컴파일 에러, OOM 등...) 조차 처리해버리기 때문인 것 같다.
아마 로깅 또한 Generic Exception의 형태로 기록될 테니, 정확한 에러 원인이 뭔지도 파악하기 힘들 것이다.

  • 실제로 Throwable 하위에 거의 모든 에러가 포함된다.

Stackoverflow 에서 좋은 답변을 찾았다.

Generic Exception으로 처리 시 에러의 원인이 뭔지 파악할 수 없으니, 취할 수 있는 가장 안전한 조치가 어플리케이션 종료 밖에 없다는 말이 와닿는다. 서비스 가용성이 그 무엇보다 중요한 상황에서는 고려할 수도 있지만, 잠재적인 위험을 무시하기 때문에 가능한 지양해야 한다.

해결법

  • 응용 프로그램에서 정의된 별개의 Exception으로 변경해주면 된다.
profile
툴 만들기 좋아하는 삽질 전문(...) 주니어 백엔드 개발자입니다.

0개의 댓글