1. 문제
- 강의를 듣다가 커스텀 예외처리를 할때 왜 Response EntityExceptionHandler를 상속받아서 예외처리를 할까?
+
- REST API를 만들면서 예외 처리가 왜 필요한지
- 예외를 제대로 처리하지 않으면 어떤 문제가 생기는지 (ex: null 반환 + 200 OK)
2. Spring의 예외 처리 흐름 정리
💡 핵심 다이어그램으로 보여주면 좋아
scss
복사편집
[요청] ↓ DispatcherServlet ↓ Controller ↓ (예외 발생) ↓ ExceptionResolver ├─> @ExceptionHandler ├─> @ControllerAdvice + ResponseEntityExceptionHandler ├─> BasicErrorController + DefaultErrorAttributes ↓ HTTP Response 반환
- Spring이 예외를 어디서, 어떤 순서로 처리하는지 설명
- 각 단계에서 우리가 개입할 수 있는 포인트 소개
3. ResponseEntityExceptionHandler의 역할과 커스터마이징
- Spring이 내부적으로 어떤 예외들을 이 클래스로 처리하는지
- 대표 예외: MethodArgumentNotValidException, MissingServletRequestParameterException 등
- @ControllerAdvice와 함께 확장하는 방법
- 오버라이딩 예시
4. @ExceptionHandler(Exception.class)와의 관계
- catch-all 처리기로서의 역할
- 다른 예외 핸들러들이 처리 못한 예외를 마지막으로 잡아냄
- ResponseEntityExceptionHandler와 같이 썼을 때 우선순위 설명
5. BasicErrorController, DefaultErrorAttributes의 역할
- 예외가 아무 데서도 처리되지 않았을 때 기본적으로 호출됨
- 자동 응답 JSON의 구조 (timestamp, status, error, message, path)
- ErrorAttributes를 커스터마이징해서 JSON 포맷 바꾸는 법
6. 실전 예제 코드
- 사용자 정의 예외 생성
- 컨트롤러에서 예외 발생
- 전역 예외 처리기로 잡아서 JSON 응답 반환
- 유효성 검사 실패 시 응답 커스터마이징
7. 마무리 & 팁
- 언제 어떤 방식으로 예외를 처리해야 하는지 요약
- ResponseEntityExceptionHandler는 기본 예외 + 커스터마이징
- ErrorAttributes는 에러 응답 포맷 통일할 때
- 직접 예외를 던지고 예외처리기에서 ResponseEntity로 컨트롤하는 게 RESTful
✨ 마크다운 예시 (블로그용)
markdown
복사편집
### ResponseEntityExceptionHandler란? Spring이 제공하는 기본 예외 처리 추상 클래스입니다. 컨트롤러 단에서 자주 발생하는 예외들을 자동으로 처리해주며, 우리가 오버라이딩해서 응답 형식이나 메시지를 바꿀 수 있습니다. ```java @Override protected ResponseEntity<Object> handleMethodArgumentNotValid(...) { // 커스텀 응답 }
예외 처리 우선순위 흐름
- 컨트롤러 내부 @ExceptionHandler
- @ControllerAdvice의 @ExceptionHandler
- ResponseEntityExceptionHandler의 오버라이드 메서드
- BasicErrorController의 기본 에러 처리
Spring 프레임워크에서는 애플리케이션 전반에 걸친 일관된 예외 처리를 위해 @ControllerAdvice 또는 @RestControllerAdvice 어노테이션의 사용을 권장합니다. 이 어노테이션들은 여러 컨트롤러에서 발생하는 예외를 중앙에서 관리할 수 있도록 도와주며, 이를 통해 중복된 예외 처리 코드를 제거하고 유지보수성을 향상시킬 수 있습니다.
@ControllerAdvice와 @RestControllerAdvice의 차이점:
- @ControllerAdvice: @Controller가 적용된 클래스에 대한 전역 예외 처리를 제공합니다. 주로 뷰를 반환하는 컨트롤러에서 사용됩니다.
- @RestControllerAdvice: @RestController가 적용된 클래스에 대한 전역 예외 처리를 제공합니다. JSON 또는 XML과 같은 데이터를 반환하는 RESTful API 컨트롤러에서 주로 사용됩니다.
ControllerAdvice (Spring Framework 6.2.5 API)
Specialization of @Component for classes that declare @ExceptionHandler, @InitBinder, or @ModelAttribute methods to be shared across multiple @Controller classes. Classes annotated with @ControllerAdvice can be declared explicitly as Spring beans or auto-d
docs.spring.io
재작성!
'언어 > spring' 카테고리의 다른 글
LoggingFailureAnalysisReporter오류 (0) | 2023.02.15 |
---|---|
spring 최초 실행 안될때 (0) | 2023.02.15 |
@RequestParam과 @RequestBody에 차이점 (0) | 2023.02.14 |
[React] 리액트 빌드되는 홈페이지 바꾸는 법 (0) | 2023.01.30 |
[Spring Boot] Whitelabel Error Page (0) | 2023.01.28 |