✏️ 2023-01-09 Today I Learn

@mitoconcrete · January 09, 2023 · 5 min read

[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없이 이곳에서 에러를 처리하면 된다.
  • 예외처리 흐름순서 :

    1. 예외발생
    2. ExceptionHandlerResolver가 동작하여 @ExceptionHandler가 컨트롤러에 있는지 확인하고 있으면 처리하고, 없으면 @ControllerAdvice가 있는지 확인한다. 있다면 해당되는 예외처리기가 동작하여 에러를 뱉고, 없다면 다음단계로 넘어간다.
    3. ResponseExceptionHandlerResolver가 동작하여, @ResponseStatus, @ResponseStatusException 여부를 판단함. 있다면, ServletResponse의 sendError()를 실행하여 서블릿으로 해당 오류를 전달하고, 이는 BasicErrorController을 호출하여 에러를 뱉도록 시킴. 이에 해당되지 않으면 다음단계로 넘어간다.
    4. DefaultHandlerExceptionResolver가 동작하여, Spring의 내부 예외인지 검사하여 맞으면 에러를 처리하고 아니면 넘어감.
    5. 최종적으로 아무런 해당사항이 없다면 예외가 서블릿까지 전달되고, 서블릿은 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
어제보다 조금 더 성장하기 위해 기록합니다.