공통 예외처리 적용하기

2022. 4. 11. 16:34BackEnd(Java)/예외처리

API 개발 중 예외처리의 중복성 코드에 눈이 찌푸려졌다 

좀 더 효율적이고 깔끔하게 짜고 싶은데..🤔🤔

 

void func1()
{
   try{
      로직
      .....
   }
   catch(Exception e){
       ...
   
   }
   
}

void func2()
{


   try{
      로직
      .....
   }
   catch(Exception e){
       ...
   
   }
   
}

 

 

구글링 통해 효율적으로 예외를 처리할 수 있는 방법을 찾고 있었다.(ㄹㅇ 구글링만 3시간 넘게 함, 이거보다 좀 더 좋은 방법은 없을까??라는 고집 때문에.. )

 

결국 내 기준 BestPractice를 찾게 되었다!!

(Optional을 사용했을 때의 예외 처리 예제와  Spring의 예외 처리 개념 및 흐름을 알 수 있게 됨)

 

자세한 내용은 아래 참고자료를 보면 된다. 

 


삽질 기록

내가 적용하면서 느낀 경험(삽질)들을 공유하겠다

아래의 개념을 이해하지 못하고 개발을 진행하면 삽질을 하게 될 것임

그러니 아래 개념을 필히 숙지하고 개발을 진행하자.(나처럼 삽질하지 말고 꼭 이해하고 넘어가자)

 

[ Spring의 예외 처리 흐름 ]

앞서 설명하였듯 다음과 같은 예외 처리기들은 스프링의 빈으로 등록되어 있고, 예외가 발생하면 순차적으로 다음의 Resolver들이 처리가능한지 판별한 후에 예외가 처리된다.

  1. ExceptionHandlerExceptionResolver: Controller나 ControllerAdvice에 있는 ExceptionHandler를 처리함
  2. ResponseStatusExceptionResolver: @ResponseStatus 또는 ResponseStatusException를 처리함
  3. DefaultHandlerExceptionResolver: 스프링의 예외들들을 처리함
    ex) HttpMediaTypeNotSupportedException, NoHandlerFoundException 등

 

 

 

  1. 예외가 던져지면 먼저 예외가 발생한 컨트롤러 안에 적합한 @ExceptionHandler가 있는지 검사함
  2. 컨트롤러의 @ExceptionHandler에서 처리가능하다면 처리하고, 그렇지 않으면 넘어감
  3. 컨트롤러의 @ExceptionHandler에서 처리가 불가능하다면 ControllerAdvice를 찾고 적합한 @ExceptionHandler가 있는지 검사함
  4. ControllerAdivce에서 처리가 가능하다면 처리하고, 그렇지않으면 넘어감
  5. ControllerAdvice에서 처리가 불가능하면 @ResponseStatus가 있는지 또는 ResponseStatusException인지 검사함
  6. 맞다면 ResponseStatusExceptionResolver가 처리하고, 그렇지 않다면 DefaultHandlerExceptionResolver가 처리함

 

처음 Spring의 기본적인 예외 처리 방식에서 살펴보았듯 Spring은 BasicErrorController를 구현해두었다. ExceptionHandler나 ControllerAdvice처럼 직접 에러를 반환하는 경우에는 BasicErrorController를 거치지 않지만 @ResponseStatus, ResponseStatusException 등과 같이 에러 응답을 직접 반환하지 않는 경우에는 최종적으로 BasicErrorController를 거쳐 에러가 처리된다.

 

Spring은 매우 다양한 예외 처리 방법을 제공하고 있어 어떻게 에러를 처리하는 것이 최선(Best Practice)인지 파악이 어려울 수 있다. 위의 포스팅을 통해서 이제 ControllerAdvice를 이용하는 것이 일반적으로 최선임을 이해할 수 있었는데, 다음 포스팅에서는 어떻게 ControllerAdvice를 사용할 수 있는지 코드를 통해 살펴보도록 하자.



출처: https://mangkyu.tistory.com/204 [MangKyu's Diary]


참고자료

반응형

'BackEnd(Java) > 예외처리' 카테고리의 다른 글

예외 종류 정리  (0) 2022.04.12
예외란 무엇인가  (1) 2022.04.12