@ExceptionHandler가 붙은 함수가 받을 수 있는 인자들

김용현·2024년 1월 30일

사이드 프로젝트

목록 보기
4/6

사이드 프로젝트를 진행하며 발생한 에러에 대해 정리해보자.

발생 배경

이메일 중복 검사 과정에서 이메일이 중복될 경우 DuplicatedEmailException 을 발생시킨다.

이후 이를 GlobalExceptionHandler라는 클래스에 @ExceptionHandler(DuplicatedEmailExceptoin.class) 를 이용해 정해둔 예외 응답을 반환하도록 하고 있다.

그러나 응답은...

단순히 Internal Server Error로 처리된다.
이 때 당시에는 몰랐지만, 이 에러는 WAS(Tomcat)에서 내리는 기본적인 예외 응답이다.
스프링의 예외 처리 과정은 여기서 알아보자.

해결 과정

처음에는 어노테이션이나 로직이 잘못된 줄 알았다.
그러나 몇 번을 확인해봐도 어노테이션과 뭔가를 빼먹은 것은 없었고
여기 저기 구글링 하다가 나랑 똑같은 고민을 하는 글 발견...!

함수 인자가 문제였다.
@ExceptionHandler가 붙은 함수에서 처리할 수 있는 인자가 제한적이었고, 나는 현재 중복된 이메일을 다시 응답에 넣어주려고 Map<String, String> data를 함수 인자로 넘기고 있다. 근데 이게 안된다!

[받을 수 있는 함수 인자 목록]
https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/bind/annotation/ExceptionHandler.html

결과적으로 해당 인자를 제거하니 정상 동작!

굳이 중복된 이메일을 다시 보낼 필요가 없기 때문에 프론트엔드와 협의하여 data는 null로 보내기로 결정했다.

느낀 점

@ExceptionHandler가 붙은 함수에서 받을 수 있는 인자가 제한되어 있다는 사실을 알게 되었다.

그리고 이 에러를 해결하는 과정에서 물론 문제 원인과 직접적인 연관은 없었지만, 처음 의심한대로 예외 응답을 내보내는 과정을 따라가보며 이해하는 계기가 되었다.

삽질 꽤 오래 했는데 그래도 나름 수확이 있어 다행이다!
추가로 WAS 등 서버의 구조에 대해 아직 지식이 부족한 것 같다. 관련된 공부를 좀 더 해보자

profile
평생 여행 다니는게 꿈 💭 👊 😁 🏋️‍♀️ 🦦 🔥

0개의 댓글