이 글에서는 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를 적절히 활용해 보세요.
'Programming > Spring' 카테고리의 다른 글
스프링 프레임워크 기초: Swagger 적용하기 (0) | 2023.08.15 |
---|---|
스프링 프레임워크 기초: API document (0) | 2023.08.14 |
스프링 프레임워크 기초: 로깅 (Logging) (0) | 2023.08.12 |
스프링 프레임워크 기초: ORM(Object-Relational Mapping) 개념과 활용하기 (0) | 2023.08.11 |
스프링 프레임워크 기초: H2 DB 활용 (0) | 2023.08.10 |