본문 바로가기
spring

Exception handling

by 김선지 2024. 6. 24.

서블릿 컨테이너 예외처리의 두가지 방식

 

1. Exception(예외) => 무조건 500에러 

2. response.sendError(Http 상태 코드, 오류 메시지); => 상태코드별 에러

 

 

(자바를 직접 실행하는 경우)

1. Exception: 자바의 메인 메서드를 실행하는 경우 main이라는 이름의 스레드가 실행.

2. 실행 도중에 예외를 잡지 못하고 처음 실행한 main 메서드를 넘어서 예외가 던져지면, 예외 정보 남기고 스레드 종료

 

 

(웹 애플리케이션)

1. 웹 애플리케이션은 사용자 요청별로 별도의 쓰레드가 할당되고, 서블릿 컨테이너 안에서 실행.

2. 애플리케이션에서 예외가 발생했는데, 어디서 try catch로 예외를 처리하면 문제가 없다.

3. 하지만 애플리케이션에서 예외를 잡지 못하고 서블릿 바깥까지 예외가 전달되면 어떻게 동작?

 

A. WAS -> 필터 -> 서블릿 -> 인터셉터 - >컨트롤러(예외발생)  

   반대로 전달되어 톰캣같은 WAS까지 예외가 전달된다. => Internal Server Error 500

 

 

원리

 

서블릿은 Exception이 발생해서 서블릿 밖으로 전달되거나 또는 response.sendError() 가 호출되었을 때 설정된 오류페이지를 찾는다.

 

WAS(여기까지 전파) <= 필터 <= 서블릿 <= 인터셉터 <= 컨트롤러

 

WAS는 오류 페이지를 렌더하기 위해 /error-page/500을 다시 요청하게 됨. + 오류 정보 (컨트롤러 두번 요청) 

이때 오류 페이지 경로로 필터, 서블릿, 인터셉터. 컨트롤러가 모두 다시 호출됨.

클라이언트는 서버 내부에서 이런 일이 일어나는지 모르고 서버 내부에서 오류 페이지를 찾기 위해 추가적인 호출을 하는 것.

 

 

필터와 인터셉터의 차이 :

필터는 서블릿 기술이고, 인터셉터는 스프링 기술이다. 즉, 필터는 스프링이 동작하기 전에 동작.

'spring' 카테고리의 다른 글

spring MVC  (0) 2024.06.15
Bean Scope빈스코프  (0) 2024.06.02
에디터 글 DB 저장, 이미지 base 64인코딩 데이터 DB저장  (0) 2024.05.29
@AutoConfig, @ComponentScan, @Autowired, Filter  (0) 2024.05.28
Spring Container의 생성 과정  (0) 2024.05.23