SPRING MVC - 예외 처리 & 오류 페이지

Sungjin·2021년 8월 11일
0

Spring

목록 보기
13/23
post-thumbnail

🎯 예외 처리

  • 웹 어플리케이션에서의 예외
    웹 어플리케이션은 사용자 요청별 별도의 쓰레드가 할당 되며, 서블릿 컨테이너 안에서 실행.

예외가 발생하게 되면??

웹 어플리케이션 내에서의 별도의 처리가 없다면, 서블릿 밖으로 까지 예외가 전달
즉, Controller에서 발생한 예외가 톰캣 같은 Web Application Server까지 예외가 전달 된다는 뜻.
톰캣은 톰캣이 기본적으로 제공하는 오류 페이지를 제공할 것 입니다!

많이 보셔봤을 법한 이런 화면 이죠..(화나는 화면..)

이렇게 기본적으로 제공되는 화면은 사용자가 보기에는 무슨 의미인가 싶기도 하고 다방면에서 불편할 것입니다.
그러므로 사용자들에게 보여질 이쁜 오류 페이지를 제공 해야합니다.

🚀 스프링에서의 예외 처리

  • 스프링 부트가 제공하는 기능
    1. ErrorPage를 자동으로 등록.(/error라는 경로)
      • 서블릿 밖까지 예외 발생 or 응답에 에러를 담고있는 경우 모든 오류는 /error를 호출
    2. BasicErrorController라는 스프링 컨트롤러를 자동으로 등록.
      • 에러가 발생하면 /error를 매핑해서 처리하는 컨트롤러
        오류가 발생하면 오류 페이지가 /error라는 경로로 설정(ErrorMvcAutoConfiguration 오류 페이지를 자동으로 등록하는 역할) 되어있기 때문에 BasicErrorController는 이 에러를 매핑 해서 처리를 한다고 보면 될 것 같습니다!
        ex> 이런식으로 설정된 오류 페이지를 매핑한다고 보시면 될 것 같습니다!
    ErrorPage errorPage = new ErrorPage(HttpStatus.NOT_FOUND, "/error/404");
    1. 개발자는 BasicErrorController가 제공하는 Rule에 따라 오류 페이지만 등록하면 됩니다.
      • BasicErrorController는 /error를 매핑하여 뷰의 우선 순위에 따라 뷰 템플릿을 띄워 줍니다.
        • 우선 순위
          1. 뷰 템플릿 (resources/templates/error/(예외 이름 ex)400, 404, 4xx...)
          2. 정적 리소스 (resources/static/error/(예외 이름)
          3. 아무것도 매칭 되는 것이 없을 때 (resources/templates/error.html)
          뷰 파일을 400.html , 4xx.html 이런 식으로 놓을 수 있습니다. 4xx는 400대의 오류를 전체 포함하는 것이라고 보시면 됩니다. 물론 우선 순위는 구체적인 400.html이 더 높습니다!

🚀 CODE 및 결과

일부러 예외 및 오류를 터뜨려서 결과를 보도록 하죠!

Controller

@Controller
public class ServletExceptionController {

    @GetMapping("/error-404")
    public void error404(HttpServletResponse response) throws IOException{
        response.sendError(404,"404 오류");
    }

	@GetMapping("/error-400")
    public void error400(HttpServletResponse response) throws IOException{
    	response.sendError(400,"400 오류");
	}        
}

4xx.html

<!DOCTYPE HTML>
<html >
<head>
    <meta charset="utf-8">
</head>
<body>
<div  >
    <div >
        <h2>4xx 오류 화면</h2>
    </div>
    <div>
        <p>오류 화면 입니다. 나중에 이쁘게 꾸며요~</p>
    </div>
</div>
</body>
</html>

404.html

<!DOCTYPE HTML>
<html >
<head>
    <meta charset="utf-8">
</head>
<body>
<div  >
    <div >
        <h2>404</h2>
    </div>
    <div>
        <p>오류 화면 입니다. 나중에 이쁘게 꾸며요~</p>
    </div>
</div>
</body>
</html>

실행 결과
http://localhost:8080/error-404 (404.html이 나와야함)
http://localhost:8080/error-400 (에러에 맞는 구체적인 페이지가 없으니 4xx.html페이지가 나와야 함)
요청

오류 페이지 처리를 잘 하는 것을 확인 했습니다!!

이상으로 포스팅을 마치겠습니다. 감사합니다 :) 👋

이 글은 인프런 김영한님의 '스프링 MVC 2편 - 백엔드 웹 개발 핵심 기술'을 수강하고 작성합니다.
출처:https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-2/dashboard

profile
WEB STUDY & etc.. HELLO!

0개의 댓글