Spring에서의 예외처리(Exception Handling) 메커니즘 > 프로그램의 비정상적 종료를 막기위해, 예외가 발생한 시점부터 예외처리기가 호출되고 처리되는 과정
예외처리는 3가지 부분으로 나뉜다.
1.예외를 발생시키는 과정(throwing) / 2.예외 전파(propagation) / 3.예외를 처리하는 과정(handling)
1.예외 발생 (Throwing Exception)
- 일반적으로 코드 실행 중 예기치 않은 상황이 발생 했을 때 throw 키워드를 사용하여 예외를 발생시킴
- 자바에서는 예외를 나타내는 클래스들이 있으며, 예외가 발생한 상황에 따라 적절한 예외 클래스를 선택하여 예외를 발생시킴
- 프로그램 실행중 예외가 발생하면 JVM은 해당 예외를 발생시킨 메서드의 호출스택정보를 스택추적(Stack Trace)형태로 제공
- 아래의 코드는 인자로 받은 값이 음수일 때 예외를 발생시키는 예제
public void someMethod(int value) {
if (value < 0) {
throw new IllegalArgumentException("value값은 음수일 수 없습니다");
}
}
*Stack Trace : 예외 발생 시점에서부터 예외를 처리하는 메서드까지의 호출 스택을 역순으로 표시하여, 이를 통해 어떤 메서드에서 예외가 발생했는지, 그 메서드를 호출한 메서드는 무엇이었는지 등을 확인할 수 있음
2.예외 전파 (Exception Propagation)
- 예외가 발생한 메서드에서부터 시작하여, 예외를 처리 할 수 있는 예외처리기를 찾아가는 과정
- Stack Trace를 기반으로 예외를 처리할 수 있는 메서드를 찾아가면서 예외를 전파
- 호출 스택을 따라 상위 메서드로 전파되며, 이 과정에서 호출 스택에 있는 메서드들은 해당 예외를 처리할 기회가 생김
- 예외처리기가 발견될 때까지 계속되고, 발견되지 않으면, 프로그램은 비정상적으로 종료되며, 스택 추적 정보가 출력
3. 예외 처리 (Exception Handling)
- 예외가 발생하였을 때, 프로그램이 비정상적으로 종료되지 않게 적절히 처리하는 것을 말함
- @ControllerAdvice 어노테이션을 사용하여 전역적으로 예외를 처리하는 핸들러 클래스를 정의할 수 있음
- 이 핸들러 클래스에서는 @ExceptionHandler 어노테이션을 사용하여 특정 예외 클래스에 대한 처리 방법을 정의
- 다음은 IllegalArgumentException 예외를 처리하는 핸들러 클래스의 예시
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(IllegalArgumentException.class)
public ResponseEntity<String> handleIllegalArgumentException(IllegalArgumentException ex) {
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(ex.getMessage());
}
}
IllegalArgumentException이 발생하면 해당 예외를 받아들여서 HTTP 응답 상태코드를 400 Bad Request로 설정하고 예외 메시지를 응답 본문에 담아 클라이언트에게 반환
'Spring & Boot' 카테고리의 다른 글
Bean 생애주기 간단정리 (0) | 2024.11.24 |
---|---|
DispatcherServlet 디스패처서블릿 (0) | 2024.11.20 |
스프링 배치 필요한 메타데이터 테이블 설정 (0) | 2024.05.20 |
@PathVariable, @RequestParam (0) | 2024.04.20 |
@Configuration @Bean 수동등록 (0) | 2024.03.31 |