스프링 프레임워크 기초: 스프링MVC 예외 처리
스프링 프레임워크는 웹 애플리케이션 개발을 효율적으로 지원하는 자바 기반 오픈 소스 프레임워크입니다. 이 글에서는 스프링MVC에서 예외 처리에 관한 좀 더 상세한 설명을 제공하겠습니다.
1. 스프링MVC 예외 처리 개요
에러 또는 예외가 발생할 수 있는 상황은 웹 애플리케이션 개발 과정에서 흔한 상황입니다. 이 예외들을 적절하게 처리하고 사용자에게 친절한 메시지와 함께 적절한 동작을 유도하면 서비스 품질과 사용자 경험이 개선됩니다. 스프링MVC에서는 다양한 방법으로 예외 처리를 할 수 있으며, 이를 통해 개발자들은 애플리케이션 개발 시 필요한 예외 처리 방법을 적합하게 선택 및 구현할 수 있습니다.
2. 스프링MVC 예외 처리 방법
스프링MVC에서 제공하는 예외 처리 방법은 크게 세 가지로 나뉩니다. 이제 각 방법에 대해 좀 더 자세하게 살펴보겠습니다.
1) @ExceptionHandler 어노테이션 사용
@ExceptionHandler 어노테이션을 사용하여 컨트롤러에서 발생하는 특정 예외를 처리할 수 있습니다. 각 컨트롤러에서 특정 예외에 대한 처리 로직을 구현하기 위해 해당 어노테이션을 사용하며, 프레임워크에서 발생한 예외를 전달받아 처리합니다.
컨트롤러 클래스에서 @ExceptionHandler 어노테이션을 사용한 예시는 다음과 같습니다.
@Controller
public class MyController {
@GetMapping("/example")
public String exampleMethod() {
// 비즈니스 로직 수행
return "example";
}
@ExceptionHandler(MyCustomException.class)
public ModelAndView handleMyCustomException(MyCustomException ex) {
ModelAndView mav = new ModelAndView("error");
mav.addObject("message", ex.getMessage());
return mav;
}
}
위 예시에서는 `MyCustomException` 발생 시 `handleMyCustomException` 메서드를 실행해 사용자에게 "error" 뷰를 보여주며 에러 메시지를 전달합니다.
2) @ControllerAdvice 어노테이션 사용
전역 예외 처리를 구현하려면 @ControllerAdvice 어노테이션을 사용하여 전체 애플리케이션에서 발생하는 예외를 한 곳에서 처리할 수 있습니다. 이 방법을 사용하면 여러 컨트롤러에서 중복되는 예외 처리 로직을 줄이고 일관된 처리를 제공할 수 있습니다.
전역 예외 처리 클래스를 @ControllerAdvice 어노테이션과 함께 사용한 예시는 다음과 같습니다.
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(MyCustomException.class)
public ModelAndView handleMyCustomException(MyCustomException ex) {
ModelAndView mav = new ModelAndView("error");
mav.addObject("message", ex.getMessage());
return mav;
}
@ExceptionHandler(Exception.class)
public ModelAndView handleGlobalException(Exception ex) {
ModelAndView mav = new ModelAndView("error");
mav.addObject("message", "전역 예외 발생: " + ex.getMessage());
return mav;
}
}
위 예시에서는 `MyCustomException`과 기타 모든 예외를 각각 전역으로 처리하는 메서드를 구현하고 있습니다.
3) 컨트롤러 클래스에서 예외 처리 로직 구현
컨트롤러 클래스에서 직접 예외 처리 로직을 구현하여 예외 처리를 할 수 있습니다. try-catch 문을 사용하여 예외가 발생하면 적절한 응답을 반환하는 방식으로 처리할 수 있습니다. 이 방법은 간단한 로직이나 디버깅 용도로 사용할 수 있습니다.
@GetMapping("/example")
public ResponseEntity<String> getResult() {
try {
// 비즈니스 로직 처리
return ResponseEntity.ok("Success");
} catch (MyCustomException e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("MyCustomException 발생: " + e.getMessage());
} catch (Exception e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("예외 발생: " + e.getMessage());
}
}
위 예시에서는 핸들러 메서드 내에서 try-catch 구문을 사용해 예외 처리를 수행하고 있습니다.
3. 요약
이 글에서는 스프링MVC에서 예외 처리 방법에 대해 좀 더 상세하게 살펴보았습니다. 스프링MVC에서 예외 처리는 매우 중요한 부분으로 적절한 예외 처리를 통해 서비스의 품질과 사용자 경험을 향상시킬 수 있습니다.
예외 처리 방법은 상황에 따라 유연하게 선택할 수 있어야 하며, 그에 따른 긍정적인 효과 및 사용자 경험의 개선을 기대할 수 있습니다. 다양한 예외 처리 방법을 적용하면서 스프링MVC 웹 애플리케이션 개발에 효과적인 결과를 얻기를 바랍니다.