학습 목표
- 커스텀 예외의 필요성 이해
기본 예외 처리 방식의 한계를 인식하고, 커스텀 예외를 통해 보다 세밀한 에러 관리를 이해한다. - 커스텀 예외 클래스 생성
다양한 상황에 맞는 사용자 정의 예외 클래스를 생성하는 방법을 학습한다. - 글로벌 예외 처리기(Global Exception Handler) 구현
@ControllerAdvice와 @ExceptionHandler를 활용하여 전역적으로 예외를 처리하는 방법을 익힌다.
common.errors 패키지를 생성

Exception400.java 외 4개를 아래와 같이 만든다.

Exception400.java
package com.tenco.blog_v1.common.errors;
public class Exception400 extends RuntimeException {
// throw new Exception400("야, 너 잘못 던졌어"); <-- 사용하는 시점에 호출 모습
public Exception400(String msg) {
super(msg);
}
}
Exception401.java
package com.tenco.blog_v1.common.errors;
public class Exception401 extends RuntimeException {
// throw new Exception401("야, 너 잘못 던졌어"); <-- 사용하는 시점에 호출 모습
public Exception401(String msg) {
super(msg);
}
}
Exception403.java
package com.tenco.blog_v1.common.errors;
public class Exception403 extends RuntimeException {
// throw new Exception403("야, 너 잘못 던졌어"); <-- 사용하는 시점에 호출 모습
public Exception403(String msg) {
super(msg);
}
}
Exception404.java
package com.tenco.blog_v1.common.errors;
public class Exception404 extends RuntimeException {
// throw new Exception404("야, 너 잘못 던졌어"); <-- 사용하는 시점에 호출 모습
public Exception404(String msg) {
super(msg);
}
}
Exception500.java
package com.tenco.blog_v1.common.errors;
public class Exception500 extends RuntimeException {
// throw new Exception500("야, 너 잘못 던졌어"); <-- 사용하는 시점에 호출 모습
public Exception500(String msg) {
super(msg);
}
}

GlobalExceptionHandler.java
더보기
package com.tenco.blog_v1.common.errors;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.ModelAndView;
@ControllerAdvice // IOC 대상
public class GlobalExceptionHandler {
// @ExceptionHandler // --> 데이터? 화면? --> 화면으로 띄운다 ex) 400.mustache
/**
* 400 Bad Request 예외 처리
* @param ex
* @param model
* @return
*/
@ExceptionHandler(Exception400.class)
public ModelAndView handleException400(Exception400 ex, Model model) {
System.out.println("여기 핸들러가 동작 하나요 ????");
// templates/err/400
ModelAndView mav = new ModelAndView("error/400");
mav.addObject("msg", ex.getMessage());
return mav;
}
/**
* 401 Unauthorized Request 예외 처리
* @param ex
* @param model
* @return
*/
@ExceptionHandler(Exception401.class)
public ModelAndView handleException401(Exception401 ex, Model model) {
ModelAndView mav = new ModelAndView("error/401");
mav.addObject("msg", ex.getMessage());
return mav;
}
/**
* 403 Forbidden 예외 처리
* @param ex
* @param model
* @return
*/
@ExceptionHandler(Exception403.class)
public ModelAndView handleException403(Exception403 ex, Model model) {
ModelAndView mav = new ModelAndView("error/403");
mav.addObject("msg", ex.getMessage());
return mav;
}
/**
* 404 Not Found 예외 처리
* @param ex
* @param model
* @return
*/
@ExceptionHandler(Exception404.class)
public ModelAndView handleException403(Exception404 ex, Model model) {
ModelAndView mav = new ModelAndView("error/404");
mav.addObject("msg", ex.getMessage());
return mav;
}
/**
* 500 ServerError 예외 처리
* @param ex
* @param model
* @return
*/
@ExceptionHandler(Exception500.class)
public ModelAndView handleException500(Exception500 ex, Model model) {
ModelAndView mav = new ModelAndView("error/500");
mav.addObject("msg", ex.getMessage());
return mav;
}
// 메서드
}

생략 …
- @ControllerAdvice: 전역적인 예외 처리를 담당하는 클래스임을 나타냅니다.
- @ExceptionHandler: 특정 예외가 발생했을 때 실행할 메서드를 지정합니다.
- ModelAndView: 뷰와 데이터를 함께 반환하는 객체로, 에러 페이지와 메시지를 전달합니다.
'Spring boot' 카테고리의 다른 글
| 2024.10.14 Blog 프로젝트 만들기(JPA) 리팩토링 (0) | 2024.10.14 |
|---|---|
| 2024.10.11 Blog 프로젝트 만들기(JPA) 인터셉터 만들어 보기 (1) | 2024.10.11 |
| 2024.10.11 Blog 프로젝트 만들기(JPA) 에러 페이지 만들기 (0) | 2024.10.11 |
| 2024.10.10 Blog 프로젝트 만들기(JPA) 회원 정보 수정 (1) | 2024.10.10 |
| 2024.10.10 Blog 프로젝트 만들기(JPA) 회원 가입 기능 만들기 (0) | 2024.10.10 |