Spring MVC에서의 예외 처리 기법에 대해서 설명해주세요.
Spring MVC에서 예외 처리를 위한 여러 가지 기법이 있습니다.
1. @ExceptionHandler: 컨트롤러 클래스 내에서 발생한 예외를 처리할 메서드를 지정하는 데 사용되는 애노테이션입니다. 이 메서드는 예외 클래스를 인수로 받아 처리하며, 동일한 컨트롤러 클래스 내에서 발생한 해당 유형의 예외를 처리할 수 있습니다.
javaCopy code
@Controller
public class MyController {
@RequestMapping("/somepage")
public String somepage() {
//...
throw new CustomException("Some error occurred");
}
@ExceptionHandler(CustomException.class)
public ModelAndView handleCustomException(CustomException ex) {
ModelAndView model = new ModelAndView("error");
model.addObject("exception", ex);
return model;
}
}
2. @ControllerAdvice: 전역 예외 처리를 위한 클래스에 사용되는 애노테이션입니다. 이를 사용하면 애플리케이션 전체에서 발생하는 예외를 처리하는 별도의 클래스를 정의할 수 있습니다. 이 클래스 내부에서는 @ExceptionHandler 애노테이션을 사용하여 처리할 예외 유형을 지정할 수 있습니다.
javaCopy code
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(CustomException.class)
public ModelAndView handleCustomException(CustomException ex) {
ModelAndView model = new ModelAndView("error");
model.addObject("exception", ex);
return model;
}
}
3. 예외 처리용 핸들러 메서드: 컨트롤러에서 발생한 예외를 처리하는 메서드를 지정하는 데 사용됩니다. Spring 3.2 이전 버전에서 사용되었던 예외 처리 방식으로, SimpleMappingExceptionResolver 또는 HandlerExceptionResolver 인터페이스를 구현하여 예외 처리 클래스를 정의할 수 있습니다.
javaCopy code
public class CustomExceptionResolver extends SimpleMappingExceptionResolver {
@Override
protected ModelAndView doResolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
if (ex instanceof CustomException) {
// 처리할 예외 유형에 따른 처리 로직
}
return super.doResolveException(request, response, handler, ex);
}
}
4. ErrorViewResolver 인터페이스 구현: Spring Boot에서 사용 가능한 예외 처리 방식으로 예외가 발생할 때 호출되며, 반환되는 ModelAndView 객체를 통해 에러 페이지를 지정할 수 있습니다.
javaCopy code
@Component
public class CustomErrorViewResolver implements ErrorViewResolver {
@Override
public ModelAndView resolveErrorView(HttpServletRequest request, HttpStatus status, Map<String, Object> model) {
ModelAndView modelAndView = new ModelAndView("error");
modelAndView.addObject("status", status.value());
modelAndView.addAllObjects(model);
return modelAndView;
}
}
이러한 기법들을 사용하여 Spring MVC 애플리케이션에서 발생하는 예외를 효과적으로 처리할 수 있습니다. 이렇게 처리된 예외는 사용자 친화적인 에러 메시지를 표시하거나, 로깅을 통해 개발자가 원인을 찾아 수정할 수 있는 정보를 제공하는 등의 방식으로 처리됩니다.
여기에 추가로, 예외 처리 방법을 조합하여 더욱 강력한 예외 처리 전략을 구축할 수도 있습니다. 예를 들어, @ExceptionHandler를 사용하여 컨트롤러별 예외 처리를 구현하고, @ControllerAdvice를 사용하여 전역적인 예외 처리를 수행하는 등의 방법을 사용할 수 있습니다.
예외 처리 구현 시 고려사항
- 예외 유형: 예외 유형에 따라 적절한 에러 메시지를 표시하거나, 처리 방식을 달리해야 할 수 있습니다. 예를 들어, 사용자 입력 오류와 시스템 오류는 다른 방식으로 처리되어야 할 수 있습니다.
- 에러 페이지: 예외가 발생했을 때 사용자에게 표시할 에러 페이지를 준비하고, 이를 적절한 예외 처리 메서드에서 반환해야 합니다. 에러 페이지는 사용자 친화적이고 이해하기 쉬운 메시지를 제공해야 합니다.
- 로깅: 예외 처리 과정에서 로깅을 통해 발생한 예외에 대한 정보를 기록할 수 있습니다. 이를 통해 개발자는 시스템 오류의 원인을 찾고, 이를 수정하는 데 도움을 받을 수 있습니다.
- 예외 전파: 예외를 적절한 수준에서 처리하고, 필요한 경우 상위 계층으로 전파할 수 있어야 합니다. 이를 통해 예외 처리의 책임을 명확하게 분리하고, 적절한 수준에서 처리할 수 있습니다.
'일상 > 스터디' 카테고리의 다른 글
4일차 과제 List, Set, Map, HashMap의 차이 (0) | 2023.05.11 |
---|---|
3일차 과제 - JPA의 영속성 컨텍스트 (1) | 2023.05.10 |
2일차 과제 - DI(Dependency Injection) (1) | 2023.05.09 |
1일차 과제 - REST API (0) | 2023.05.09 |
1일차 과제 - 객체지향 프로그래밍 (0) | 2023.05.08 |