본문 바로가기

Tech/Spring | SpringBoot

[SpringBoot] 예외처리 - 1 (BasicErrorController)

반응형

SpringBoot REST api 구현하다 보면 요청에 대한 예외가 발생하는 경우가 있다. 이러한 예외 처리를 잘해주지 않으면 사용자가 원하는 응답을 얻지 못하거나 애플리케이션 자체가 오류로 중단될 있다.

 

SpringBoot 에서는 @ExceptionHandler, HandlerExceptionResolver, @ControllerAdvice, ResponseStatusException 등의 예외처리 방법을 제공해준다.

BasicErrorController

SpringBoot 에서 제공하는 예외 처리 방법들을 살펴보기 전에, SpringBoot 의 기본 예외 처리 방법을 알아보려고 한다.

 

Spring 은 Controller 를 통해서 클라이언트의 요청을 수신하는데, Controller 에서 발생하는 에러에 대해서는 기본적으로 /error 로 에러에 대한 요청을 다시 전달하도록 WAS 설정을 해두었다. 그리고 /error 로 오는 요청을 처리할 Controller 로 BasicErrorController 를 통해서 처리하도록 되어있다. 이 부분은 SpringBoot 의 WebMvcAutoConfiguration 을 통해서 WAS 에 자동 설정이 된다.

 

@Controller
@RequestMapping("${server.error.path:${error.path:/error}}")
public class BasicErrorController extends AbstractErrorController {
	...
}

 

위의 코드는 BasicErrorController 의 선언부이다. server.error.path 로 들어오는 요청을 수신하도록 RequestMapping 로 지정이 되어있는데, 에러 경로의 기본값은 /error 이며 이 값은 appplication.properties 에서 변경할 수 있다.

 

예외 발생 시에 BasicErrorController 가 동작하는 순서는 다음과 같다.

 

request -> WAS (Tomcat) -> Filter -> Servlet (Dispatcher Servlet) -> Interceptor -> Controller
-> (Exception 발생) -> Interceptor -> Servlet -> Filter -> WAS
-> (server.error.path 요청) -> Filter -> Servlet -> Interceptor -> Controller (BasicErrorController)

 

사용자의 요청을 실행하던 중 Controller 에서 에러가 발생하면 WAS 로 에러가 반환된다. WAS 는 에러가 발생하면 /error 로 다시 요청을 보내게 된다. 그러면 이에 대한 요청을 수신하는 BasicErrorController 가 로직에 따라서 응답을 전달한다.

[Reference]

 

[Spring] 스프링의 다양한 예외 처리 방법(ExceptionHandler, ControllerAdvice 등) 완벽하게 이해하기 - (1/2)

예외 처리는 애플리케이션을 만드는데 매우 중요한 부분을 차지한다. Spring 프레임워크는 매우 다양한 에러 처리 방법을 제공하는데, 어떠한 방법들이 있고 가장 좋은 방법(Best Practice)은 무엇인

mangkyu.tistory.com

 

반응형