일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- db
- 알고리즘
- Android
- AOP
- 인프런
- http
- Spring Boot
- SpringBoot
- springdatajpa
- transaction
- 스프링 핵심 원리
- spring
- JPQL
- Greedy
- Exception
- Servlet
- jpa
- java
- 백준
- JDBC
- 스프링
- 김영한
- Proxy
- 자바
- 그리디
- QueryDSL
- 스프링 핵심 기능
- Thymeleaf
- pointcut
- kotlin
- Today
- Total
목록인프런 (528)
개발자되기 프로젝트
예외가 발생해서 서블릿을 넘어 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 라는 스프링 컨트롤러를 자동으로 등록한..
인터셉터 중복 호출 제거 1. LogInterceptor @Slf4j public class LogInterceptor implements HandlerInterceptor { public static final String LOG_ID = "logId"; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String requestURI = request.getRequestURI(); String uuid = UUID.randomUUID().toString(); request.setAttribute(LOG_ID, uuid); l..
1. 예외 발생과 오류 페이지 요청 흐름 1. WAS(여기까지 전파) 컨트롤러(/errorpage/ 500) -> View 오류가 발생하면 오츄 페이지 출력을 위해 WAS내부에서 다시 호출이 발생함. 필터, 서블릿, 인터셉터가 다시 호출된다. 로그인 인증같은 경우 컨트롤러까지 들어갔다는 것은 이미 인증을 통과한 것인디... 다시 필터, 인터셉터가 호출되어야 하나?? 비효율적인디.. 결국 클라이언트로 부터 발생한 정상 요청인지, 아니면 오류 페이지를 출력하기 위한 내부 요청인지 구분 필요! 서블릿은 이런 문제를 해결하기 위해 DispatcherType 이라는 추가 정보를 제공 2. Dispatcher Type 필터는 이런 경우를 위해서 dispatcherTypes 라는 옵션을 제공 log.info("dis..