Springboot

Whitelabel Error Page와 Tomcat Error Page

아몬드맛빼빼로 2025. 4. 26. 22:52
반응형

WhiteLabel ErrorPage란 무엇인가?

SpringBoot 개발자라면 누구나 한 번쯤 이 밋밋한 메시지를 봤을 것이다. 개발 초기나 서버 설정이 잘못되었을 때, 혹은 단순히 요청한 URL에 해당하는 매핑이 없을 때 이런 메시지가 튀어나온다.

 

분명 SpringBoot는 Tomcat을 내장하고 있는데, 왜 Tomcat의 기본 오류 페이지 대신 이런 WhiteLabel 페이지가 뜨는 것일까?

그 이유는 SpringBoot가 자체적으로 BasicErrorController라는 클래스를 통해 오류를 처리하기 때문이다. 이 컨트롤러는 애플리케이션에서 에러가 발생했을 때 별다른 처리 로직이 없다면 자동으로 동작해, 기본적인 오류 응답을 제공한다. 서버가 죽지 않고 정상적으로 오류를 응답할 수 있도록 해주는 친절한 기본 장치인 셈이다.

BasicErrorController의 역할

BasicErrorController는 다양한 HTTP 오류 상태 코드(예: 404, 500 등)를 감지하고, 상황에 따라 HTML 페이지나 JSON 응답을 반환한다. 웹 애플리케이션이나 REST API 서버 모두에 대응할 수 있도록 설계되어 있다.

Tomcat의 오류 페이지가 가끔 나오는 이유...

아주 가끔 Tomcat의 오류 페이지가 튀어 나올 때도 있다.그런 경우는 보통 2가지 상황인데 요청 헤더가 너무 크거나 파싱에 실패하였을때 Spiring에 도달하기 전 Tomcat에서 오류가 나며 튀어나오는 경우,그리고 희귀하지만 Tomcat은 살아있고 Spring은 죽어 있을때 오류가 Tomcat까지 전파됬을때이다.

WhiteLabel ErrorPage 비활성화 방법

WhiteLabel 페이지를 더 이상 보고 싶지 않다면, 설정 파일 하나만 수정하면 된다.

application.properties 파일에 다음을 추가하자.

server.error.whitelabel.enabled=false

이 설정을 추가하고 서버를 재시작하면, 더 이상 WhiteLabel 페이지가 아닌 Tomcat의 기본 오류 페이지가 나타난다.

비록 Tomcat 페이지도 멋지진 않지만


커스텀 에러 페이지?

보다 멋진 에러 페이지를 위해서 직접 컨트롤러를 작성할 수 있다.

@Controller
public class CustomErrorController implements ErrorController {

    @RequestMapping("/error")
    public String handleError(Model model, HttpServletRequest request) {
        Object status = request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE);

        if (status != null) {
            int statusCode = Integer.valueOf(status.toString());
            model.addAttribute("statusCode", statusCode);
        }

        return "customError";
    }
}

CustomErrorController/error 경로에 대한 요청을 가로채서 적절한 에러 정보를 모델에 담아 뷰로 전달한다.

커스텀 에러 페이지 작성

컨트롤러가 준비되었다면, 이제 에러 페이지 템플릿을 작성할 차례다. src/main/resources/templates 디렉터리에 customError.html 파일을 생성하도록 한다.

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>펑!</title>
</head>
<body>
  <h1>🤯</h1>
</body>
</html>

이렇게 구성하면 위와 같은 멋진 에러 페이지를 만들 수 있다.

추가 커스터마이징

원한다면 상태 코드별로 다른 에러 페이지를 만들 수도 있다. 예를 들어 404 페이지와 500 페이지를 구분해서 안내할 수도 있다. 이를 통해 사용자에게 훨씬 세밀하고 친절한 경험을 제공할 수 있다.