728x90
반응형
SMALL

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를 사용하여 전역적인 예외 처리를 수행하는 등의 방법을 사용할 수 있습니다.

예외 처리 구현 시 고려사항

  1. 예외 유형: 예외 유형에 따라 적절한 에러 메시지를 표시하거나, 처리 방식을 달리해야 할 수 있습니다. 예를 들어, 사용자 입력 오류와 시스템 오류는 다른 방식으로 처리되어야 할 수 있습니다.
  2. 에러 페이지: 예외가 발생했을 때 사용자에게 표시할 에러 페이지를 준비하고, 이를 적절한 예외 처리 메서드에서 반환해야 합니다. 에러 페이지는 사용자 친화적이고 이해하기 쉬운 메시지를 제공해야 합니다.
  3. 로깅: 예외 처리 과정에서 로깅을 통해 발생한 예외에 대한 정보를 기록할 수 있습니다. 이를 통해 개발자는 시스템 오류의 원인을 찾고, 이를 수정하는 데 도움을 받을 수 있습니다.
  4. 예외 전파: 예외를 적절한 수준에서 처리하고, 필요한 경우 상위 계층으로 전파할 수 있어야 합니다. 이를 통해 예외 처리의 책임을 명확하게 분리하고, 적절한 수준에서 처리할 수 있습니다.
728x90
반응형
LIST

+ Recent posts