Java /Spring 예외 처리

Yono·2023년 6월 26일
2
post-thumbnail

요즘 Java Spring FrameWork 에서 예외 처리 하는것으로 골머리를 썩고있다.

일반적으로 Java / Spring 환경에서의 예외처리 방법은 다음과 같다.

  1. Try-Catch 절 사용 : 이는 가장 기본적인 방법으로 에외가 방생할 수 있는 코드를 'try' 블록 안에 넣고 해당 예외를 'catch' 블록에서 잡아서 처리한다.
try {
    // 예외가 발생할 수 있는 코드
} catch (Exception e) {
    // 예외 처리 코드
}
  1. Spring 의 @ExceptionHandler 어노테이션 사용: Spring MVC 컨트롤러에서 예외를 처리하는 효과적인 방법이라고 한다. @ExceptionHandler 어노테이션이 있는 메서드는 해당 컨트롤러에서 발생하는 특정 타입의 예외를 처리한다.
@Controller
public class MyController {
    //...

    @ExceptionHandler(Exception.class)
    public ResponseEntity<String> handleError(Exception e) {
        // 예외 처리 코드
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(e.getMessage());
    }
}
  1. ControllerAdvice 클래스 사용 : 전역에서 예외를 처리하는 방법으로 @ControllerAdvice 어노테이션이 있는 클래스에서는 모든 컨트롤러에서 발생하는 예외를 처리할 수 있다. 이 클래스 내부에는 @ExceptionHandler 를 사용하여 다양한 예외처리를 한다.
@ControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(Exception.class)
    public ResponseEntity<String> handleError(Exception e) {
        // 예외 처리 코드
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(e.getMessage());
    }
}
  1. ResponseEntityExceptionHandler 클래스 확장 : ResponseEntityExceptionHandler 클래스를 상속받아 스프링에서 제공하는 기본예외들을 처리하는 방법을 사용자 정의 할 수 있다.
@ControllerAdvice
public class CustomResponseEntityExceptionHandler extends ResponseEntityExceptionHandler {
    @Override
    protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
        // 예외 처리 코드
        return new ResponseEntity<>(new ErrorDetails("Validation Failed", ex.getBindingResult().toString()), HttpStatus.BAD_REQUEST);
    }
}

현재 프로젝트에서 try catch 를 사용하여 예외를 처리하고 있었으나 부적절한 예외처리 및 발생 가능성 있는 예외에 대해 선행처리를 수행한 후 포괄적인 예외 처리를 수행해야 한다고 지적이 나와 보완중이다. 해당 내용 개선 사항을 마무리 까지 하여 블로그에 추가적으로 포스팅 해야겠다.

profile
Java,Spring,JavaScript

0개의 댓글