커피와 개발자

에러 페이지(Error page) 본문

프로젝트/Spring Boot

에러 페이지(Error page)

광박이 2022. 10. 11. 16:29
728x90

에러 페이지(Error page)

웹 서비스 페이지를 개발하다 보면 404(페이지를 찾을 수 없는 오류), 500(서버 내 오류)등이 발생할 수 있습니다.
서블릿에서는 예외 처리 페이지를 처리를 하기 위해 다음과 같은 과정이 필요합니다.

  • WebServerCustomizer 만들기
  • 예외 종류에 따라서 ErrorPage를 추가
  • 예외 처리용 컨트롤러 ErrorPageController를 만들기

Spring Boot는 이러한 과정을 기본적으로 제공하며, whitelabel error page를 제공합니다.

  • ErrorPage를 자동으로 등록하며, /error라는 경로로 기본 오류 페이지를 설정
  • new ErrorPage("/error") , 상태 코드와 예외를 설정하지 않으면 기본 오류 페이지로 사용
  • 서블릿 밖으로 예외가 발생하거나, response.sendError(...)가 호출되면 모든 오류는 /error를 호출
  • BasicErrorController라는 스프링 컨트롤러를 자동으로 등록 (ErrorPage에서 등록한 /error를 매핑해서 처리하는 컨트롤러)

에러 공통 처리 컨트롤러의 기능을 변경하고 싶으면 ErrorController 인터페이스를 상속받아서 구현하거나 BasicErrorController 상속받아서 기능을 추가하면 됩니다.

application 설정 변경 (application.yml 적용) :

※ on_param 은 파라미터가 있으면 해당 정보를 노출합니다. 디버그 시 문제를 확인하기 위해 사용할 수 있습니다.
개발 서버에서 사용할 수 있지만, 운영 서버에서는 권장하지 않습니다.
on_param으로 설정하고 다음과 같이 HTTP 요청 시 파라미터를 전달하면 해당 정보들이 model에 담겨서 뷰 템플릿에서 출력됩니다.
ex) message=&errors=&trace=

에러 페이지 생성

400 에러와 500 에러 html 페이지를 생성합니다.

thymeleaf를 사용하는 경우 (뷰 템플릿)

  • resources/templates/thymeleaf/errors/ 디렉터리에 에러 페이지를 생성합니다.
  • resources/templates/error/500.html
  • resources/templates/error/5xx.html

정적 리소스 (static, public)

  • resources/static/errors/ 디렉터리에 에러 페이지를 생성합니다.
  • resources/static/error/400.html
  • resources/static/error/404.html
  • resources/static/error/4xx.html

적용 대상이 없을 때 뷰 이름 (error)

  • resources/templates/ 디렉터리에 에러 페이지를 생성합니다.

뷰 템플릿이 정적 리소스보다 우선순위가 높고, 404, 500처럼 구체적인 것이 5xx처럼 덜 구체적인 것보다 우선순위가 높습니다. 5xx, 4xx라고 하면 500대, 400대 오류를 처리해줍니다.

에러 페이지 컨트롤러 설정

컨트롤러를 생성하고, ErrorContorller 인터페이스를 상속(implements) 받습니다.
getErrorPath() 메서드를 재정의하여 오류 발생 시 호출할 사용자 지정 경로(에러 페이지)를 지정합니다. 그러나 버전 SpringBoot 2.3.x부터 이 방법을 사용하지 않으며 대신 server.error.path 속성(/error)을 사용하여 사용자 지정 경로(에러 페이지)를 지정하도록 합니다.

 

728x90

'프로젝트 > Spring Boot' 카테고리의 다른 글

타임리프(Thymeleaf)  (0) 2022.10.11
예외처리 (Exception Handling)  (0) 2022.10.11
Mybatis 적용  (0) 2022.10.11
DataBase 연동 (MariaDB, HikariCP)  (0) 2022.10.11
Argument Resolver 설정  (0) 2022.10.11
Comments