[Spring] Custom 예외 공통처리- CustomException의 중요성과 활용 

hyewon jeong·2024년 5월 31일
0

Spring

목록 보기
62/65

🎈 1. CustomException 이란? 

  • 프로그래밍 언어나 라이브러리에서 제공하는 예외 클래스 외에도 사용자가 필요에 따라 새로운 예외를 정의할 수 있습니다.
    이를 사용자 정의 예외(CustomException)라고 합니다. 
    이 클래스는 특정한 예외 상황을 식별하고 처리하기 위해 개발자가 직접 정의합니다.

📍 1-1. CustomException 장점

  1. 일관된 오류 메시지 제공
    2. 예외 정보 집중 관리
    3.정확한 에러메시지 및 발생위치 파악

🎈 2. SpringMVC Custom Exception dox 

  • spring 공식문서에 보면 예외처리하는 3가지 방법을 설명하고 있습니다.
  1. @ExceptionHandler 를 이용하여 컨트롤러 기반으로 예외처리하는 방식
  2. Exception and Views 뷰로 에외처리 반환하는 방식
  3. @ControllerAdvice 를 이용하여 전역적으로 예외처리하는 방식

🎈 3. CustomException 구현

  • 프로젝트 구조
  • 4개의 클래스에 대해 설명하겠습니다.

📍 3-1. ExceptionStatus 

  • Exception이 발생하였을때 알려준 Status 상태와 메시지를 담은 enum 클래스

📍 3-2.CustomException

  • Exception을 상속받아 커스텀화 한  클래스
public class CustomExceptionextends Exception {

    public CustomException() {
    }

    public CustomException(String message) {
        super(message);
    }

    public CustomException(Exception e) {
        super(e);
    }

}

📍 3-3. ErrorDTO

  • 일종의 Dto 역할

📍 3-4.ControllerExceptionHandler

  • @ControllerAdvice 를 이용하여 전역적으로 예외처리
@ControllerAdvice
public class ControllerExceptionHandler {

    private static final Logger logger = LoggerFactory.getLogger(ControllerExceptionHandler.class);

    @SuppressWarnings("unchecked")
	@ExceptionHandler({RimsException.class})
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    protected ResponseEntity handleApiException(CustomException customException) {
        return new ResponseEntity(new ErrorDTO(
        		customException.getExceptionStatus().getStatusCode(),
        		customException.getExceptionStatus().getMessage()),
                HttpStatus.valueOf(customException.getExceptionStatus().getStatusCode()));
    }

    @ExceptionHandler({RuntimeException.class})
    protected ResponseEntity<String> handleEtcException(CustomException e) {
        return new ResponseEntity<>(e.getMessage(), HttpStatus.BAD_REQUEST);
    }
}

🎈 4. 프론트단, 벡단 2중 예외처리 해야 하는 이유

📍 4-1. FrontEnd(JavaScript) 측 1차 예외처리

📍 4-2. 개발자 도구를 통한 유효성 검사 x

  • 사용자가 악의적인 의도를 가지고 개발자도구를 이용하여 스크립트 코드에서 유효성 부분을 제거 한다면 유효성검사를 우회할 수 있게 됩니다.

이를 방지 하기 위해

📍4-3. BackEnd(spring) 측 2차 예외처리

  • 2중 예외처리를 통해 보안을 강화 할 수 있습니다.

error vs excetion/ throw , throws / throws Exception 을 사용하는 이유

profile
개발자꿈나무

0개의 댓글