스프링부트

스프링에서는 어노테이션을 기반으로 ExceptionResolver를 활용하여 API 예외처리를 한다. 스프링 부트가 제공하는 ExceptionResolver는 다음과 같다. ( 위에서부터 우선순위가 높은 ExceptionResolver이다.) ExceptionHandlerExceptionResolver ResponseStatusExceptionResolver DefaultHandlerExceptionResolver ExceptionHandlerExceptionResolver @ExceptionHandler 어노테이션을 찾아 해당 메서드에 작성된 예외 처리를 진행한다. 대부분의 API 예외처리는 이 기능으로 해결한다. @ExceptionHandler 앞서 API예외처리에 있어서 HandlerExceptio..
발생하는 예외에 따라서 400, 404 등 상태코드를 다르게 정의하고 싶을 때는 어떻게 해야할까? ExceptionResolver를 사용하면 된다. ExceptionResolver ExceptionResolver는 말 그대로 컨트롤러(핸들러)에서 발생한 예외를 해결하는 역할을 한다. 앞서 예외를 보면 컨트롤러에서 예외가 발생하면 수 많은 단계를 거쳐 WAS까지 전달되게 되는데, 이 ExceptionResolver를 사용하게 되면 WAS까지 예외가 던져지지 않고 여기서 해결이 가능하다. ExceptionResolver를 사용하지 않으면 예외가 WAS까지 전달되어 WAS에서 서버 내부 오류로 인식해 500 상태코드를 전달하게 된다. 하지만, ExceptionResolver를 적용하면 예외를 Exception..
API 예외처리는 어떻게 해야할까? API는 각 오류 상황에 맞는 오류 응답 스펙을 정하고, JSON으로 데이터를 내려주어야 한다. -> 각 통신마다 쓰는 방식이 다다르기 때문에 이를 공통적으로 약속(오류 응답 스펙)을 하고 사용해야 한다. 서블릿 API 예외처리 기존의 예외처리는 클라이언트가 예외를 발생했을 때 HTML 형태의 뷰템플릿을 반환했었다. 하지만, 클라이언트에서 API로 요청을 보내면 서버에서도 API로 반환해주어야 하는데 별도의 설정 없이 진행하게 되면 서버는 똑같이 뷰템플릿을 반환한다. API 예외처리 컨트롤러 @RestController public class ApiExceptionController { @GetMapping("/api/members/{id}") public Member..
스프링 부트는 앞서 서블릿 오류페이지 처리의 과정들을 기본으로 제공한다. 그로 인해 스프링 부트에서 복잡한 처리를 진행해주어서 개발자는 오류페이지만 등록해주면 된다. 스프링 부트 예외 페이지 처리 ErrorPage를 자동으로 등록한다. => ' /error ' 경로로 기본 오류페이지를 설정한다. new ErrorPage("/error") 서블릿 밖으로 예외가 발생하거나, response.sendError(...) 가 호출되면 모든 오류는 /error 를 호출하게 된다. BasicErrorController를 자동으로 등록 : ErrorPage에서 등록한 /error 를 매핑해서 처리하는 컨트롤러 이러한 처리로 개발자는 오류 페이지 화면만 규칙에 맞게 작성하여 등록하면 된다. BasicErrorContro..
thk_dev
'스프링부트' 태그의 글 목록