JSP 에러 처리 및 디버깅 (JSP Error Handling and Debugging)
JSP 에러 페이지 설정 (Setting Up JSP Error Pages)
JSP 페이지에서 발생하는 에러를 사용자가 이해할 수 있는 형태로 보여주기 위해 에러 페이지를 설정할 수 있습니다. 이를 통해 특정 에러가 발생했을 때 사용자에게 친절한 메시지를 제공하고, 애플리케이션의 안정성을 향상시킬 수 있습니다.
예제: web.xml 설정
<web-app> <!-- 에러 페이지 설정 --> <error-page> <error-code>404</error-code> <location>/error404.jsp</location> </error-page> <error-page> <error-code>500</error-code> <location>/error500.jsp</location> </error-page> <error-page> <exception-type>java.lang.Throwable</exception-type> <location>/error.jsp</location> </error-page> </web-app>
위의 설정은 404, 500 에러 및 모든 예외에 대해 각각의 에러 페이지로 리디렉션합니다.
예제: error404.jsp
<%@ page isErrorPage="true" %> <html> <head> <title>404 - Page Not Found</title> </head> <body> <h1>404 - 페이지를 찾을 수 없습니다.</h1> <p>요청하신 페이지가 존재하지 않습니다.</p> </body> </html>
예제: error500.jsp
<%@ page isErrorPage="true" %> <html> <head> <title>500 - Internal Server Error</title> </head> <body> <h1>500 - 서버 내부 오류</h1> <p>서버에서 요청을 처리하는 도중 오류가 발생했습니다.</p> </body> </html>
예제: error.jsp
<%@ page isErrorPage="true" %> <html> <head> <title>오류 발생</title> </head> <body> <h1>오류가 발생했습니다.</h1> <p>오류 메시지: ${exception.message}</p> <pre><%= exception.printStackTrace(new java.io.PrintWriter(out)) %></pre> </body> </html>
예외 처리 (Exception Handling)
JSP에서는 try-catch
블록을 사용하여 예외를 처리할 수 있습니다. 이를 통해 특정 코드 블록에서 발생할 수 있는 예외를 처리하고, 사용자에게 적절한 피드백을 제공할 수 있습니다.
예제: try-catch 블록 사용
<%@ page import="java.io.*, java.sql.*" %> <% try { // 파일 읽기 예제 FileReader reader = new FileReader("somefile.txt"); BufferedReader br = new BufferedReader(reader); String line; while ((line = br.readLine()) != null) { out.println(line + "<br>"); } br.close(); } catch (FileNotFoundException e) { out.println("파일을 찾을 수 없습니다: " + e.getMessage()); } catch (IOException e) { out.println("파일을 읽는 도중 오류가 발생했습니다: " + e.getMessage()); } %>
위의 예제에서는 파일 읽기 도중 발생할 수 있는 FileNotFoundException
과 IOException
을 처리하고, 각각의 경우에 적절한 메시지를 출력합니다.
로그 작성 (Logging)
애플리케이션의 디버깅과 문제 해결을 위해 로그를 작성하는 것이 중요합니다. JSP에서는 java.util.logging
패키지를 사용하거나, Log4j
, SLF4J
와 같은 외부 로깅 프레임워크를 사용할 수 있습니다.
예제: java.util.logging 사용
import java.util.logging.Logger; import java.util.logging.Level; // Logger 인스턴스 생성 Logger logger = Logger.getLogger("MyLogger"); try { // 예제 코드 int result = 10 / 0; } catch (ArithmeticException e) { // 로그 기록 logger.log(Level.SEVERE, "ArithmeticException 발생: " + e.getMessage()); }
예제: Log4j 사용
Log4j를 사용하기 위해서는 Log4j 라이브러리를 추가하고, 설정 파일을 작성해야 합니다.
log4j.properties 설정
log4j.rootLogger=DEBUG, file, console # ConsoleAppender 설정 log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n # FileAppender 설정 log4j.appender.file=org.apache.log4j.RollingFileAppender log4j.appender.file.File=logs/app.log log4j.appender.file.MaxFileSize=1MB log4j.appender.file.MaxBackupIndex=10 log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
JSP에서 Log4j 사용
<%@ page import="org.apache.log4j.Logger" %> <% Logger logger = Logger.getLogger("MyLogger"); try { // 예제 코드 int result = 10 / 0; } catch (ArithmeticException e) { // 로그 기록 logger.error("ArithmeticException 발생: " + e.getMessage(), e); } %>
위의 예제는 Log4j를 사용하여 ArithmeticException
이 발생했을 때 로그를 기록하는 방법을 보여줍니다. 로그는 콘솔과 파일에 출력됩니다.
이로써 JSP에서 에러를 처리하고 디버깅하는 방법을 상세히 설명했습니다. 에러 페이지 설정, 예외 처리, 로그 작성을 통해 애플리케이션의 안정성과 유지 보수성을 높일 수 있습니다.