1. @Exceptionhandler 애너테이션을 사용해 예외를 처리할 수 있다.
2. @Restcontrolleradvice 애너테이션을 사용해 예외를 처리할 수 있다.
- @Exceptionhanlder 애너테이션을 사용한 예외 처리
✔︎ Controller 클래스 레벨에서 @ExceptionHandler
애너테이션을 사용하면 해당 Controller에서 발생하는 예외 처리 가능
✔︎ 필요한 Error 정보만 담을 수 있는 Error 전용 Response 객체를 사용하면 클라이언트에게 좀 더 친절한 에러 정보 제공 가능
✔︎ Controller마다 동일하게 발생하는 예외 처리에 대한 중복 코드 발생 가능
✔︎ 다양한 유형의 예외를 처리하기에는 적절 ❌
@ExceptionHandler
를 추가한 에러 처리 핸들러 메서드가 늘어남
- @Restcontrolleradvice 애너테이션을 사용한 예외 처리
✔︎ @RestControllerAdvice
애너테이션을 추가한 클래스를 이용하면 예외 처리 공통화 가능
@RestControllerAdvice
애너테이션을 추가하면, 여러 개의 Controller 클래스에 다음 애너테이션들이 추가된 메서드를 공유해서 사용 ⭕️@ExceptionHandler
@InitBinder
, @ModelAttribute
: JSP, Thymeleaf 같은 서버 사이드 랜더링(SSR) 방식에서 주로 사용@ExceptionHandler
가 추가된 메서드들을 제거@RestControllerAdvice
애너테이션 추가@ExceptionHandler
를 이용해 Exception 핸들러 메서드 구현of()
메서드 : 네이밍 컨벤션(Naming Convention), 주로 객체 생성시 어떤 값들의(of~) 객체를 생성한다는 의미에서 사용✔︎ JSON 형식의 데이터를 Response Body로 전송하기 위해 ResponseEntity로 래핑할 필요 ❌
@RestControllerAdvice
vs @ControllerAdvice
@RestControllerAdvice
= @ControllerAdvice
+ @ResponseBody
✔︎ ResponseStatus
애너테이션으로 HTTP Satatus를 대신 표현 가능
☞ 기본적인 예외처리 방식들을 알 수 있는 시간이었다. @ExceptionHandler
만 이용하면 분명한 단점들이 존재하기에, @RestControllerAdvice
를 대부분 사용하겠지만, 이를 이해하기 위해 우선 @ExceptionHandler
부터 학습할 수 있는 기회가 있어서 좋았다. 물론, 기능들이 늘어남에 따라 ErrorResponse 클래스를 구현하는데에 복잡하고 이해하는데에 어려움이 많았지만, 그만큼 이 기능 덕분에 편리해진 느낌이다.
Spring을 배울 때마다 신기한 게, 분명 복잡하고 어려운 내용들이지만, 이를 통해 구현하게 되면 결과적으로 가독성이 좋고 편리해진다. 참 아이러니한 것 같다 😅 이 아이러니함에서 벗어나기 위해서는 Spring 학습을 정말 잘해놔야한다는 생각이 든다.
・ 비즈니스적인 예외 던지기(Throw) 및 예외 처리
・ 애플리케이션 예외 처리 실습