일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- jpa
- JDBC
- springdatajpa
- db
- 김영한
- QueryDSL
- Greedy
- 스프링 핵심 기능
- 스프링
- spring
- Proxy
- AOP
- java
- Thymeleaf
- Servlet
- 알고리즘
- pointcut
- http
- Exception
- 백준
- Android
- 그리디
- SpringBoot
- kotlin
- JPQL
- 자바
- 인프런
- 스프링 핵심 원리
- Spring Boot
- transaction
- Today
- Total
목록예외처리 (7)
개발자되기 프로젝트
1. try - catch 문 try 블록에는 예외가 발생할 가능성이 있는 코드 작성. try 블록 안에서 예외가 발생하면 catch 블록이 수행됨 try-catch로 예외 처리를 하면 예외 발생시 비정상 종료가 되지 않고 계속 실행됨. try{ 예외가 발생할 수 있는 코드 } catch(처리할 예외 타입 e){ try 블록 안에서 예외가 발생했을 때 예외를 처리하는 부분 } //정상 상황 일 경우 실행되는 구간 //try-catch로 예외처리를 하지 않으면 예외 발생시 해당 구간 실행되지 않고 비정상 종료 //try-catch로 예외처리 하면 예외 발생해도 코드가 실행됨. public class ArrayIndexException { public static void main(String[] args)..
1. ExceptionResolver 예외가 터지면 WAS까지 올라가서 500이 터진다. client가 허가되지 않은? 여튼 client가 잘못한경우도 exception이 발생하는 경우 500으로 처리된다. 하지만 이와같이 Client가 잘못 요청한 경우는 400으로 처리한는게 맞는 것 같다. 저번에 Naver API를 사용하면서 된통 당했었다 ㅋㅋㅋ 500으로 계속 응답이와서 서버 문제인 줄 알았떠니, 내가 잘못한 경우였다.. ㅜ 여튼 그래서 Client에서 잘못된 요청을 하는 경우 IllegalArgumentException을 터트릴 계획이다. IllegalArgumentException이 발생하는 경우는 500이 아니라 400으로 응답할 것이다. ExceptionResovler를 사용하면 예외 발생..
1.예외를 ExceptionResolver에서 마무리하기 예외가 발생하면 WAS까지 예외가 던져지고, WAS에서 오류 페이지 정보를 찾아서 다시 /error 를 호출하는 과정은 생각해보면 너무 복잡하다. ExceptionResolver 를 활용하면 예외가 발생했을 때 이런 복잡한 과정 없이 ExceptionResolver에서 문제를 깔끔하게 해결- > BasicErrorController호출하는 등의 절차가 없음. 2. UserException 임의의 예외를 만듦 public class UserException extends RuntimeException{ public UserException() { super(); } public UserException(String message) { super(me..
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. 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..