프로그래밍 관점에서 예외처리는 아주 중요하다고 생각합니다. 예외 처리가 안된 부분은 서버의 무리가 생기게 되고 공격의 취약점이 될 수 있습니다. 자바에서 대표적으로 예외 처리를 하는 방법에는 try-catch 문을 이용하여 적용하는 방법이 있습니다. 하지만 오늘 해볼 내용은 스프링 관점에서 예외처리를 할 예정입니다.
스프링 관점에서 예외처리를 한다고 생각해봅시다. 스프링 프로젝트 중 MVC 패턴 등 쿼리를 이용하여 데이터를 처리하고 여러가지 트렌젝션도 처리된다고 생각해봅시다. 트렌젝션을 처리하는 도중 에러가 발생한다면 Exception 구문으로 들어가게 되는데, 해당 Exception이 롤백을 지원하게 되는지, 안하는지에 따라서 데이터의 손실과 저장 유무가 달라지게 되는 것 입니다.
대략적으로 일단 ExceptionHandler 부터 적용하고 트렌잭션에 대해 차차 알아가보도록 할 예정입니다.
# Contents
- Exception 클래스 생성
- ControllerAdvice 정의 및 구성
- 사용법
# Exception 클래스 생성
RuntimeException은 UnChecked 이기 때문에 강제성 을 부여하지 않습니다. 또한 예외 발생 시 롤백이 가능하기 때문 에 개발자 입장에서는 쿼리를 이용하여 데이터를 처리하는 구간에서 에러 처리를 하고싶은 구문에는 RuntimeException으로 안전하게 처리할 수 있으니 많이 적용하고 사용하는 편입니다.
그러면 먼저 Exception 클래스를 생성하고자 합니다.
Exception 클래스에서는 RuntimeException을 상속받아서 처리하도록 하겠습니다.
public class TestException extends RuntimeException {
private static final long serialVersionUID = 8212234575113606197L;
}
# ControllerAdvice 정의 및 구현
ControllerAdvice는 @Controller나 @RestController 에서 발생한 예외를 한 곳에서 관리하고 처리할 수 있게 도와주는 어노테이션입니다.
해당 코드를 GlobalExceptionErrorHandler.class 로 생성하였습니다.
@ControllerAdvice
public class GlobalExceptionErrorHandler {
private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionErrorHandler.class);
@ExceptionHandler(TestException.class)
public void MaxUploadSizeException(HttpServletRequest request, HttpServletResponse response, TestException err) throws Exception {
logger.info("ErrorExceptionURI : " + request.getRequestURI());
err.printStackTrace();
response.getWriter().write("It`s Error Message");
}
}
# 사용법
컨트롤러에서 간단하게 사용해보도록 하겠습니다.
예시를 든 아주 간단한 사용법 이기 때문에 responsebody 부분이 없으시면 아마 동작하지 않을 것입니다. 참고해서 테스트해주시기 바랍니다.
아래 내용을 컨트롤러에다가 작성해주세요.
@RequestMapping(value = "/test3", method = RequestMethod.GET)
public ModelAndView home3() {
if (responsebody == null) throw new TestException();
return null;
}
'오픈소스 > 스프링' 카테고리의 다른 글
[Spring] Nexus Role 생성, User 생성, Repository 생성 (0) | 2021.10.20 |
---|---|
[Spring] ExceptionHandler 을 사용하여 Transaction 구현 (0) | 2021.10.13 |
[Spring] Cannot load JDBC driver class 'oracle.jdbc.OracleDriver' (1) | 2021.10.13 |
[Spring] Mybatis 사용 중 에러 해결 -TroubleShooting (0) | 2021.10.13 |
[Spring] 스프링 트렌젝션 사용 중 에러 해결 - TroubleShooting (0) | 2021.10.13 |