1.Spring MVC에서의 예외 처리 |
-기본 용어
(1)예외(Exception) : 프로그램 실행 중 발생할 수 있는 오류나 문제
● 파일을 찾을 수 없는 경우
● 메모리 부족으로 인한 오류
● 형식이 잘못된 입력값
(2)예외 처리(Exception handling) : 예외 상황에 대처하기 위한 프로그래밍 기법으로, 대개 예외가 발생했을 때 이를 알리고 적절한 조치를 취하는 것으로 이루어짐
(3)예외 던지기(throw) : 예외가 발생한 것을 다른 코드에 알리는 것.
● 예외를 던지면 현재 실행 중인 메서드는 즉시 중단되고, 호출 스택(Call Stack)에서 예외를 처리할 수 있는 다른 메서드를 찾음
● 예외가 발생한 지점에서 예외를 처리할 수 없는 경우, 호출된 상위 메서드로 예외를 전달하며, 최종적으로 프로그램이 중단될 수 있음
(4)예외 잡기(catch) : 예외를 처리하는 코드 블록을 의미.
● 예외가 발생한 메서드에서 예외를 잡을 수 있는 경우, catch 블록에서 예외 처리 코드를 실행함
● catch 블록은 try-catch 문을 사용하여 작성되며, try 블록 안에서 예외가 발생할 가능성이 있는 코드를 작성하고, catch 블록에서 예외 처리 코드를 작성함
-@ExceptionHandler를 이용한 예외 처리
● Spring에서의 예외는 애플리케이션에 문제가 발생할 경우, 이 문제를 알려서 처리하는 것 뿐만 아니라 유효성 검증에 실패했을 때와 같이 이 실패를 하나의 예외로 간주하여 이 예외를 던져서(throw) 예외 처리를 유도함
● @ExceptionHandler 애너테이션을 이용해서 예외를 처리하도록 handleException() 메서드를 추가하고, ErrorResponse 클래스를 통해 응답하는 방식을 규정할 수 있음
● 하지만 @ExceptionHandler 애너테이션으로 에러 처리를 하면 아래와 같은 단점이 있음
(1)각각의 Controller 클래스에서 @ExceptionHandler 애너테이션을 사용하기 때문에 각 Controller 클래스마다 코드 중복이 발생
(2)Controller 에서 처리해야 하는 예외의 종류가 여러 가지이기 때문에 하나의 Controller 클래스 내에서 @ExceptionHandler를 추가한 에러 처리 핸들러 메서드가 늘어남
-@RestControllerAdvice를 이용한 예외 처리(예외 처리 공통화)
● 특정 클래스에 @RestControllerAdvice 애너테이션을 추가하면 여러개의 Controller 클래스에서 @ExceptionHandler, @InitBinder 또는 @ModelAttribute 가 추가된 메서드를 공유해서 사용할 수 있음
● 예외 처리를 공통화하면 각 Controller마다 추가되는 @ExceptionHandler 로직에 대한 중복 코드를 제거하고, Controller의 코드를 단순화 할 수 있음
2.비즈니스 로직에 대한 예외 처리 |
-Application에서 발생하는 예외(Exception)는 크게 체크 예외(Checked Exception)와 언체크 예외(Unchecked Exception)로 구분됨
● 체크 예외 : 발생한 예외를 잡아서(catch) 체크한 후에 복구나 회피 등 구체적인 처리를 해야 하는 예외
● 언체크 예외 : 예외를 잡아서(catch) 해당 예외에 대한 어떤 처리를 할 필요가 없는 예외
-개발자가 의도적으로 예외를 던질 수(throw) 있는 상황
백엔드 서버와 외부 시스템과의 연동에서 발생하는 에러 처리
시스템 내부에서 조회하려는 자원(Resource)이 없는 경우
-의도적인 예외 던지기/받기(throw/catch)
● Java에서는 throw 키워드를 사용해서 예외를 메서드 바깥으로 던질 수 있음
● 던져진 예외는 메서드를 호출한 지점으로 던져지게 됨
-사용자 정의 예외(Custom Exception) 사용
● 예외를 조금 더 구체적으로 표현할 수 있도록 Custom할 수 있음
● 개발자가 의도적으로 예외를 던져야 하는 다양한 상황에서 정보만 바꿔가며 던질 수 있음
+RuntimeException을 상속한 예외는 모두 언체크 예외임
+RuntimeException을 상속해서 개발자가 직접 사용자 정의 예외(Custom Exception)를 만들 수 있음
+고정된 예외를 처리할 경우는 @ResponseStatus 애너테이션을, HttpStatus가 동적으로 변경되는 경우에는ResponseEntity 객체를 사용
-내용 출처 : code states
'부트캠프' 카테고리의 다른 글
Spring MVC - JPA 기반 데이터 액세스 계층 part 1 (0) | 2023.02.23 |
---|---|
Spring MVC - JDBC 기반 데이터 액세스 계층 (0) | 2023.02.20 |
Spring MVC - Service 계층 (0) | 2023.02.17 |
Spring MVC - API 계층 part 2 (0) | 2023.02.14 |
Spring MVC - API계층 part 1 (0) | 2023.02.13 |