본문 바로가기



Error: Spring Boot에서 커스텀 에러 페이지 설정하기



안녕하세요. 각성한 데브키라입니다. 에러 페이지 설정은 웹 애플리케이션의 사용자 경험을 향상시킬 수 있는 중요한 요소입니다. Spring Boot는 기본적으로 내장된 오류 페이지를 제공합니다. 하지만 이를 커스텀 페이지로 변경하여 더 친근하고 유용한 정보를 제공할 수 있습니다.

이 포스팅에서는 500(내부 서버 오류) 및 404(페이지를 찾을 수 없음) 에러 발생 시, 500.jsp와 404.jsp 페이지를 출력하는 방법을 설명합니다.

1. 프로젝트 구조 설정

먼저 Spring Boot 프로젝트의 구조는 다음과 같아야 합니다.

src/
└── main/
    ├── java/
    │   └── com.example.demo/
    │       └── DemoApplication.java
    └── resources/
        ├── templates/
        │   ├── 404.jsp
        │   └── 500.jsp
        └── application.properties

 

위와 같이 src/main/resources/templates 폴더에 404.jsp와 500.jsp 파일을 추가합니다. 이 두 파일은 각 에러 상황에 맞는 내용을 표시하는 페이지입니다.

2. 커스텀 에러 페이지 작성하기

404.jsp와 500.jsp 파일을 작성합니다. 각 파일의 내용은 다음과 같습니다.

404.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head>
    <title>Page Not Found</title>
</head>
<body>
    <h1>404 - Page Not Found</h1>
    <p>요청하신 페이지를 찾을 수 없습니다.</p>
</body>
</html>

500.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head>
    <title>Internal Server Error</title>
</head>
<body>
    <h1>500 - Internal Server Error</h1>
    <p>서버에서 오류가 발생했습니다. 잠시 후 다시 시도해주세요.</p>
</body>
</html>

3. ErrorController 구현하기 (선택 사항)

Spring Boot는 ErrorController를 구현하여 에러 페이지를 더욱 세부적으로 제어할 수 있습니다. 아래와 같이 CustomErrorController 클래스를 만들어 404와 500 에러에 맞는 페이지를 표시하도록 합니다.

import org.springframework.boot.web.servlet.error.ErrorController;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.RequestDispatcher;
import javax.servlet.http.HttpServletRequest;

@Controller
public class CustomErrorController implements ErrorController {

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

        if (status != null) {
            int statusCode = Integer.parseInt(status.toString());

            if (statusCode == 404) {
                return "404";
            } else if (statusCode == 500) {
                return "500";
            }
        }
        return "error";  // 기본 에러 페이지 설정
    }

    public String getErrorPath() {
        return "/error";
    }
}
  • @RequestMapping("/error"): 에러가 발생하면 /error 경로로 요청을 리다이렉트하고, 상태 코드를 확인하여 각각 404와 500 JSP 페이지로 리턴합니다.
  • 404.jsp와 500.jsp는 src/main/resources/templates에 있어야 Spring이 이를 JSP로 렌더링할 수 있습니다.

4. application.properties 설정

Spring Boot에서 커스텀 에러 페이지를 사용하려면 기본 오류 페이지를 비활성화하고, 에러 경로를 지정합니다. application.properties에 다음 설정을 추가합니다.

server.error.whitelabel.enabled=false  # 기본 오류 페이지 비활성화
server.error.path=/error               # 에러 경로 설정

 

이 설정을 통해 Spring Boot의 기본 Whitelabel 에러 페이지를 비활성화하고 /error 경로로 커스텀 에러 페이지가 호출되도록 합니다.

5. 테스트

이제 애플리케이션을 실행하여 404와 500 에러를 테스트할 수 있습니다.

404 에러 테스트

존재하지 않는 URL로 접근하여 404 에러가 발생하도록 합니다. 예를 들어, http://localhost:8080/nonexistent 같은 잘못된 경로에 접근하면 404.jsp 페이지가 표시됩니다.

500 에러 테스트

간단한 500 에러를 유발하려면 특정 컨트롤러에서 NullPointerException을 발생시키는 코드를 작성할 수 있습니다. 예를 들어:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {

    @GetMapping("/test500")
    public String test500() {
        String nullString = null;
        return nullString.toString(); // NullPointerException 발생
    }
}
 

위의 /test500 경로에 접근하면 NullPointerException이 발생하여 500.jsp 페이지가 표시됩니다.

마무리

이제 Spring Boot 애플리케이션에서 커스텀 404 및 500 에러 페이지를 사용하여 더 나은 사용자 경험을 제공할 수 있습니다. 이번 포스팅에서는 간단한 설정으로 에러 페이지를 커스터마이징 하는 방법을 알아보았습니다.