모든 예외 처리

날아올라돼지야·2024년 8월 25일
0

현재 GlobalExceptionHandler 클래스에서는 두 가지 사용자 정의 예외(ResourceNotFoundException과 CustomerAlreadyExistsException)만 처리하고 있습니다. 그러나 애플리케이션 내에서 발생할 수 있는 모든 런타임 예외를 처리하려면 Exception.class를 처리하는 글로벌 예외 핸들러를 추가해야 합니다.

GlobalExceptionHandler 클래스에 모든 예외를 처리하는 메서드 추가

    @ExceptionHandler(Exception.class)
    public ResponseEntity<ErrorResponseDto> handleGlobalException(Exception exception,
                                                                            WebRequest webRequest) {
        ErrorResponseDto errorResponseDTO = new ErrorResponseDto(
                webRequest.getDescription(false),
                HttpStatus.INTERNAL_SERVER_ERROR,
                exception.getMessage(),
                LocalDateTime.now()
        );
        return new ResponseEntity<>(errorResponseDTO, HttpStatus.INTERNAL_SERVER_ERROR);
    }

예외 처리 테스트

런타임 예외가 발생했을 때 글로벌 예외 핸들러가 제대로 작동하는지 테스트하기 위해, AccountController 클래스에서 의도적으로 예외를 발생시킵니다.
@AllArgsConstructor를 삭제하여 의존성 주입이 실패하도록 설정합니다.
이로 인해 AccountService가 null이 되고, API 호출 시 NullPointerException이 발생하게 될 것입니다.

// POST /api/accounts/create (생성 API 호출 시)
{
"status": "500",
"error": "Internal Server Error",
"message": "IAccountService is null",
"path": "/api/accounts/create",
"timestamp": "2023-08-25T10:00:00"
}

코드를 빌드한 후, API를 호출하여 NullPointerException이 발생하는지 확인합니다. 발생한 예외는 글로벌 예외 핸들러에 의해 처리되어, 클라이언트는 적절한 오류 응답을 받게 됩니다.

글로벌 예외처리의 중요성!!!

글로벌 예외 처리는 애플리케이션의 모든 컨트롤러 메서드에서 발생할 수 있는 예외를 일관되게 처리하는 데 매우 중요합니다. 이를 위해 @ControllerAdvice와 @ExceptionHandler 애노테이션을 결합하여 전역 에러 로직을 구현합니다.

이 과정을 통해 런타임 예외가 발생했을 때 애플리케이션이 안정적으로 예외를 처리하고, 클라이언트에게 적절한 오류 메시지를 반환할 수 있음을 확인할 수 있습니다.

profile
무슨 생각하며 사니

0개의 댓글