일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Android
- jpa
- Proxy
- java
- 스프링
- 인프런
- SpringBoot
- transaction
- springdatajpa
- http
- 스프링 핵심 기능
- db
- kotlin
- Servlet
- spring
- JDBC
- AOP
- pointcut
- 알고리즘
- 백준
- Spring Boot
- 스프링 핵심 원리
- Exception
- Greedy
- 김영한
- 자바
- QueryDSL
- 그리디
- JPQL
- Thymeleaf
- Today
- Total
목록인프런/[인프런] 스프링 MVC 2 (102)
개발자되기 프로젝트
1. DefaultHandlerExceptionResolver DefaultHandlerExceptionResolver 는 스프링 내부에서 발생하는 스프링 예외를 해결. 대표적으로 파라미터 바인딩 시점에 타입이 맞지 않으면 내부에서 TypeMismatchException 이 발생하는데, 이 경우 예외가 발생했기 때문에 그냥 두면 서블릿 컨테이너까지 오류가 올라가고, 결과적으로 500 오류가 발생한다. 그런데 파라미터 바인딩은 대부분 클라이언트가 HTTP 요청 정보를 잘못 호출해서 발생하는 문제이다. HTTP 에서는 이런 경우 HTTP 상태 코드 400을 사용하도록 되어 있다. DefaultHandlerExceptionResolver 는 이것을 500 오류가 아니라 HTTP 상태 코드를 400으로 변경 2..
1. Spring에 제공하는 ExceptionResolver HandlerExceptionResolverComposite 에 다음 순서로 등록 ExceptionHandlerExceptionResolver @ExceptionHandler 을 처 API 예외 처리는 대부분 이 기능으로 해결 ResponseStatusExceptionResolver HTTP 상태 코드를 지정해준다. 예) @ResponseStatus(value = HttpStatus.NOT_FOUND) DefaultHandlerExceptionResolver 우선 순위가 가장 낮다. 스프링 내부 기본 예외를 처리한다 2. ResponseStatusExceptionResolver ResponseStatusExceptionResolver 는 예외에..
1.예외를 ExceptionResolver에서 마무리하기 예외가 발생하면 WAS까지 예외가 던져지고, WAS에서 오류 페이지 정보를 찾아서 다시 /error 를 호출하는 과정은 생각해보면 너무 복잡하다. ExceptionResolver 를 활용하면 예외가 발생했을 때 이런 복잡한 과정 없이 ExceptionResolver에서 문제를 깔끔하게 해결- > BasicErrorController호출하는 등의 절차가 없음. 2. UserException 임의의 예외를 만듦 public class UserException extends RuntimeException{ public UserException() { super(); } public UserException(String message) { super(me..
예외가 발생해서 서블릿을 넘어 WAS까지 예외가 전달되면 HTTP 상태코드가 500으로 처리된다. 발생하는 예외에 따라서 400, 404 등등 다른 상태코드로 처리하고 싶은데? 오류 메시지, 형식등을 API마다 다르게 처리하고 싶다.?? 예를들어 IllegalArgumentException이 controller 밖으로 넘어가면???400으로 처리하고 싶음! 400 : Client가 범인임! 1. ApiExceptionController "/api/members/bad"로 넘어오면 IllegalArgumentException을 던지자. @GetMapping("/api/members/{id}") public MemberDto getMember(@PathVariable("id") String id){ if(i..
API예외 처리는 SpringBoot의 기본 오류 처리 방식을 사용할 수 있음. 1. BasicErrorController SpringBoot가 제공하는 기본 ErrorController @Controller @RequestMapping("${server.error.path:${error.path:/error}}") public class BasicErrorController extends AbstractErrorController { @RequestMapping(produces = MediaType.TEXT_HTML_VALUE) public ModelAndView errorHtml(HttpServletRequest request, HttpServletResponse response) {} @Reques..
HTML 페이지의 경우 지금까지 설명했던 것 처럼 4xx, 5xx와 같은 오류 페이지만 있으면 대부분의 문제를 해결할 수 있음. API는 각 오류 상황에 맞는 오류 응답 스펙을 정하고, JSON으로 데이터를 내려줘야함. 1. WevServerCustomizer WAS에 예외가 전달되거나, response.sendError() 가 호출되면 위에 등록한 예외 페이지 경로가 호출됨. import org.springframework.boot.web.server.ConfigurableWebServerFactory; import org.springframework.boot.web.server.ErrorPage; import org.springframework.boot.web.server.WebServerFactor..
1. BasicErrorController제공 기능. BasicErrorController 컨트롤러는 다음 정보를 model에 담아서 뷰에 전달한다. 뷰 템플릿에서 이 값을 활용해서 출력할 수 있다. * timestamp: Fri Feb 05 00:00:00 KST 2021 * status: 400 * error: Bad Request * exception: org.springframework.validation.BindException * trace: 예외 trace * message: Validation failed for object='data'. Error count: 1 * errors: Errors(BindingResult) * path: 클라이언트 요청 경로 (`/hello`) 2. Thym..
Servlet을 사용하여 오류 페이지를 만들려면 아래와 같은 과정이 필요함 WebServerCustomizer 예외 종류에 따라서 ErrorPage 를 추가 예외 처리용 컨트롤러 ErrorPageController 1. SpringBoot 사용 SpringBoot는 이런 과정을 모두 해줌 ErrorPage 를 자동으로 등록한다. 이때 /error 라는 경로로 기본 오류 페이지를 설정한다. new ErrorPage("/error") , 상태코드와 예외를 설정하지 않으면 기본 오류 페이지로 사용된다. 서블릿 밖으로 예외가 발생하거나, response.sendError(...) 가 호출되면 모든 오류는 /error 를 호출하게 된다. BasicErrorController 라는 스프링 컨트롤러를 자동으로 등록한..