[TodayKeywords] 오늘 공부한 키워드
Exception
: 개발자가 구현한 코드에서 발생한 오류
Error
: 시스템에서 발생시킨 오류
Checked Exception
: 반드시 체크하고 넘어가야할 예외로써, try-catch 로 잡고가야한다. Runtime Exception 이외의 모든 예외가 이곳에 속하며, 예외발생시 트랜젝션이 롤백되지 않기 때문에 반드시 잡아줘야한다.
Uncheked Exception
: 굳이 체크하고 넘어가지 않아도 될 예외로써, 개발자의 실수로 인해 발생하는 경우가 많다. 예외발생 시 트랜젝션이 롤백된다.
-
예외처리 방식 3가지
예외복구
: 예외가 발생하여도, 어플리케이션이 정상적으로 진행되도록 만드는 예외상황을 말한다.
예외회피
: 어떤 함수를 실행 중 예외가 발생하면, 함수를 호출하는 곳으로 예외를 전가시키는 방법을 의미한다. throws
를 붙혀서 구현한다.
예외전환
: 좀더 예외를 명확하게 하기위해, 다른 예외로 전환하여 뱉는 상황을 말한다.
BasicErrorController의 동작방식
: 어떤 어플리케이션에서 오류가 생기면, WAS까지 오류상황이 전달되고, WAS는 셋팅되어 있는 페이지로 오류를 전달하여 보여주게끔 한다. 이 때 요청이 ERROR이기 때문에 필터가 구동이 되지 않으며, 위 과정에 따라 내부적으로 컨트롤러 -> WAS -> (에러)컨트롤러의 과정으로 동작하여, 결과적으로 컨트롤러에 2번의 요청을 하는 현상을 만든다. BasicErrorController는 오류의 헤더타입에 따라 다른결과를 반환한다.
@ResponseStatus
: BasicErrorController의 결과코드를 변경하여 에러를 반환한다.
@ResponseStatusException
: BasicErrorController의 결과코드와 cause, reason등을 수정하여 에러를 반환한다.
@ExceptionHandler
: 에러를 좀더 자유롭게 처리 할 수 있도록 돕는다. BasicErrorController을 반환하는 것이 아니라 WAS단까지 오류를 내릴 일도, 컨트롤러를 2번호출 할 일도 없다. ExceptionHandler에 원하는 예외의 클래스를 넣어놓고, 매개변수로 해당클래스의 예외를 전달받아 원하는 형태로 반환 할 수 있다.
@ControllerAdvice
: 전역적으로 에러를 핸들링 할 수 있도록 돕는다. 위와 똑같이 BasicErrorController을 반환하는 것이 아니라 WAS단까지 오류를 내릴 일도, 컨트롤러를 2번호출 할 일도 없다. 전역적으로 에러를 캐치하는 컨트롤타워를 둠으로서, try-catch없이 이곳에서 에러를 처리하면 된다.
-
예외처리 흐름순서
:
- 예외발생
- ExceptionHandlerResolver가 동작하여
@ExceptionHandler
가 컨트롤러에 있는지 확인하고 있으면 처리하고, 없으면 @ControllerAdvice
가 있는지 확인한다. 있다면 해당되는 예외처리기가 동작하여 에러를 뱉고, 없다면 다음단계로 넘어간다.
- ResponseExceptionHandlerResolver가 동작하여,
@ResponseStatus
, @ResponseStatusException
여부를 판단함. 있다면, ServletResponse의 sendError()를 실행하여 서블릿으로 해당 오류를 전달하고, 이는 BasicErrorController을 호출하여 에러를 뱉도록 시킴. 이에 해당되지 않으면 다음단계로 넘어간다.
- DefaultHandlerExceptionResolver가 동작하여, Spring의 내부 예외인지 검사하여 맞으면 에러를 처리하고 아니면 넘어감.
- 최종적으로 아무런 해당사항이 없다면 예외가 서블릿까지 전달되고, 서블릿은 BasicErrorController를 호출하여 예외를 처리함.
[NextKeyworks] Study Queue- HTTPS
- SOLID
- loop label
- CSV
- 파일입출력
- UML
- UTC
- epoch time / Instant time
- MVC
- URL ClassLoader
- Secure ClassLoader
- JNI
- GC
- HOF
- 자바 해시코드(hashCode)
- OSI 7 계층
- PCB
- 스프링 설계철학
- RESTful
- 준 영속성
- 지연로딩
- 프록시객체
- jpa - mybatis 의 차이
- orm - mapper 의 차이
- 쿠키/세션/로컬 스토리지
- HttpMessageConverter
- 서블릿
- ACID
@mitoconcrete
어제보다 조금 더 성장하기 위해 기록합니다.