예외

두주·2024년 2월 6일
0

TIL

목록 보기
51/58

학습 동기

@RestControllerAdvice 를 사용해서 모든 RestController 의 예외를 공통화해서 처리해주세요!


@RestControllerAdvice

이 어노테이션은 Spring MVC에서 제공하는 어노테이션이고
전역적인 예외 처리를 담당하고 있다.

클래스에 적용시키면 해당 클래스는 전역 예외 핸들러로 작동하게 된다.

@RestControllerAdvice
class GlobalExceptionHandler {

    @ExceptionHandler(ModelNotFoundException::class)
    fun handleModelNotFoundException(e: ModelNotFoundException) : ResponseEntity<ErrorResponse> {
        return ResponseEntity
            .status(HttpStatus.NOT_FOUND)
            .body(ErrorResponse(message = e.message))
    }

위와 같이 처리할 경우, ModelNotFoundException이 발생하면 HTTP 상태 코드와 함께
예외 메시지를 응답한다.

핸들러는 모든 컨트롤러에서 발생하는 Exception을 처리하기 때문에
아래와 같은 이점들이 존재한다.

  • 코드의 중복성 감소
    • 예외를 처리하는 코드를 반복적으로 작성할 필요가 없다.
  • 일괄된 예외 처리
    • 서비스 전반에 걸친 예외 처리가 일관된다.
    • 클라이언트는 예상 가능한 에러 응답 형식을 받게 되어 에러를 더 쉽게 처리할 수 있다.
  • 유지보수에 용이함
    • 예외 처리 로직이 한 곳에 모여 있으므로, 수정하거나 확장하는데 용이하다.
    • 예외 처리 방식을 변경하려 할 때 핸들러만 수정하면 된다.
  • 가독성 향상
    • 비즈니스 로직에 예외 처리 코드가 섞이지 않아 가독성이 향상된다.
    • 코드의 복잡도가 낮아지고 이해하기 쉬워진다.
profile
야옹.

0개의 댓글