Back-End/Spring

[Spring MVC2][예외 처리와 오류 페이지] - 서블릿 예외 처리

얄루몬 2022. 5. 28. 15:12

💻본 포스팅은 '스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 - 김영한'님의 강의를 듣고 작성되었습니다.

https://inf.run/vQHp

 

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

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

www.inflearn.com


목차
1. 서블릿 예외처리 방식
2. Exception(예외)

서블릿 예외처리 방식

서블릿은 다음 2가지 방식으로 예외 처리를 지원한다.

  • Exception(예외 발생) 시 처리 지원
  • response.sendError(HTTP 상태코드, 오류메시지)시 처리 지원
    • 예외가 발생하진 않았지만 HttpServletResponse가 제공하는 sendError( ) 메서드를 사용해서 오류를 서블릿 컨테이너에게 전달 해준다. 
    • 당장에 예외가 발생하는 것은 아니지만 서블릿 컨테이너에게 오류가 발생했다는 것을 전달할 수 있다.
    • 이 메서드를 사용하면 HTTP 상태 코드와 오류 메시지 추가도 할 수 있다.

Exception(예외)

자바 직접 실행

  • 자바의 메인 메서드를 직접 실행하게 될 땐 main( )이라는 이름의 쓰레드가 실행된다.
  • 실행 도중에 이 예외를 잡지 못하고 처음 실행한 main( ) 메서드를 넘어서 예외가 던져지게 되면, 예외 정보를 남기고 해당 쓰레드는 종료하게 된다.

웹 애플리케이션

Exception(예외)

  • 웹 애플리케이션은 사용자 요청별로 별도의 쓰레드가 할당되며 서블릿 컨테이너 안에서 실행된다.
  • 애플리케이션에서 예외가 발생했다면 try ~ catch로 예외를 잡아 처리할 땐 문제가 없지만 애플리케이션에서 예외를 잡지 못하고 서블릿 밖으로까지 예외가 전달된다면 아래와 같이 동작하게 된다.
서블릿 밖으로 예외가 전달된 경우
WAS(여기까지 전파) <- 필터 <- 서블릿 <- 인터셉터 <- 컨트롤러(예외 발생!!)
  • 결국 WAS까지 예외가 전달되게 되고 WAS에 예외가 오게되면 톰캣이 기본으로 제공하는 오류 화면을 보게 된다.

response.sendError(HTTP 상태 코드, 오류 메시지)

  • 오류 발생 시 HttpServletResponse가 제공하는 sendError( ) 라는 메서드를 사용해도 된다.
  • sendError( )는 호출한다고 당장 예외가 발생하진 않지만 서블릿 컨테이너에게 오류가 발생했다는 점을 전달해준다.
  • 이 메서드를 사용하면 HTTP 상태코드와 오류 메시지를 추가할 수 있다.
    • response.sendError(HTTP 상태 코드, 오류 메시지)
    • response.sendError(HTTP 상태 코드)
sendError( )의 흐름
WAS(sendError 호출 기록 확인) <- 필터 <- 서블릿 <- 인터셉터 <- 컨트롤러 (response.sendError())
  • response.sendError( )를 호출하면 response 내부에 오류가 발생했다는 상태를 저장해둔다.
  • 서블릿 컨테이너는 고객에게 응답 전에 response에 sendError( )가 호출되었는지 확인한다.
    • 호출되었다면 설정 오류 코드에 맞춰 기본 오류 페이지를 보여준다(따로 설정한 것이 있다면 그 페이지를 보여줄 수도 있다. -> 따로 컨트롤러 처리해주면 된다.)
    • 호출되지 않았다면 그대로 정상 처리 진행하면 된다.