Spring
스프링 MVC 2 - 정리(API 예외 처리)
스프링 MVC 2 - 정리(API 예외 처리)
2022.10.04정리(API 예외 처리) 시작 HTML 페이지의 경우 지금까지 설명했던 것 처럼 4xx, 5xx와 같은 오류 페이지만 있으면 대부분의 문제를 해결할 수 있다. 그러나 API의 경우에는 각 오류 상황에 맞는 오류 응답 스펙을 정하고, JSON으로 데이터를 내려주어야 한다. 스프링 부트 기본 오류 처리 BasicErrorController 에서 MediaType이 TEXT_HTML_VALUE인 경우에는 HTML을 내려주지만, 그게 아닌 경우에는 ResponseEntity로 JSON API 데이터를 내려준다. HTML 페이지의 경우 4xx, 5xx 등만 하면 되기 때문에 BasicErrorController를 이용하면 되는데 API 오류는 굉장히 디테일하게 해결해야하기 때문에 BasicErrorControll..
스프링 MVC 2 - API 예외 처리 - @ControllerAdvice
스프링 MVC 2 - API 예외 처리 - @ControllerAdvice
2022.10.04API 예외 처리 - @ControllerAdvice @ExceptionHandler를 사용해서 예외를 깔끔하게 처리할 수 있게 되었지만, 정상 코드와 예외 처리 코드가 하나의 컨트롤러에 섞여 있다. @ControllerAdvice 또는 @RestControllerAdvice를 사용하면 둘을 분리할 수 있다. ExControllerAdvice ApiExceptionV2Controller 코드에 있는 @ExceptionHandler 모두 제거 Postman 실행 http://localhost:8080/api2/members/bad http://localhost:8080/api2/members/user-ex http://localhost:8080/api2/members/ex @ControllerAdvice ..
스프링 MVC 2 - API 예외 처리 - @ExceptionHandler
스프링 MVC 2 - API 예외 처리 - @ExceptionHandler
2022.10.04API 예외 처리 - @ExceptionHandler HTML 화면 오류 vs API 오류 웹 브라우저에 HTML 화면을 제공할 때는 오류가 발생하면 BasicErrorController를 사용하는게 편하다. 이때는 단순히 5xx, 4xx 관련된 오류 화면을 보여주면 된다. BasicErrorController는 이런 매커니즘을 모두 구현해두었다. 그런데 API는 각 시스템 마다 응답의 모양도 다르고, 스펙도 모두 다르다. 예외 상황에 단순히 오류 화면을 보여주는 것이 아니라, 예외에 따라서 각각 다른 데이터를 출력해야 할 수도 있고, 그리고 같은 예외라고 해도 어떤 컨트롤러에서 발생했는가에 따라서 다른 예외 응답을 내려주어야 할 수도 있다. 한마디로 매우 세밀한 제어가 필요하다. 앞서 이야기했지만, 예..
스프링 MVC 2 - API 예외 처리 - 스프링이 제공하는 ExceptionResolver2
스프링 MVC 2 - API 예외 처리 - 스프링이 제공하는 ExceptionResolver2
2022.10.03API 예외 처리 - 스프링이 제공하는 ExceptionResolver2 이번에는 DefaultHandlerExceptionResolver를 살펴보자. DefaultHandlerExceptionResolver는 스프링 내부에서 발생하는 스프링 예외를 해결한다. 대표적으로 파라미터 바인딩 시점에 타입이 맞지 않으면 내부에서 TypeMismatchException이 발생하는데, 이 경우 예외가 발생했기 때문에 그냥 두면 서블릿 컨테이너까지 오류가 올라가고, 결과적으로 500오류가 발생한다. 그런데 파라미터 바인딩은 대부분 클라이언트가 HTTP 요청 정보를 잘못 호출해서 발생하는 문제이다. HTTP에서는 이런 경우 HTTP 상태 코드 400을 사용하도록 되어 있다. DefaultHandlerExceptionR..
스프링 MVC 2 - API 예외 처리 - 스프링이 제공하는 ExceptionResolver1
스프링 MVC 2 - API 예외 처리 - 스프링이 제공하는 ExceptionResolver1
2022.10.03API 예외 처리 - 스프링이 제공하는 ExceptionResolver1 스프링 부트가 기본으로 제공하는 ExceptionResolver는 다음과 같다. HandlerExceptionResolverComposite에 다음 순서로 등록 ExceptionHandlerExceptionResolver ResponseStatusExceptionResolver DefaultHandlerExceptionResolver → 우선 순위가 가장 낮다. ExceptionHandlerExceptionResolver @ExceptionHandler을 처리한다. API 예외 처리는 대부분 이 기능으로 해결한다. 조금 뒤에 자세히 설명한다. ResponseStatusExceptionResolver HTTP 상태 코드를 지정해준다...
스프링 MVC 2 - API 예외 처리 - HandlerExceptionResolver 활용
스프링 MVC 2 - API 예외 처리 - HandlerExceptionResolver 활용
2022.10.01API 예외 처리 - HandlerExceptionResolver 활용 예외를 여기서 마무리하기 예외가 발생하면 WAS까지 예외가 던져지고, WAS에서 오류 페이지 정보를 찾아서 다시 /error를 호출하는 과정은 생각해보면 너무 복잡하다. ExceptionResolver를 활용하면 예외가 발생했을 때 이런 복잡한 과정 없이 여기에서 문제를 깔끔하게 해결할 수 있다. 예제로 알아보자. 먼저 사용자 정의 예외를 하나 추가하자. UserException ApiExceptionController - 예외 추가 http://localhost:8080/api/members/user-ex 호출시 UserException이 발생하도록 해두었다. 이제 이 예외를 처리하는 UserHandlerExceptionResolv..