스프링부트 기본 에러페이지는 ‘whitelabel’ error page 이다. 이와 관련된 내용은 ErrorMvcAutoConfiguration 을 살펴보면 찾아볼 수 있다.

private final SpelView defaultErrorView = new SpelView(
"<html><body><h1>Whitelabel Error Page</h1>"
+ "<p>This application has no explicit mapping for /error, so you are seeing this as a fallback.</p>"
+ "<div id='created'>${timestamp}</div>"
+ "<div>There was an unexpected error (type=${error}, status=${status}).</div>"
+ "<div>${message}</div></body></html>");

이 기본적인 화이트레이블 페이지 대신에 사용자가 지정한 에러페이지로 변경이 가능하다. 이를 위해서는

server.error.include-stacktrace=never # When to include a "stacktrace" attribute.
server.error.path=/error # Path of the error controller.
server.error.whitelabel.enabled=true # Enable the default error page displayed in browsers in case of a server error.

위 세가지 속성에 대한 조작을 해야 한다. 우선 사용자지정 에러페이지를 사용하기 위해서는 화이트레이블 출력을 비활성화해야 한다.

server.error.whitelabel.enabled=false

로 변경한다. 그리고 에러페이지에서 발생한 에러의 스택트레이스를 출력하기 위해서는 server.error.include-stacktrace 을 never 이외의 것으로 변경해야 한다.

server.error.include-stacktrace=always or on_trace_param

이와 관련된 값은 ErrorProperties 를 살펴보면 된다.

사용가능한 속성들을 템플릿(Thymeleaf) 에 적용해본 예다.

<div class="container error-404">
    <h1 th:text="${status}">Status</h1>
    <h2>Houston, we have a problem([[${error}]])</h2>
    <p th:text="${message}"> Error Message</p>
    <p>
        <a href="index.html" th:href="@{/}" class="btn red btn-outline"> Return home </a>
        <br>
    </p>
    <div>
        <label>Time Stamp</label>
        <div th:text="${timestamp}"></div>
    </div>
    <div>
        <label>Exception name</label>
        <div th:text="${exception}"></div>
    </div>
    <div>
        <label>Trace</label>
        <div th:utext="${trace}"></div>
    </div>
</div>

화면에 출력가능한 속성값들에 대해서는 DefaultErrorAttributes 를 살펴보면 이용할 수 있는 정보를 확인가능하다. 그러면 다음과 같은 화면을 볼 수 있게 된다.



스프링부트 오류출력 페이지

스프링부트에서 기본설정된 오류페이지는 'Whitelable' 페이지다.


스프링부트에는 'whitelabel' 페이지에 대한 언급이 그렇게 상세히 되어있지는 않다( Customize the ‘whitelabel’ error page).

ErrorMvcAutoConfiguration 을 보면 SpelView 를 이용해서 생성하는 Whitelabel Error Page 를 볼 수 있을 것이다.

이 페이지를 이뻐보이는 페이지로 대체하는 것은 나중에 다루기로 하고…​

스프링부트 ErrorMvcAutoConfiguration 에서 다룰 수 있는 속성들을 살펴보도록 하자. ErrorMvcAutoConfiguration 를 살펴보면 그 중에 DefaultErrorAttributes 를 살펴볼 수 있다. 문서에서 보면 알 수 있듯이 오류와 관련된 속성 중에 다룰 수 있는 것들에는:

  • timestamp - 오류가 발생한 시간을 추출

  • status - 상태코드

  • error - 에러 발생원인

  • exception - 상위 예외 클래스명

  • message - 예외 메시지

  • errors - BindingResult 예외가 던져주는 ObjectErrors

  • trace - Exception stack trace

  • path - 예외가 발생한 URL 경로(되돌아가거나? 어디서 발생했는지 파악하는 용도)

를 활용하면 스프링부트에서 발생한 예외에 대한 분석이 용이해진다.

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head lang="en">
    <meta charset="utf-8"/>
    <!-- 중략 -->
</head>
<body class=" page-404-3">
<div class="page-inner">
    <img src="/assets/layout/img/earth.jpg" class="img-responsive" alt=""></div>
<div class="container error-404">
    <h1 th:text="${status}">Status</h1>
    <h2>Houston, we have a problem([[${error}]])</h2>
    <p th:text="${message}"> Error Message</p>
    <p>
        <a href="index.html" th:href="@{/}" class="btn red btn-outline"> Return home </a>
        <br>
    </p>
    <div th:text="${timeStamp}"></div>
    <div th:text="${exception}"></div>
    <div th:utext="${trace}">Trace!</div>
</div>
</body>
</html>

이와 같은 형태로 오류를 탐색하고 분석하는데 용이하도록 구성할 수 있을 것이고 방법은 다양하니 자신에게 맞는 방법을 찾기 바란다.


+ Recent posts