반응형

스프링(Spring)에서 Error Exception에 대해 처리하는 방법은 다양하다. Illegalargumentexception, NullPointerException, 404, 500, 501 Error 등 여러 개의 Error Exception이 있다. 이 Error Exception에 대해 Handling 하는 방법은 다양하다. JSP 자체 내에서 Error Exception Handling, Handler Servlet에서의 Handling, web.xml에서의 Handling 방법들이 있다.

 

여기에서 가장 많이 사용하는 방법이 web.xml에서 Error Exception을 Handling 하는 방법이다.

 

1. 왜 Error Exception을 Handling 해야하는 것인가?

가장 큰 이유는 보안 이슈다. 500 에러(Internal Server Error) 같은 경우에는 아래와 같이, IDE에서 Console 창에 쌓이는 로그들이 화면에 보여진다. 이것을 통해, 어디서 에러가 발생했는지부터 디렉토리에 대한 구조 등을 확인할 수 있어 Error Exception을 처리하는 것이 일반적이다.

Exception message For input string: "" 
java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67) 
java.base/java.lang.Integer.parseInt(Integer.java:678) 
java.base/java.lang.Integer.parseInt(Integer.java:786) 
com.common.handler.CommonIntercepter.preHandle(CommonIntercepter.java:64) 
org.springframework.web.servlet.HandlerExecutionChain.applyPreHandle(HandlerExecutionChain.java:134)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:928)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:867)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:951)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:842)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:827)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) 
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:106) 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219) 
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110) 
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:492) 
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:165) 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104) 
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:1025) 
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:451) 
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1201) 
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:654) 
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:319) 
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.base/java.lang.Thread.run(Thread.java:833)

 

그래서, 가장 많이 사용되는 web.xml의 설정을 통해 이 error Exception을 핸들링을 기록한다.

스프링(Spring)의 WAS가 구동이 될 때, 가장 먼저 읽어오는 것이 web.xml이다. 그렇기 때문에, 서버에서 404, 500 등의 에러가 발생하면 web.xml에서 아래의 코드처럼 정의되어 있는 error-code를 인지하여 해당 location으로 보낸다.

 

여기서, error-code는 정수가 들어가야 한다.

<error-page>
	<error-code>500</error-code>
    <location>/error500.jsp</location>
</error-page>

2022년 09월 14일 v1.0 작성

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기