Spring Boot

@RestControllerAdvice

muggle-coder 2023. 8. 25. 14:29
728x90

Spring Framework에서 제공하는 어노테이션 중 하나로, 전역적으로 컨트롤러(Controller)들에 대한 예외 처리와 응답 처리를 담당하는 클래스를 정의할 때 사용됩니다. 이 어노테이션을 사용하여 만든 클래스는 일종의 예외 처리와 응답 처리를 위한 클래스로 동작하며, 어플리케이션의 여러 컨트롤러에서 발생할 수 있는 예외 상황에 대한 일관된 처리를 제공하는 데 도움을 줍니다.

 

 

  1. 전역 예외 처리(Global Exception Handling): @RestControllerAdvice로 정의된 클래스 내에서 특정 예외 타입에 대한 처리 방법을 지정할 수 있습니다. 이렇게 정의한 예외 처리 로직은 어플리케이션의 모든 컨트롤러에서 발생하는 예외에 적용됩니다.
  2. 응답 형식 표준화(Standardized Response Format): 예외가 발생하면, 이를 일관된 형식으로 응답할 수 있도록 도와줍니다. 예를 들어, API 응답의 JSON 형식을 표준화하거나, 에러 코드 및 메시지를 통합하여 사용자 친화적인 에러 응답을 생성할 수 있습니다.
  3. 컨트롤러의 중복 코드 제거: 예외 처리 로직을 각각의 컨트롤러에서 중복해서 작성하지 않고, 단일한 클래스에서 관리하므로 중복 코드를 줄일 수 있습니다.

@RestControllerAdvice 어노테이션을 사용하여 만든 클래스는 보통 @ExceptionHandler 어노테이션과 함께 사용됩니다. @ExceptionHandler는 특정 예외 타입에 대한 처리 방법을 메소드 단위로 정의할 때 사용합니다. 이렇게 정의한 메소드는 @RestControllerAdvice 어노테이션이 적용된 클래스 내에 위치하며, 해당 예외가 발생했을 때 호출되어 예외 처리 및 응답 생성 작업을 수행합니다.

 

@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(Exception.class)
    public ResponseEntity<String> handleGlobalException(Exception ex) {
        // 예외 처리 로직 및 응답 생성
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("An error occurred");
    }

    @ExceptionHandler(ResourceNotFoundException.class)
    public ResponseEntity<String> handleResourceNotFoundException(ResourceNotFoundException ex) {
        // 예외 처리 로직 및 응답 생성
        return ResponseEntity.status(HttpStatus.NOT_FOUND).body(ex.getMessage());
    }
}

GlobalExceptionHandler 클래스는 모든 컨트롤러에서 발생하는 Exception에 대한 처리와, 특정 예외 타입인 ResourceNotFoundException에 대한 처리를 담당합니다. 이렇게 설정하면 예외가 발생했을 때 컨트롤러마다 중복해서 처리 코드를 작성하지 않아도 되며, 일관된 응답 형식을 제공할 수 있습니다.

'Spring Boot' 카테고리의 다른 글

@JsonInclude  (0) 2023.08.25