본문 바로가기

카테고리 없음

에러처리 for spring

이전글에서 에러처리를 할때, RuntimeException은 컴파일단에서 에러를 발생시키지 않는다고 했다.

그럼 실제 Custom한 에러들을 발생시킬때는 RuntimeException을 상속받는것이 좋을까? Exception을 상속받는것이 좋을까?

구현방식마다 다르겠지만, 현재 내가 프로젝트에서 에러를 처리할때는 RuntimeException을 상속받아서 만든다.

 

이유는,

1. 비지니스로직을 구현할때, 일일이 try~catch를 감싸기가 귀찮다.

2. 만약 catch에서의 로직을 변경할 경우 모든 catch를 찾아서 다 바꿔줘야한다.

3. spring에서는 에러처리를 위한 @ControllerAdvice라는 어노테이션이 있다.

 

이러한 이유로 RuntimeException을 상속받는 클래스를 만들어서, 그 에러를 던져버린다. 

그러면 @ControllerAdvice or @RestControllerAdvice 컴포넌트 내에 @ExceptionHandler 라는 메소드레벨 어노테이션의 조합으로 에러처리를 더 효율적으로 할 수 있다. (내부 구현방식은 검색하면 많이 나오기 때문에 생략...)

 

 

정리.

에러처리를 구현해놨는데, 몇달 혹은 몇년뒤 물어봤을때 매번 까먹어서 정리해본다.

코드단에서 컴파일에러를 발생시키지 않으려면 RuntimeException or RuntimeException sub class 를 사용하자.

spring으로 프로젝트를 할 경우, @ControllerAdvice + @ExceptionHandler 조합으로 처리를 하면 쉽게 처리가 가능하다. (내기준)