Spring - 스프링 부트 예외처리

컴업·2021년 11월 23일
0

웹 어플리케이션에서 예외를 처리하는 흐름은 아래 그림과 같습니다.

서블릿으로 예외를 처리하고 오류 페이지를 보여주기 위해서는 WebServerCustomizer 클래스를 만들고 예외 종류에 따라 ErrorPage를 추가하고, 오류 페이지를 위한 전용 컨트롤러를 만들어 주어야 했습니다.

서블릿 예외처리

스프링 부트는 위 모든 것들을 기본으로 제공합니다.

스프링 부트의 ErrorMvcAutoConfiguration 클래스는 ErrorPage를 /error 경로로 자동 등록합니다.

BasicErrorController는 /error 경로를 기본으로 받습니다.

BasicErrorController

BasicErrorController는 /error url을 받는 컨트롤러입니다. 이는 모든 로직이 이미 만들어져있기 때문에 개발자는 위 컨트롤러에 세팅되어있는 위치에 오류페이지만 등록하면 됩니다.

뷰 선택 우선순위

  1. 뷰 템플릿
    resources/templates/error/500.html
    resources/templates/error/5xx.html

  2. 정적 리소스( static , public )
    resources/static/error/400.html
    resources/static/error/404.html
    resources/static/error/4xx.html

  3. 적용 대상이 없을 때 뷰 이름( error )
    resources/templates/error.html

4xx는 400대 Http status코드를 모두 받습니다.

BasicErrorController가 제공하는 기본 정보

BasicErrorController는 다음 정보를 model에 담아 뷰에 전달합니다.

  • timestamp: Fri Feb 05 00:00:00 KST 2021
  • status: 400
  • error: Bad Request
  • exception: org.springframework.validation.BindException
  • trace: 예외 trace
  • message: Validation failed for object='data'. Error count: 1
  • errors: Errors(BindingResult)
  • path: 클라이언트 요청 경로 (/hello)

그러나 이러한 정보는 일반적으로 고객에게 노출하지 않는 편이 좋습니다. 따라서 위 정보를 model객체에 포함 할지 선택할 수 있는데, default로 모두 담지 않는 것으로 설정되어있습니다.

application.properties

  • server.error.include-exception=false : exception 포함 여부( true , false )
  • server.error.include-message=never : message 포함 여부
  • server.error.include-stacktrace=never : trace 포함 여부
  • server.error.include-binding-errors=never : errors 포함 여부

never: 사용하지 않음
always: 항상 사용
on_param: 파라미터가 있을경우 사용



<출처>
Inflearn 김영한 선생님, Spring MVC 2

profile
좋은 사람, 좋은 개발자 (되는중.. :D)

0개의 댓글