본문 바로가기
Programming/Spring

스프링 프레임워크 기초: Exception Handler 작성

by vita12321 2023. 8. 13.
728x90
반응형

글에서는 Exception Handler 기본 개념, 스프링 프레임워크에서 Exception Handler 작성하는 방법, 스프링 부트에서 Exception Handler 설정 사용에 대한 자세한 예제를 설명하겠습니다.


1. Exception Handler 소개

 

Exception Handler 애플리케이션에서 발생하는 예외를 효과적으로 처리하기 위한 방법입니다. 예외 처리가 적절하지 않으면 사용자에게 오류 메시지가 직접 노출되거나 애플리케이션의 안정성이 떨어질 있습니다. 스프링 프레임워크에서는 이러한 문제를 해결하기 위해 Exception Handler 제공합니다.

 

1.1. 예외 처리의 중요성

 

애플리케이션 개발에서 예외 처리는 매우 중요한 작업입니다. 사용자 친화적인 애플리케이션을 개발하기 위해서는 예외 상황에 대비하여 적절한 처리 안내 메시지를 사용자에게 제공해야 합니다. 이를 위해 스프링 프레임워크는 Exception Handler 사용하여 예외 처리를 구현할 있습니다.


2. 스프링 프레임워크에서 Exception Handler 작성하기

 

스프링 프레임워크에서는 ControllerAdvice ExceptionHandler 어노테이션을 통해 예외 처리를 구현할 있습니다.

 

2.1. ControllerAdvice

 

@ControllerAdvice 어노테이션이 적용된 클래스는 모든 컨트롤러에 영향을 미칩니다. 이를 통해 공통적인 예외 처리 코드를 작성하고 중복을 줄일 있습니다. ControllerAdvice 클래스에는 공통 예외 처리 로직을 작성하거나 ErrorResponse 객체를 반환하여 클라이언트에게 응답하는 방법을 구현할 있습니다.

 

예를 들어, 모든 컨트롤러에서 발생하는 사용자 정의 예외인 MyCustomRuntimeException 처리하는 ControllerAdvice 작성해 보겠습니다.

@ControllerAdvice

public class GlobalExceptionHandler {

    @ExceptionHandler(MyCustomRuntimeException.class)

    public ResponseEntity<ErrorResponse> handleMyCustomRuntimeException(MyCustomRuntimeException e) {

        ErrorResponse errorResponse = new ErrorResponse(e.getMessage(), "CustomRuntimeException Occurred.");

        return new ResponseEntity<>(errorResponse, HttpStatus.BAD_REQUEST);

    }

}

 

이렇게 작성된 GlobalExceptionHandler 모든 컨트롤러에서 발생하는 MyCustomRuntimeException 처리하게 됩니다.

 

2.2. ExceptionHandler

 

@ExceptionHandler 어노테이션을 사용하여 특정 예외 유형을 처리할 메서드를 정의할 있습니다. 메서드는 발생한 예외를 인수로 받아 처리합니다.

 

예를 들어, 계산 관련 예외인 MyCustomArithmeticException 발생한 경우 사용자에게 표시할 메시지를 처리하는 ExceptionHandler 작성해 보겠습니다.

@ControllerAdvice

public class GlobalExceptionHandler {

    @ExceptionHandler(MyCustomArithmeticException.class)

    public ResponseEntity<String> handleMyCustomArithmeticException(MyCustomArithmeticException e) {

        // 예외에 따른 적절한 응답 메시지 및 상태 코드를 설정합니다.

        return new ResponseEntity<>(e.getMessage(), HttpStatus.BAD_REQUEST);

    }

}

3. 스프링 부트와 Exception Handler

 

스프링 부트 프로젝트에서도 ControllerAdvice ExceptionHandler 사용하여 예외 처리를 구현할 있습니다. 기본적인 방법은 스프링 프레임워크와 동일하게 작성하면 됩니다. 스프링 부트에서는 특별한 설정 없이 자동으로 ComponentScan 통해 @ControllerAdvice 어노테이션이 적용된 클래스를 찾아 설정합니다.


4. 예제: 스프링 부트 프로젝트에서 Exception Handler 작성하기

 

4.1 의존성 추가

 

스프링 부트 프로젝트 생성 기본적으로 예외 처리 관련 라이브러리가 포함되어 있습니다. 별도의 설정이 필요하지 않습니다.

 

4.2. Exception Handler 인스턴스 생성 사용

 

애플리케이션 클래스에서 Exception Handler 인스턴스를 생성하고 사용하는 예시를 보여드리겠습니다.

@ControllerAdvice

public class MyControllerAdvice {

    @ExceptionHandler(RuntimeException.class)

    public ResponseEntity<String> handleRuntimeException(RuntimeException e) {

        return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);

    }

}

 

@RestController

public class MyController {

    @GetMapping("/test")

    public String test() {

        throw new RuntimeException("Unexpected error occurred.");

    }

}

 

예시에서는 MyController 클래스의 /test 엔드포인트에 요청을 처리하는 도중에 RuntimeException 발생하는 경우, MyControllerAdvice 클래스에서 해당 예외를 처리하게 됩니다. 과정에서 RuntimeException 대해서는 HttpStatus.INTERNAL_SERVER_ERROR 함께 예외 메시지를 반환하게 됩니다.


5. 결론

 

글에서는 Exception Handler 기본 개념과 스프링 프레임워크에서 Exception Handler 작성하는 방법, 스프링 부트를 이용한 간단한 Exception Handler 설정 사용 예제에 대해 자세하게 설명했습니다. 애플리케이션에서 예외 처리를 효과적으로 하여 사용자 경험과 안정성을 높이기 위해 스프링 프레임워크와 함께 Exception Handler 적절히 활용해 보세요.

728x90
반응형