web developer

[java] SQL 데이터베이스 관련 에러 발생 시 response.sendError(HTTP 상태 코드, 오류 메시지) 본문

Language/Java

[java] SQL 데이터베이스 관련 에러 발생 시 response.sendError(HTTP 상태 코드, 오류 메시지)

trueman 2024. 5. 23. 00:18
728x90
728x90

1. SQL 데이터베이스 관련 에러


web.xml에서 정의된 에러 페이지 매핑은 HTTP 상태 코드에 따라 동작합니다. 그러나 SQL 쿼리 실패와 같은 데이터베이스 관련 예외는 서버 측 애플리케이션에서 발생하며, 이는 직접적인 HTTP 상태 코드로 매핑되지 않습니다.

(1) HTTP 상태 코드와 SQL 예외의 차이

  1. SQL 예외는 자바 애플리케이션 내에서 발생하는 런타임 예외입니다. 이 예외는 서버가 클라이언트로 HTTP 응답을 반환할 때 발생하는 HTTP 상태 코드와는 별개로 처리됩니다. 
  2. 따라서, SQL 예외는 HTTP 상태 코드 400, 403, 404, 405, 500, 503 등으로 자동 변환되지 않습니다.

(2) 애플리케이션 레벨에서 예외 처리 필요

  1. SQL 예외는 애플리케이션 코드 내에서 명시적으로 처리하여 적절한 HTTP 상태 코드로 변환한 후, 이를 web.xml에서 정의한 에러 페이지로 리다이렉트해야 합니다.
  2. 예를 들어, SQL 예외가 발생할 때 HTTP 상태 코드를 500 (Internal Server Error)로 설정하고, 이를 처리하는 에러 페이지로 리다이렉트해야 합니다.

2. 해결 방법


SQL 예외를 HTTP 상태 코드로 변환하고 이를 web.xml에서 정의한 에러 페이지로 리다이렉트하려면 다음과 같은 접근 방식을 사용할 수 있습니다.

(1) Controller에서 예외 처리

  1. SQL 예외가 발생할 때 이를 적절한 HTTP 상태 코드로 변환하고, HttpServletResponse 객체를 사용하여 상태 코드를 설정합니다.
  2. SQL 관련 예외가 아닌 다른 예외가 발생할 수 있으므로, 이를 포괄적으로 처리해야 합니다.
  3. 예외를 잡아 적절한 HTTP 상태 코드로 설정하고, 예외 메시지를 포함하여 클라이언트에게 전달합니다.
@RequestMapping("/list.do")
public String list(
    BoardVO boardVO,
    HttpServletRequest request, 
    HttpServletResponse response,
    Model model
) {
    try{
        // service
        boardService.boardList(boardVO);
    } catch (SQLException e) {
        // SQL 예외를 잡아서 HTTP 상태 코드 500 설정 및 예외 메시지 포함
        response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Database error occurred: " + e.getMessage());
    } catch (Exception e) {
        // 일반 예외를 잡아서 HTTP 상태 코드 500 설정 및 예외 메시지 포함
        response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Unexpected error occurred: " + e.getMessage());
    }
}

(2) web.xml 설정

  1. web.xml 파일에 상태 코드 500에 대한 에러 페이지를 설정하여, 상태 코드 500이 발생할 때 /common/error.do로 이동하도록 할 수 있습니다.
  2. 다른 상태 코드도 한다면 다음과 같습니다.
<error-page>
    <error-code>500</error-code>
    <location>/common/error.do</location>
</error-page>
<error-page>
    <error-code>400</error-code>
    <location>/common/error.do</location>
</error-page>
<error-page>
    <error-code>403</error-code>
    <location>/common/error.do</location>
</error-page>
<error-page>
    <error-code>404</error-code>
    <location>/common/error.do</location>
</error-page>
<error-page>
    <error-code>405</error-code>
    <location>/common/error.do</location>
</error-page>
<error-page>
    <error-code>500</error-code>
    <location>/common/error.do</location>
</error-page>
<error-page>
    <error-code>503</error-code>
    <location>/common/error.do</location>
</error-page>
728x90
728x90
Comments