Free Lines Arrow
본문 바로가기
Spring/spring mvc 2 스터디

[Spring] 예외 처리 이론 및 기초

by skahn1215 2022. 6. 25.
728x90
반응형

예외 처리 이론 및 기초

  • 웹애플리케이션에서 예외처리를 알아보자.

 

웹 애플리케이션

  • 웹애플리케이션은 사용자 요청이 오면 별도의 쓰레드로 각각 실행이 된다.
  • 웹애플리케이션에서 예외를 처리하지 못하고 서블릿 밖으로 전달 되면 어떻게 되는지 보자

 

서블릿에서 예외 처리 방식 및 흐름

  • 서블릿에서 예외가 발생하면 다음과 같은 방식으로 진행이 된다.

1 번: 일반 요청이 들어와 컨트롤러까지간다.
2 번: 익셉션이 터지고 예외로 잡지 않으면 WAS 까지 전달이 된다.
3 번: 해당 에러가 어떤건지 확인하고 에러 페이지를 보여주기 위해 다시 컨트롤러까지 간다.

 

 

문제점

  • 불필요한 호출이 발생 한다.
  • 예외가 발생하면 다시 오류페이지를 찾기 위해 인터셉터 서블릿을 거치게 된다.
  • 매우 비효율 적이다.
    비효율적인 이유는 이미 처리를 했는데 한번더 처리가 되기 때문이다.

 

Filter, Interceptor의 불필요한 호출을 처리하는 법

Filter

  • DispatchType 에 따라 들어온 요청 구별 할 수 있다.
REQUEST: 클라이언트 요청
ERROR  : 오류 요청
FORWARD: 서블릿 에서 다른 서블릿을 요청 할 경우
INCLUDE: 서블릿에서 다른 서블릿이나 JSP의 결과를 포함할때
ASYNC  : 서블릿 비동기 호출

 

  • 아래 처럼 setDispatcherTypes 를 이용하여 요청에 따라 호출할 타입을 지정 할 수 있다.
public FilterRegistrationBean logFilter() {
    FilterRegistrationBean<Filter> filterRegistrationBean 
        = new FilterRegistrationBean<>();
          filterRegistrationBean.setFilter(new LogFilter());
          filterRegistrationBean.setOrder(1);
          filterRegistrationBean.addUrlPatterns("/*");
          filterRegistrationBean.setDispatcherTypes(DispatcherType.REQUEST, DispatcherType.ERROR);
          return filterRegistrationBean;
}

 

Interceptor

  • 인터셉터는 서블릿이 제공하는 기능이 아니기 때문에 DispatcherType 을 쓸수 없다.
  • excludePathPatterns 를 이용하여 경로를 제거한다.
@Override
public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(new LogInterceptor())
             .order(1)
             .addPathPatterns("/**")
             .excludePathPatterns("/css/**", "/*.ico", "/error", "/error-page/**" //오류 페이지 경로
    );
}

 

스프링 부트의 오류 페이지

  • 서블릿에서 예외 처리 페이지를 만들기 위해 
  • WebServerCustomizerd를 만든다.
  • 예외 종류에 따라 HTML 을 추가 해야 된다.
  • ErrorPageController 를 만들어서 예외를 따로 처리 해야된다.

 

BasicErrorController

  • 스프링은 위 과정을 자동으로 처리 해준다.
  • BasicErrorController 에서 처리를 해주기 때문이다.
  • 개발자는 그냥 페이지만 등록 해주면 된다. 

View Template

  • resource/templates/error/500.html
  • resource/templates/error/5xx.html

static resource

  • resources/static/error/400.html
  • resources/static/error/4xx.html
  • resources/static/error/404.html

 

 

 

참고:

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-2

 

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 - 인프런 | 강의

웹 애플리케이션 개발에 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. MVC 2편에서는 MVC 1편의 핵심 원리와 구조 위에 실무 웹 개발에 필요한 모든 활용 기술들을 학습할 수 있

www.inflearn.com

 

728x90
반응형

'Spring > spring mvc 2 스터디' 카테고리의 다른 글

[Spring] API 예외 처리(ExceptionResolver)  (0) 2022.07.02
[Spring] API 예외 처리(HandlerExceptionResolver)  (0) 2022.06.26
[Spring] Filter Vs Interceptor  (0) 2022.06.01
[Spring] Interceptor  (0) 2022.06.01
[Spring] Filter  (0) 2022.05.31

댓글