[Japring-Study 3] spring-mvc-3

Kim yohan·2024년 8월 10일

JapringStudy

목록 보기
3/12
post-thumbnail

3번째 과제에선 ExceptionHandler, ControllerAdvice에 대해 배웠다.
ExceptionHandler의 동작원리에 대해서 발표도 진행했다!
발표를 준비하니, 그냥 공부하는 것보다 더 확실히 알게되어서 좋다!! (힘든건 안 비밀..)

Spring 기본 에러 처리


Spring에서는 기본적으로 컨트롤러에서 예외 발생 시, 예외가 WAS(Web Application Server)까지 전달되고, 예외를 처리해줄 수 있는 BasicErrorController를 찾아 다시 내려간다.
왜냐하면, 스프링 부트는 예외가 발생하면, 기본적으로 /error로 에러 요청을 다시 보내도록 WAS를 설정해두었기 때문이다.
이는 필터와 인터셉터가 재호출되기 때문에, 매우 비효율적인 방법으로, WAS에 예외가 전달되지 않도록 예외 처리를 해주어야한다.

그런데, 모든 코드에 try catch를 붙이는 것은 비효율적이다. 에러 처리라는 공통 로직을 메인 코드로 부터 분리하기 위해 고안된 것이 HandlerExceptionResolver이다!!
HandlerExceptionResolver는 디스패처 서블릿에서 예외를 받아 처리해주고 정상 흐름이 반환되록 유도한다. 따라서, WAS에 정상 응답을 던져, 불필요하게 컨트롤러로 다시 가는 과정을 없애준다.

@ExceptionHandler 동작 원리

HandlerExceptionResolver는 인터페이스이고, 구현체 중 가장 우선순위 높은 것이 ExceptionHandlerExceptionResolver이다!
그렇다! 이 친구가 @ExceptionHandler와 연관이 있다.

ExceptionHandlerExceptionResolver은 해당 컨트롤러에서 해당 예외를 처리할 수 있는 @ExceptionHandler가 붙은 메소드가 있는지 찾고, 찾은 메소드를 통해 예외 처리해준다.

발표

아래처럼 발표도 했다!


profile
꾸준히 성실하게

0개의 댓글