[스프링부트 blogV3] 2. java로 이해하는 springboot의 예외 처리 1

silver's avatar
Feb 03, 2025
[스프링부트 blogV3] 2.  java로 이해하는 springboot의 예외 처리 1

1. 예외 처리

JVM에서 예외가 터졌을 때 console에 띄워준다.
notion image

1.1 java에서의 예외 처리 흐름

notion image
  • Repository
    • 데이터베이스와 상호작용 중 예외가 발생. try-catch 사용하지 않고 예외를 throw로 Service로 위임한다.
    • 예: DataAccessException, SQLException
  • Service
    • 비즈니스 로직을 처리하는 단계에서 예외를 확인.
    • 필요시 Custom Exception을 생성하거나, 발생한 예외를 throw로 위임.
  • Controller
    • 클라이언트 요청을 처리하는 계층으로, 예외를 감지하고 HTTP 상태 코드와 함께 응답을 반환.
  • DispatcherServlet
    • Spring MVC의 핵심으로, 모든 요청과 응답을 총괄 관리.
  • ControllerAdvice
    • 예외를 한 곳에서 처리하여, 통일된 HTTP 상태 코드와 메시지를 반환.
      • 전역 예외 처리: 프로젝트 전체에서 발생하는 예외를 한 곳에서 관리.
      • HTTP 상태 코드 설정: 예외 상황에 맞는 HTTP 상태 코드를 클라이언트에게 반환.
      • 유지보수성 향상: 중복 코드 제거로 간결하고 일관된 코드 작성 가능.
  • main → JVM
    • 예외가 처리되지 않고 끝까지 전달되면 JVM이 이를 감지하고 애플리케이션이 비정상 종료됨.
 

1.2 예외 처리 방법

  1. try-catch : 오류가 발생한 곳에서 바로 예외를 처리한다.
    1. public void route(String path){ try { if (path.equals("/")) { con.list(); } else if (path.equals("/board")) { con.detail(); } else { System.out.println("404 Not Found"); } }catch (RuntimeException e) { // 1. 컴포넌트 스캔 @ControllerAdvice // 2. invoke(호출) RuntimeException 매개변수를 가진 controllerAdvice.process(e); }
  1. throw : 상위 계층으로 예외처리 위임
    1. public int findById() { // 조회하다가 오류[숫자를 리턴] // -1 오류 (안됨 - 타입이 달라질 수 있다) // 오류가 난 곳에서 처리 (안됨 - 책임이 분리되어 있으니까) throw new RuntimeException("디비에서 오류 남"); }

1.3 예외의 두 가지 유형

  • Compile Exception(Checked Exception) - 컴파일 타임 예외 - jvm이 미리 예측
    • 코드 작성시 빨간줄이 나는 오류로 발생 가능성이 있는 예외를 컴파일 시점에 미리 예측하여 강제로 처리하도록 요구한다.
    • 예)IOException, SQLException
  • Runtime Exception - 런타임 예외
    • 실행 중에 발생하는 모든 예외는 RuntimeException 클래스의 하위 클래스로 예외를 처리하지 않아도 컴파일이 가능하지만 실행 중 애플리케이션이 예기치 않게 종료될 수 있다.
    • 필요에 따라 Custom Exception을 정의하여 사용한다.
    • 예)NullPointerException, ArrayIndexOutOfBoundsException
Share article

silver