카테고리 없음

45.02_[Spring MVC] 예외 처리 큰 흐름 정리_22.10.26

생각없이 해도 생각보다 좋다. 2022. 10. 26. 23:38

>Spring의 에러 응답 메세지
: Spring은 애플리케이션에 예외가 발생할 경우, 내부적으로 에러 응답 메세지를 전송해줌.
: 하지만 Spring의 에러 응답 메세지는 어떤 부분에서 어떤 잘못때문에 에러가 난 것인지 알기 힘듬

>@ExceptionHandler의 사용
: @ExceptionHandler는 메서드에 붙일 수 있는 애너테이션으로, 해당 메서드는 인자로 Exception class 참조 변수를 제공받는다.
: 따라서, 인자로 제공받는 Excetion에 대한 에러 응답 메세지를 개발자가 직접 처리할 수 있게 만든다.
: @ExceptionHandler가 붙은 메서드를 사용하면 Spring의 에러 응답 메세지를 보다 구체적으로 만들어 출력할 수 있다.
: 응답 메세지의 내용이 @ExceptionHandler가 붙은 메서드의 반환값에 의존하기 때문에 필요한 에러 메세지만 반환할 수 있는 로직이 있으면 더욱 구체적인 에러 응답 메세지를 출력할 수 있다.

>예외 응답 메세지 처리 담당 클래스(ErrorResponse)
: @ExceptionHandler가 붙은 메서드에서 필요한 에러 응답 메세지만 보기 위해 @ExceptionHandler의 정보를 저장하고, 필요한 정보를 추출하여 반환하는 로직을 모아놓은 클래스이다.
: 로직을 분리함으로써 역할 분담이 명확해질 수 있다.
: 또한, 여러 @ExceptionHandler의 정보를 저장하기 때문에 어떤 예외들이 발생했고, 발생하지 않았는지 확인할 수 있다.

>@RestControllerAdvice의 사용
: @RestControllerAdvice는 클래스에 붙일 수 있는 애너테이션으로, 던져진 모든 예외를 받을 수 있는 기능과 내부에 존재하는 메서드의 반환값을 JSON 형식의 응답 메세지로 반환하는 기능을 갖는 애너테이션이다.
: 예외가 발생하는 이곳 저곳에 일일이 @ExceptionHandler를 사용하지 않고 @RestControllerAdvice 붙인 클래스 하나로 해결할 수 있음.
: 내부에 예외 상황을 다루는 메서드들을 만들어 @ExceptionHandler를 붙이고, 로직은 ErrorResponse 클래스에서 가져와서 쓰고 반환된 값은 JSON형태로 클라이언트에 전달한다.
: API Layer와 Service Layer 모두에서 예외를 받아 처리할 수 있다.

>Custom Exception
: 에러 정보(예. status, message)를 담는 enum을 만든다.
: 원하는 Exception 클래스(예. RuntimeException)를 상속받는 Custom Exception 클래스를 만든다.
: Custom Exception 클래스는 에러 정보를 담는 enum을 필드로 삼는다.
: 원하는 예외 상황이 발생하는 위치에서 원하는 예외 상황이 발생할 조건일 때, custom Exception을 던진다. (throw new CustomException();)
: 던져진 Exception을 처리하기 위해 @RestControllerAdvice 가 붙은 클래스 내부를 수정한다.