Good Morning

Spring Framework에서의 효과적인 예외 처리 본문

Back-End/Spring

Spring Framework에서의 효과적인 예외 처리

욘쥰 2024. 8. 1. 14:54

 

Spring Framework에서 예외를 처리하는 다양한 방법에 대해 알아보겠습니다. 예외 처리는 견고한 애플리케이션을 만드는 데 필수적인 요소입니다. Spring은 이를 위한 여러 가지 강력한 도구를 제공합니다.

1. 컨트롤러 레벨 예외 처리

먼저 ExceptionController 클래스를 살펴보겠습니다:

@Controller
public class ExceptionController {
    @ExceptionHandler(Exception.class)
    public String catcher(Exception ex, Model m) {
        m.addAttribute("ex", ex);
        return "error";
    }

    @ExceptionHandler({NullPointerException.class, FileNotFoundException.class})
    public String catcher2(Exception ex, Model m) {
        m.addAttribute("ex", ex);
        return "error";
    }

    // 요청 매핑 메서드들...
}

 

이 컨트롤러에서는 @ExceptionHandler 어노테이션을 사용하여 예외를 처리합니다.

  • 첫 번째 메서드는 모든 Exception을 처리합니다.
  • 두 번째 메서드는 NullPointerExceptionFileNotFoundException을 특별히 처리합니다.

2. 글로벌 예외 처리

애플리케이션 전체에 적용되는 예외 처리를 원한다면 @ControllerAdvice를 사용할 수 있습니다:

@ControllerAdvice("com.fastcampus.ch2")
public class GlobalCatcher {
    @ExceptionHandler(Exception.class)
    public String catcher(Exception ex, Model m) {
        m.addAttribute("ex", ex);
        return "error";
    }

    @ExceptionHandler({ NullPointerException.class, FileNotFoundException.class })
    public String catcher2(Exception ex, Model m) {
        m.addAttribute("ex", ex);
        return "error";
    }
}

이 클래스는 "com.fastcampus.ch2" 패키지의 모든 컨트롤러에 대한 예외를 처리합니다.

3. 예외 발생 시나리오

ExceptionControllerExceptionController2에서 다양한 예외 발생 시나리오를 볼 수 있습니다:

@RequestMapping("/ex")
public String main(Model m) throws Exception {
    throw new Exception("예외가 발생했습니다");
}

@RequestMapping("/ex2")
public String main2() throws Exception {
    throw new FileNotFoundException("예외가 발생했습니다");
}

이러한 메서드들은 의도적으로 예외를 발생시켜 우리의 예외 처리 로직을 테스트합니다.

정리

  1. 컨트롤러 레벨 예외 처리: @ExceptionHandler를 사용하여 특정 컨트롤러 내의 예외를 처리합니다.
  2. 글로벌 예외 처리: @ControllerAdvice를 사용하여 여러 컨트롤러에 걸쳐 예외를 처리합니다.
  3. 세분화된 예외 처리: 특정 예외 타입에 대해 다른 처리 로직을 적용할 수 있습니다.
  4. Model 객체 활용: 예외 정보를 Model에 추가하여 에러 페이지에 전달할 수 있습니다.