분류 전체보기
스프링 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..
스프링 MVC 2 - API 예외 처리 - HandlerExceptionResolver 시작
스프링 MVC 2 - API 예외 처리 - HandlerExceptionResolver 시작
2022.09.29API 예외 처리 - HandlerExceptionResolver 시작 목표 예외가 발생해서 서블릿을 넘어 WAS까지 예외가 전달되면 HTTP 상태코드가 500으로 처리된다. 발생하는 예외에 따라서 400, 404 등등 다른 상태코드로 처리하고 싶다. 오류 메시지, 형식등을 API마다 다르게 처리하고 싶다. 상태코드 변환 예를 들어서 IllegalArgumentException을 처리하지 못해서 컨트롤러 밖으로 넘어가는 일이 발생하면, HTTP 상태 코드를 400으로 처리하고 싶다. 어떻게 해야할까? ApiExceptionController - 수정 http://localhost:8080/api/members/bad 라고 호출하면 IllegalArgumentException이 발생하도록 했다. Postm..
벨만-포드 알고리즘 이해하기 ([백준] 11657번 타임머신)
벨만-포드 알고리즘 이해하기 ([백준] 11657번 타임머신)
2022.09.29벨만-포드 알고리즘이란? 벨만-포드 알고리즘은, 한 노드에서 다른 노드까지의 거리를 구하는 알고리즘이다. 다익스트라 알고리즘이 모든 비용(가중치)가 양수인 경우에만 사용할 수 있는 반면에 벨만-포드 알고리즘은 노드 간의 간선 비용(가중치)가 음수인 경우에도 사용할 수 있다. 다만, 시간 복잡도는 벨만-포드가 더 크기 때문에 비용(가중치)가 모두 양수라면 굳이 벨만-포드를 사용할 필요는 없다. 음수 사이클이 문제가 되는 이유 단순 음수 간선일 경우 : 단순 경로이므로 그대로 비용을 계산. 사이클이 존재하나 양수값이 더 클 경우 : 사이클을 순환하여도 이득이 없으므로 그대로 진행. 사이클이 존재하고 음수값이 더 클 경우 : 사이클을 순환할 수록 비용이 감소해 최소 비용을 찾는 입장에서 사이클을 무한히 순환하..
스프링 MVC 2 - API 예외 처리 - 스프링 부트 기본 오류 처리
스프링 MVC 2 - API 예외 처리 - 스프링 부트 기본 오류 처리
2022.09.28API 예외 처리 - 스프링 부트 기본 오류 처리 API 예외 처리도 스프링 부트가 제공하는 기본 오류 방식을 사용할 수 있다. 스프링 부트가 제공하는 BasicErrorController 코드를 보자. BasicErrorController 코드 /error 동일한 경로를 처리하는 errorHtml(), error() 두 메서드를 확인할 수 있다. errorHtml() : produces = MediaType.TEXT_HTML_VALUE : 클라이언트 요청의 Accept 해더 값이 text/html인 경우에는 errorHtml()을 호출해서 view를 제공한다. error() : 그 외 경우에 호출되고 ResponseEntity로 HTTP Bdoy에 JSON 데이터를 반환한다. 스프링 부트의 예외 처리 ..