본문 바로가기

Room 102. Back-end/Spring

[실전 개발자를 위한 Spring Framework ] 강의 - 예외 처리

21강 스프링 예외처리

  • 목차
    • 내용
      • 스프링 예외처리
    • 학습 목표
      • 스프링에서의 예외처리 방식을 이해하고 구현
      • @ControllerAdvice 사용한 예외처리 작성
  • Spring 예외처리 개요
    • 서버에서 발생된 예외를 최종 사용자에게 전달되는 것을 방지
      • DAO 와 Service 에서 발생되 예외는 Controller 로 모여짐
      • System 예외는 Business 예외로 다시 던지는(re-throwing) 방식 사용
      • @ExceptionHandler 와 @ControllerAdvice 를 사용하여 예외를 처리
    • 스프링에서는 Controller 딴에서 예외를 처리하는 것을 권고하고 있음.
  • Spring 예외처리 특징
    • 컨트롤러 기반
      • Controller - Service - DAO 에서 결국 Controller 로 돌아오기 때문에 Controller 에서 예외처리함
      • 부가 기능을 제공하는 Advice 클래스를 작성함
      • XML 설정 파일에 <aop:config>를 이용해서 애스펙트를 설정함.
        (즉, 어드바이스와 포인트컷을 설정함)
    • 글로벌 Exception 핸들러
      • 예외처리는 cross-cutting concern, 어플리케이션 전체에 포인트컷이 적용되어야 함
      • @ControllerAdvice 어노테이션을 포함한 클래스는 전역 예외처리 컨트롤러가 됨
        ------>>>>>>>>> @ControllerAdvice 가 예외처리 화면으로 보내기 전 캐치하는 컨트롤러!!!
      • 컨트롤러에서 캐치한 예외는 JSP같은 View나 혹은 JSON 으로 응답이 가능
  • MyBatis에서의 예외처리
    • JDBC 관련 코드는 대부분 SQLException 발생
      • 대부분의 SQLException 은 복구가 불가능
      • Spring-MyBatis 는 SQLException 을
        DataAccessException(RuntimeException)으로 re-throwing 함
      • DataAccessException으로 부터 SQLException을 추출하여 getErrorCode()메소드로 에러코드 확인 가능
  • @ControllerAdvice
    • 특징
      • 스프링3.2 이상에서 사용 가능
      • @Contorller 나 @RestController 에서 발생하는 예외를 Catch 함
      • 스프링 4.0 이상에서는 특정한 컨트롤러만 지정해서 catch 가 가능함
    • 설정
      • servlet-context.xml 에서 ControllerAdvice를 include

  • RestController 에서의 예외처리 (스프링 4.0 이후부터 지원)