필기노트

김영한 스프링 강의 요약 - 예외 처리와 오류 페이지 본문

김영한 강의 요약

김영한 스프링 강의 요약 - 예외 처리와 오류 페이지

우퐁코기 2023. 12. 28. 08:15
반응형

1. 서블릿 예외 처리

웹 애플리케이션은 사용자 요청별로 별도의 쓰레드가 할당되고, 서블릿 컨테이너 안에서 실행된다. 애플리케이션에서 예외가 발생했는데, 어디선가 try ~ catch로 예외를 잡아서 처리하면 아무런 문제가 없다. 그런데 만약에 애플리케이션에서 예외를 잡지 못하고, 서블릿 밖으로 까지 예외가 전달되면 어떻게 동작할까?

 

1. 정상 요청

WAS(/error-ex, dispatchType=REQUEST) -> 필터 -> 서블릿 -> 인터셉터 -> 컨트롤러

 

2. 예외발생

WAS(여기까지 전파) <- 필터 <- 서블릿 <- 인터셉터 <- 컨트롤러(예외발생)

결국 톰캣 같은 WAS 까지 예외가 전달된다. WAS는 예외가 올라오면 어떻게 처리해야 할까?

 

 

3. WAS 오류 페이지 확인

WAS(/error-page/500, dispatchType=ERROR) -> 필터(x) -> 서블릿 -> 인터셉터(x) -> 컨트롤러(/error-page/500) -> View
  • WAS는 오류 페이지 경로를 찾아서 내부에서 오류 페이지를 호출한다. 이때 오류 페이지 경로로 필터, 서블릿, 인터셉터, 컨트롤러가 모두 다시 호출된다.
  • 필터는 DispatchType 으로 중복 호출 제거 ( dispatchType=REQUEST ) 
  • 인터셉터는 경로 정보로 중복 호출 제거( excludePathPatterns("/error-page/**") )

2. 오류 페이지

1) 지금까지 예외 처리 페이지를 만들기 위해서 다음과 같은 복잡한 과정을 거쳤다. 

  • WebServerCustomizer 를 만들고 
  • 예외 종류에 따라서 ErrorPage 를 추가하고 
  • 예외 처리용 컨트롤러 ErrorPageController 를 만듬 

 

2) 스프링 부트는 이런 과정을 모두 기본으로 제공한다. 

  • BasicErrorController 라는 스프링 컨트롤러를 자동으로 등록한다. 
  • 이제 오류가 발생했을 때 오류 페이지로 /error 를 기본 요청한다.

 

3) 개발자는 오류 페이지만 등록 

BasicErrorController 는 기본적인 로직이 모두 개발되어 있다. 개발자는 오류 페이지 화면만 BasicErrorController 가 제공하는 룰과 우선순위에 따라서 등록하면 된다. 정적 HTML이면 정적 리소스, 뷰 템플릿을 사용해서 동적으로 오류 화면을 만들고 싶으면 뷰 템플릿 경로에 오류 페이지 파일을 만들어서 넣어두기만 하면 된다. 

 

4) BasicErrorController 의 뷰 선택 우선순위

 

1순위 : 뷰템플릿 

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

2순위 : 정적리소스(static,public) 

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

3순위 : 적용 대상이 없을 때 뷰 이름(error) 

  • resources/templates/error.html

해당 경로 위치에 HTTP 상태 코드 이름의 뷰 파일을 넣어두면 된다. 뷰 템플릿이 정적 리소스보다 우선순위가 높고404, 500처럼 구체적인 것이 5xx처럼 덜 구체적인 것 보다 우선순위가 높다. 5xx, 4xx 라고 하면 500대, 400대 오류를 처리해준다.

 

 


REFERENCE

 

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

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

www.inflearn.com

반응형
Comments